branches: Removed contrib folders fromold branches to avoid svn:externals troubles. The contribs were never released so it is OK to remove them from the branches.

git-svn-id: https://svn.apache.org/repos/asf/jackrabbit/branches/0.9@514281 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/contrib/bdb-persistence/HEADER.txt b/contrib/bdb-persistence/HEADER.txt
deleted file mode 100644
index 1c669de..0000000
--- a/contrib/bdb-persistence/HEADER.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
\ No newline at end of file
diff --git a/contrib/bdb-persistence/LICENSE.txt b/contrib/bdb-persistence/LICENSE.txt
deleted file mode 100644
index d645695..0000000
--- a/contrib/bdb-persistence/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/contrib/bdb-persistence/README.txt b/contrib/bdb-persistence/README.txt
deleted file mode 100644
index 97b504c..0000000
--- a/contrib/bdb-persistence/README.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-// bdb-persistence
-// jcr (jsr170) support for the spring framework 
-
-// berkeleydb je support for jackrabbit persistence
-
-~~ About
-
-A berkeleydb persistence manager for the jackrabbit project ( http://incubator.apache.org/jackrabbit )
-It use the berkeleydb java edition
-
-~~ Installation/Configuration
-
-Just use org.apache.jackrabbit.core.state.bdb.BerkeleyDBPersistenceManager as persistence managers in your repository.xml configuration file
\ No newline at end of file
diff --git a/contrib/bdb-persistence/applications/test/jaas.config b/contrib/bdb-persistence/applications/test/jaas.config
deleted file mode 100644
index 1fc3c36..0000000
--- a/contrib/bdb-persistence/applications/test/jaas.config
+++ /dev/null
@@ -1,3 +0,0 @@
-Jackrabbit {
-  org.apache.jackrabbit.core.security.SimpleLoginModule required anonymousId="anonymous";
-};
\ No newline at end of file
diff --git a/contrib/bdb-persistence/applications/test/log4j.properties b/contrib/bdb-persistence/applications/test/log4j.properties
deleted file mode 100644
index 570d2eb..0000000
--- a/contrib/bdb-persistence/applications/test/log4j.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-# Set root logger level to DEBUG and its only appender to A1.
-log4j.rootLogger=INFO, file
-#log4j.rootLogger=DEBUG, stdout, file
-#log4j.rootLogger=ERROR, stdout, file
-
-log4j.logger.org.apache.jackrabbit.test=DEBUG
-log4j.logger.org.apache.jackrabbit.core.state.bdb=DEBUG
-
-# 'stdout' is set to be a ConsoleAppender.
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-
-# 'stdout' uses PatternLayout
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%d{dd.MM.yyyy HH:mm:ss} *%-5p* [%t] %c{1}: %m (%F, line %L)\n
-
-# 'file' is set to be a FileAppender.
-log4j.appender.file=org.apache.log4j.FileAppender
-log4j.appender.file.File=jcr.log
-
-# 'file' uses PatternLayout.
-log4j.appender.file.layout=org.apache.log4j.PatternLayout
-log4j.appender.file.layout.ConversionPattern=%d{dd.MM.yyyy HH:mm:ss} *%-5p* [%t] %c{1}: %m (%F, line %L)\n
diff --git a/contrib/bdb-persistence/applications/test/repository.xml b/contrib/bdb-persistence/applications/test/repository.xml
deleted file mode 100644
index 512786a..0000000
--- a/contrib/bdb-persistence/applications/test/repository.xml
+++ /dev/null
@@ -1,220 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE Repository [
-    <!--
-        the Repository element configures a repository instance;
-        individual workspaces of the repository are configured through
-        separate configuration files called workspace.xml which are
-        located in a subfolder of the workspaces root directory
-        (see Workspaces element).
-
-        it consists of
-
-            a FileSystem element (the virtual file system
-            used by the repository to persist global state such as
-            registered namespaces, custom node types, etc..
-
-            a Security element that specifies the name of the app-entry
-            in the JAAS config and the access manager
-
-            a Workspaces element that specifies to the location of
-            workspaces root directory and the name of default workspace
-
-            a Workspace element that is used as a workspace configuration
-            template; it is used to create the initial workspace if there's
-            no workspace yet and for creating additional workspaces through
-            the api
-
-            a SearchIndex element that is used for configuring per workspace
-            Indexing-related settings
-
-            a Versioning element that is used for configuring
-            versioning-related settings
-    -->
-    <!ELEMENT Repository (FileSystem,Security,Workspaces,Workspace,Versioning,SearchIndex?)>
-
-    <!--
-        a virtual file system
-    -->
-    <!ELEMENT FileSystem (param*)>
-    <!ATTLIST FileSystem
-      class CDATA #REQUIRED>
-
-    <!--
-        the Security element specifies the name (appName attribute)
-        of the JAAS configuration app-entry for this repository. 
-
-        it also specifies the access manager to be used (AccessManager element).
-    -->
-    <!ELEMENT Security (AccessManager, LoginModule?)>
-    <!ATTLIST Security
-      appName CDATA #REQUIRED>
-
-    <!--
-        the AccessManager element configures the access manager to be used by
-        this repository instance; the class attribute specifies the FQN of the
-        class implementing the AccessManager interface
-    -->
-    <!ELEMENT AccessManager (param*)>
-    <!ATTLIST AccessManager
-      class CDATA #REQUIRED>
-
-    <!--
-        generic parameter (name/value pair)
-    -->
-    <!ELEMENT param EMPTY>
-    <!ATTLIST param
-      name CDATA #REQUIRED
-      value CDATA #REQUIRED>
-
-     <!--
-        the LoginModule element optionally specifies a JAAS login module to
-        authenticate users. This feature allows the use of Jackrabbit in a
-        non-JAAS environment.
-    -->
-    <!ELEMENT LoginModule (param*)>
-    <!ATTLIST LoginModule
-      class CDATA #REQUIRED>
-
-   <!--
-        the Workspaces element specifies the workspaces root directory
-        (rootPath attribute) and the name of the default workspace
-        (defaultWorkspace attribute).
-
-        individual workspaces are configured through individual workspace.xml
-        files located in a subfolder each of the workspaces root directory.
-    -->
-    <!ELEMENT Workspaces EMPTY>
-    <!ATTLIST Workspaces
-      rootPath CDATA #REQUIRED
-      defaultWorkspace CDATA #REQUIRED>
-
-    <!--
-        the Workspace element serves as a workspace configuration template;
-        it is used to create the initial workspace if there's no workspace yet
-        and for creating additional workspaces through the api
-    -->
-    <!ELEMENT Workspace (FileSystem,PersistenceManager,SearchIndex?)>
-    <!ATTLIST Workspace
-      name CDATA #REQUIRED>
-
-    <!--
-        the PersistenceManager element configures the persistence manager
-        to be used for the workspace; the class attribute specifies the
-        FQN of the class implementing the PersistenceManager interface
-    -->
-    <!ELEMENT PersistenceManager (param*)>
-    <!ATTLIST PersistenceManager
-      class CDATA #REQUIRED>
-
-    <!--
-        the SearchIndex element specifies the locaction of the search index
-        (used by the QueryHandler); the class attribute specifies the
-        FQN of the class implementing the QueryHandler interface.
-    -->
-    <!ELEMENT SearchIndex (param*,FileSystem?)>
-    <!ATTLIST SearchIndex
-      class CDATA #REQUIRED>
-
-    <!--
-        the Versioning element configures the persistence manager
-        to be used for persisting version state
-    -->
-    <!ELEMENT Versioning (FileSystem, PersistenceManager)>
-    <!ATTLIST Versioning
-      rootPath CDATA #REQUIRED
-    >
-]>
-<!-- Example Repository Configuration File -->
-<Repository>
-    <!--
-        virtual file system where the repository stores global state
-        (e.g. registered namespaces, custom node types, etc.)
-    -->
-    <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
-        <param name="path" value="${rep.home}/repository"/>
-    </FileSystem>
-
-    <!--
-        security configuration
-    -->
-    <Security appName="Jackrabbit">
-        <!--
-            access manager:
-            class: FQN of class implementing the AccessManager interface
-        -->
-        <AccessManager class="org.apache.jackrabbit.core.security.SimpleAccessManager">
-            <!-- <param name="config" value="${rep.home}/access.xml"/> -->
-        </AccessManager>
-
-        <LoginModule class="org.apache.jackrabbit.core.security.SimpleLoginModule">
-           <!-- anonymous user name ('anonymous' is the default value) -->
-           <param name="anonymousId" value="anonymous"/>
-        </LoginModule>
-    </Security>
-
-    <!--
-        location of workspaces root directory and name of default workspace
-    -->
-    <Workspaces rootPath="${rep.home}/workspaces" defaultWorkspace="default"/>
-    <!--
-        workspace configuration template:
-        used to create the initial workspace if there's no workspace yet
-    -->
-    <Workspace name="${wsp.name}">
-        <!--
-            virtual file system of the workspace:
-            class: FQN of class implementing the FileSystem interface
-        -->
-        <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
-            <param name="path" value="${wsp.home}/data"/>
-        </FileSystem>
-        <!--
-            persistence manager of the workspace:
-            class: FQN of class implementing the PersistenceManager interface
-        -->
-        <PersistenceManager class="org.apache.jackrabbit.core.state.bdb.BerkeleyDBPersistenceManager"/>
-        <!--
-            Search index and the file system it uses.
-            class: FQN of class implementing the QueryHandler interface
-        -->
-        <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
-            <param name="path" value="${wsp.home}/index"/>
-        </SearchIndex>
-    </Workspace>
-
-    <!--
-        Configures the versioning
-    -->
-    <Versioning rootPath="${rep.home}/version">
-        <!--
-            Configures the filesystem to use for versioning for the respective
-            persistence manager
-        -->
-        <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
-            <param name="path" value="${rep.home}/version" />
-        </FileSystem>
-        
-        <!--
-            Configures the persistence manager to be used for persisting version state.
-            Please note that the current versioning implementation is based on
-            a 'normal' persistence manager, but this could change in future
-            implementations.
-        -->
-        <PersistenceManager class="org.apache.jackrabbit.core.state.bdb.BerkeleyDBPersistenceManager"/>
-
-    </Versioning>
-
-    <!--
-        Search index for content that is shared repository wide
-        (/jcr:system tree, contains mainly versions)
-        
-        The same parameters are supported as in the search index configuration
-        inside the workspace definition element.
-        
-        This element is optional. If omitted, the /jcr:system tree will not be
-        indexed and no results will be returned for that tree!
-    -->
-    <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
-        <param name="path" value="${rep.home}/repository/index"/>
-    </SearchIndex>
-</Repository>
diff --git a/contrib/bdb-persistence/applications/test/repository/nodetypes/custom_nodetypes.xml b/contrib/bdb-persistence/applications/test/repository/nodetypes/custom_nodetypes.xml
deleted file mode 100644
index 491bab6..0000000
--- a/contrib/bdb-persistence/applications/test/repository/nodetypes/custom_nodetypes.xml
+++ /dev/null
@@ -1,248 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-<nodeTypes xmlns:nt="http://www.jcp.org/jcr/nt/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:rep="internal" xmlns:sv="http://www.jcp.org/jcr/sv/1.0" xmlns:test="http://www.apache.org/jackrabbit/test" xmlns:mix="http://www.jcp.org/jcr/mix/1.0">
-  <nodeType name="test:versionable" isMixin="false" hasOrderableChildNodes="false" primaryItemName="">
-    <supertypes>
-      <supertype>mix:versionable</supertype>
-      <supertype>nt:base</supertype>
-    </supertypes>
-    <propertyDefinition name="*" requiredType="undefined" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false" />
-    <propertyDefinition name="test:copyOnParentVersionProp" requiredType="String" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false" />
-    <propertyDefinition name="test:versionOnParentVersionProp" requiredType="String" autoCreated="false" mandatory="false" onParentVersion="VERSION" protected="false" multiple="false" />
-    <propertyDefinition name="test:initializeOnParentVersionProp" requiredType="String" autoCreated="false" mandatory="false" onParentVersion="INITIALIZE" protected="false" multiple="false" />
-    <propertyDefinition name="test:computeOnParentVersionProp" requiredType="String" autoCreated="false" mandatory="false" onParentVersion="COMPUTE" protected="false" multiple="false" />
-    <propertyDefinition name="test:ignoreOnParentVersionProp" requiredType="String" autoCreated="false" mandatory="false" onParentVersion="IGNORE" protected="false" multiple="false" />
-    <propertyDefinition name="test:abortOnParentVersionProp" requiredType="String" autoCreated="false" mandatory="false" onParentVersion="ABORT" protected="false" multiple="false" />
-    <childNodeDefinition name="*" defaultPrimaryType="test:versionable" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" sameNameSiblings="false">
-      <requiredPrimaryTypes>
-        <requiredPrimaryType>nt:base</requiredPrimaryType>
-      </requiredPrimaryTypes>
-    </childNodeDefinition>
-    <childNodeDefinition name="test:copyOnParentVersion" defaultPrimaryType="nt:unstructured" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" sameNameSiblings="false">
-      <requiredPrimaryTypes>
-        <requiredPrimaryType>nt:base</requiredPrimaryType>
-      </requiredPrimaryTypes>
-    </childNodeDefinition>
-    <childNodeDefinition name="test:versionOnParentVersion" defaultPrimaryType="nt:unstructured" autoCreated="false" mandatory="false" onParentVersion="VERSION" protected="false" sameNameSiblings="false">
-      <requiredPrimaryTypes>
-        <requiredPrimaryType>nt:base</requiredPrimaryType>
-      </requiredPrimaryTypes>
-    </childNodeDefinition>
-    <childNodeDefinition name="test:initializeOnParentVersion" defaultPrimaryType="nt:unstructured" autoCreated="false" mandatory="false" onParentVersion="INITIALIZE" protected="false" sameNameSiblings="false">
-      <requiredPrimaryTypes>
-        <requiredPrimaryType>nt:base</requiredPrimaryType>
-      </requiredPrimaryTypes>
-    </childNodeDefinition>
-    <childNodeDefinition name="test:computeOnParentVersion" defaultPrimaryType="nt:unstructured" autoCreated="false" mandatory="false" onParentVersion="COMPUTE" protected="false" sameNameSiblings="false">
-      <requiredPrimaryTypes>
-        <requiredPrimaryType>nt:base</requiredPrimaryType>
-      </requiredPrimaryTypes>
-    </childNodeDefinition>
-    <childNodeDefinition name="test:ignoreOnParentVersion" defaultPrimaryType="nt:unstructured" autoCreated="false" mandatory="false" onParentVersion="IGNORE" protected="false" sameNameSiblings="false">
-      <requiredPrimaryTypes>
-        <requiredPrimaryType>nt:base</requiredPrimaryType>
-      </requiredPrimaryTypes>
-    </childNodeDefinition>
-    <childNodeDefinition name="test:abortOnParentVersion" defaultPrimaryType="nt:unstructured" autoCreated="false" mandatory="false" onParentVersion="ABORT" protected="false" sameNameSiblings="false">
-      <requiredPrimaryTypes>
-        <requiredPrimaryType>nt:base</requiredPrimaryType>
-      </requiredPrimaryTypes>
-    </childNodeDefinition>
-  </nodeType>
-  
-  <!-- Defines a referenceable nodetype for testing purposes -->
-  <nodeType name="test:refTargetNode" isMixin="false" hasOrderableChildNodes="false" primaryItemName="">
-    <supertypes>
-      <supertype>mix:versionable</supertype>
-      <supertype>nt:base</supertype>
-    </supertypes>
-    <propertyDefinition name="*" requiredType="undefined" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false"/>
-  </nodeType>
-
-  <!-- Defines a nodetype for tests of NodeType.canSetProperty(), Property.setValue() and Node.setProperty() -->
-  <nodeType name="test:canSetProperty" isMixin="false" hasOrderableChildNodes="false" primaryItemName="">
-    <supertypes>
-      <supertype>nt:base</supertype>
-    </supertypes>
-    <propertyDefinition name="String" requiredType="String" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false"/>
-    <propertyDefinition name="StringMultiple" requiredType="String" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="true"/>
-    <propertyDefinition name="StringConstraints" requiredType="String" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false">
-      <valueConstraints>
-        <valueConstraint>abc</valueConstraint>
-        <valueConstraint>def</valueConstraint>
-        <valueConstraint>ghi</valueConstraint>
-      </valueConstraints>
-    </propertyDefinition>
-    <propertyDefinition name="StringMultipleConstraints" requiredType="String" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="true">
-      <valueConstraints>
-        <valueConstraint>abc</valueConstraint>
-        <valueConstraint>def</valueConstraint>
-        <valueConstraint>ghi</valueConstraint>
-      </valueConstraints>
-    </propertyDefinition>
-    <propertyDefinition name="Binary" requiredType="Binary" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false"/>
-    <propertyDefinition name="BinaryMultiple" requiredType="Binary" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="true"/>
-    <propertyDefinition name="BinaryConstraints" requiredType="Binary" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false">
-      <valueConstraints>
-        <valueConstraint>(,100)</valueConstraint>
-      </valueConstraints>
-    </propertyDefinition>
-    <propertyDefinition name="BinaryMultipleConstraints" requiredType="Binary" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="true">
-      <valueConstraints>
-        <valueConstraint>(,100)</valueConstraint>
-      </valueConstraints>
-    </propertyDefinition>
-    <propertyDefinition name="Date" requiredType="Date" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false"/>
-    <propertyDefinition name="DateMultiple" requiredType="Date" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="true"/>
-    <propertyDefinition name="DateConstraints" requiredType="Date" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false">
-      <valueConstraints>
-        <valueConstraint>(1974-02-15T00:00:00.000Z,)</valueConstraint>
-      </valueConstraints>
-    </propertyDefinition>
-    <propertyDefinition name="DateMultipleConstraints" requiredType="Date" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="true">
-      <valueConstraints>
-        <valueConstraint>(,1974-02-15T00:00:00.000Z)</valueConstraint>
-      </valueConstraints>
-    </propertyDefinition>
-    <propertyDefinition name="Double" requiredType="Double" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false"/>
-    <propertyDefinition name="DoubleMultiple" requiredType="Double" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="true"/>
-    <propertyDefinition name="DoubleConstraints" requiredType="Double" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false">
-      <valueConstraints>
-        <valueConstraint>(100,)</valueConstraint>
-      </valueConstraints>
-    </propertyDefinition>
-    <propertyDefinition name="DoubleMultipleConstraints" requiredType="Double" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="true">
-      <valueConstraints>
-        <valueConstraint>(,100)</valueConstraint>
-      </valueConstraints>
-    </propertyDefinition>
-    <propertyDefinition name="Long" requiredType="Long" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false"/>
-    <propertyDefinition name="LongMultiple" requiredType="Long" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="true"/>
-    <propertyDefinition name="LongConstraints" requiredType="Long" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false">
-      <valueConstraints>
-        <valueConstraint>(100,)</valueConstraint>
-      </valueConstraints>
-    </propertyDefinition>
-    <propertyDefinition name="LongMultipleConstraints" requiredType="Long" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="true">
-      <valueConstraints>
-        <valueConstraint>(,100)</valueConstraint>
-      </valueConstraints>
-    </propertyDefinition>
-    <propertyDefinition name="Boolean" requiredType="Boolean" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false"/>
-    <propertyDefinition name="BooleanMultiple" requiredType="Boolean" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="true"/>
-    <propertyDefinition name="BooleanConstraints" requiredType="Boolean" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false">
-      <valueConstraints>
-        <valueConstraint>true</valueConstraint>
-      </valueConstraints>
-    </propertyDefinition>
-    <propertyDefinition name="BooleanMultipleConstraints" requiredType="Boolean" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="true">
-      <valueConstraints>
-        <valueConstraint>true</valueConstraint>
-      </valueConstraints>
-    </propertyDefinition>
-    <propertyDefinition name="Name" requiredType="Name" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false"/>
-    <propertyDefinition name="NameMultiple" requiredType="Name" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="true"/>
-    <propertyDefinition name="NameConstraints" requiredType="Name" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false">
-      <valueConstraints>
-        <valueConstraint>abc</valueConstraint>
-      </valueConstraints>
-    </propertyDefinition>
-    <propertyDefinition name="NameMultipleConstraints" requiredType="Name" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="true">
-      <valueConstraints>
-        <valueConstraint>abc</valueConstraint>
-      </valueConstraints>
-    </propertyDefinition>
-    <propertyDefinition name="Path" requiredType="Path" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false"/>
-    <propertyDefinition name="PathMultiple" requiredType="Path" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="true"/>
-    <propertyDefinition name="PathConstraints" requiredType="Path" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false">
-      <valueConstraints>
-        <valueConstraint>/abc</valueConstraint>
-      </valueConstraints>
-    </propertyDefinition>
-    <propertyDefinition name="PathMultipleConstraints" requiredType="Path" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="true">
-      <valueConstraints>
-        <valueConstraint>/abc</valueConstraint>
-      </valueConstraints>
-    </propertyDefinition>
-    <propertyDefinition name="ReferenceConstraints" requiredType="Reference" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false">
-      <valueConstraints>
-        <valueConstraint>test:canSetProperty</valueConstraint>
-      </valueConstraints>
-    </propertyDefinition>
-    <propertyDefinition name="ReferenceMultipleConstraints" requiredType="Reference" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="true">
-      <valueConstraints>
-        <valueConstraint>test:canSetProperty</valueConstraint>
-      </valueConstraints>
-    </propertyDefinition>
-  </nodeType>
-
-  <!-- Defines a nodetype for testing NodeType.canAddChildNode() -->
-  <nodeType name="test:canAddChildNode" isMixin="false" hasOrderableChildNodes="false" primaryItemName="">
-    <supertypes>
-      <supertype>nt:base</supertype>
-    </supertypes>
-    <childNodeDefinition name="testChildWithDefaultType" defaultPrimaryType="nt:base" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" sameNameSiblings="false">
-      <requiredPrimaryTypes>
-        <requiredPrimaryType>nt:base</requiredPrimaryType>
-      </requiredPrimaryTypes>
-    </childNodeDefinition>
-    <childNodeDefinition name="testChildWithoutDefaultType" defaultPrimaryType="" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" sameNameSiblings="false">
-      <requiredPrimaryTypes>
-        <requiredPrimaryType>nt:base</requiredPrimaryType>
-      </requiredPrimaryTypes>
-    </childNodeDefinition>
-  </nodeType>
-
-  <!-- Defines a nodetype for testing Node.setProperty(). -->
-  <nodeType name="test:setProperty" isMixin="false" hasOrderableChildNodes="false" primaryItemName="">
-    <supertypes>
-      <supertype>nt:base</supertype>
-      <supertype>mix:referenceable</supertype>
-    </supertypes>
-    <propertyDefinition name="*" requiredType="undefined" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false" />
-    <propertyDefinition name="test:multiProperty" requiredType="undefined" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="true" />
-    <childNodeDefinition name="*" defaultPrimaryType="test:setProperty" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" sameNameSiblings="false" />
-  </nodeType>
-  
-  <!-- Defines a nodetype to test assuming the PropertyType at Node.setProperty(). -->
-  <nodeType name="test:setPropertyAssumingType" isMixin="false" hasOrderableChildNodes="false" primaryItemName="">
-    <supertypes>
-      <supertype>nt:base</supertype>
-    </supertypes>
-    <propertyDefinition name="test:singleProperty" requiredType="undefined" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false" />
-    <propertyDefinition name="test:multiProperty" requiredType="undefined" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="true" />
-    <childNodeDefinition name="*" defaultPrimaryType="test:setPropertyAssumingType" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" sameNameSiblings="false" />
-  </nodeType>
-
-  <!-- Defines a nodetype with a childNodeDefinition that does not allow same name siblings -->
-  <nodeType name="test:sameNameSibsFalseChildNodeDefinition" isMixin="false" hasOrderableChildNodes="false" primaryItemName="">
-    <supertypes>
-      <supertype>nt:base</supertype>
-    </supertypes>
-    <propertyDefinition name="*" requiredType="undefined" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false"/>
-    <childNodeDefinition name="*" defaultPrimaryType="test:sameNameSibsFalseChildNodeDefinition" autoCreated="false" mandatory="false" onParentVersion="COMPUTE" protected="false" sameNameSiblings="false">
-      <requiredPrimaryTypes>
-        <requiredPrimaryType>nt:base</requiredPrimaryType>
-      </requiredPrimaryTypes>
-    </childNodeDefinition>
-  </nodeType>  
-
-</nodeTypes>
-
diff --git a/contrib/bdb-persistence/applications/test/repositoryStubImpl.properties b/contrib/bdb-persistence/applications/test/repositoryStubImpl.properties
deleted file mode 100644
index 793e2fe..0000000
--- a/contrib/bdb-persistence/applications/test/repositoryStubImpl.properties
+++ /dev/null
@@ -1,432 +0,0 @@
-#
-# This is the configuration file for the jackrabbit repository test stub.
-#
-
-# Stub implementation class
-javax.jcr.tck.repository_stub_impl=org.apache.jackrabbit.core.JackrabbitRepositoryStub
-
-# repository specific configuration
-org.apache.jackrabbit.repository.config=applications/test/repository.xml
-org.apache.jackrabbit.repository.name=repo
-org.apache.jackrabbit.repository.home=applications/test
-org.apache.jackrabbit.repository.jaas.config=applications/test/jaas.config
-
-# credential configuration
-javax.jcr.tck.superuser.name=superuser
-javax.jcr.tck.superuser.pwd=
-javax.jcr.tck.readwrite.name=user
-javax.jcr.tck.readwrite.pwd=
-javax.jcr.tck.readonly.name=anonymous
-javax.jcr.tck.readonly.pwd=
-
-# global test configuration
-javax.jcr.tck.testroot=/testroot
-javax.jcr.tck.nodetype=nt:unstructured
-javax.jcr.tck.nodename1=node1
-javax.jcr.tck.nodename2=node2
-javax.jcr.tck.nodename3=node3
-javax.jcr.tck.nodename4=node4
-javax.jcr.tck.propertyname1=prop1
-javax.jcr.tck.propertyname2=prop2
-javax.jcr.tck.workspacename=test
-
-# namespace configuration
-javax.jcr.tck.namespaces=test
-javax.jcr.tck.namespaces.test=http://www.apache.org/jackrabbit/test
-
-# sample for per test case config overriding
-# Test class: AddNodeText
-# Test method: testName
-javax.jcr.tck.AddNodeTest.testName.nodename1=myname
-
-# ==============================================================================
-# JAVAX.JCR CONFIGURATION
-# ==============================================================================
-
-# Test class: ItemDefTest
-javax.jcr.tck.ItemDefTest.testroot=/testdata
-
-# Test class: ItemReadMethodsTest
-javax.jcr.tck.ItemReadMethodsTest.testroot=/testdata
-
-# Test class: NodeReadMethodsTest
-javax.jcr.tck.NodeReadMethodsTest.testroot=/testdata
-
-# Test class: PropertyTypeTest
-javax.jcr.tck.PropertyTypeTest.testroot=/testdata
-
-# Test class: BinaryPropertyTest
-javax.jcr.tck.BinaryPropertyTest.testroot=/testdata
-
-# Test class: BooleanPropertyTest
-javax.jcr.tck.BooleanPropertyTest.testroot=/testdata
-
-# Test class: DatePropertyTest
-javax.jcr.tck.DatePropertyTest.testroot=/testdata
-
-# Test class: DoublePropertyTest
-javax.jcr.tck.DoublePropertyTest.testroot=/testdata
-
-# Test class: LongPropertyTest
-javax.jcr.tck.LongPropertyTest.testroot=/testdata
-
-# Test class: NamePropertyTest
-javax.jcr.tck.NamePropertyTest.testroot=/testdata
-
-# Test class: PathPropertyTest
-javax.jcr.tck.PathPropertyTest.testroot=/testdata
-
-# Test class: ReferencePropertyTest
-javax.jcr.tck.ReferencePropertyTest.testroot=/testdata
-
-# Test class: StringPropertyTest
-javax.jcr.tck.StringPropertyTest.testroot=/testdata
-
-# Test class: SetValueVersionExceptionTest
-# nodetype2: nodetype with a reference property
-javax.jcr.tck.SetValueVersionExceptionTest.nodetype2=nt:linkedFile
-# propertyname3: name of the single value reference property
-javax.jcr.tck.SetValueVersionExceptionTest.propertyname3=jcr:content
-
-# Test class: UndefinedPropertyTest
-javax.jcr.tck.UndefinedPropertyTest.testroot=/testdata
-
-# Test class: PropertyReadMethodsTest
-javax.jcr.tck.PropertyReadMethodsTest.testroot=/testdata
-
-# Test class: NodeIteratorTest
-javax.jcr.tck.NodeIteratorTest.testroot=/testdata
-
-# Test class: NodeDiscoveringNodeTypesTest
-javax.jcr.tck.NodeDiscoveringNodeTypesTest.testroot=/testdata
-
-# Test class: RepositoryDescriptorTest
-javax.jcr.tck.RepositoryDescriptorTest.testroot=/testdata
-
-# Test class: WorkspaceReadMethodsTest
-javax.jcr.tck.WorkspaceReadMethodsTest.testroot=/testdata
-
-# Test class: SessionReadMethodsTest
-javax.jcr.tck.SessionReadMethodsTest.testroot=/testdata
-
-# Test class: NamespaceRegistryReadMethodsTest
-javax.jcr.tck.NamespaceRegistryReadMethodsTest.testroot=/testdata
-
-# Test class: NamespaceRemappingTest
-javax.jcr.tck.NamespaceRemappingTest.testroot=/testdata
-
-# Test class: SessionTest
-# Test method: testMoveItemExistsException
-# nodetype that does not allow same name siblings
-javax.jcr.tck.SessionTest.testMoveItemExistsException.nodetype2=nt:folder
-# valid node type that can be added as child of nodetype2
-javax.jcr.tck.SessionTest.testMoveItemExistsException.nodetype3=nt:hierarchyNode
-
-# Test class: SessionTest
-# Test method: testSaveContstraintViolationException
-# nodetype that has a property that is mandatory but not autocreated
-javax.jcr.tck.SessionTest.testSaveContstraintViolationException.nodetype2=nt:file
-
-# Test class: SessionUUIDTest
-# node type that has a property of type PropertyType.REFERENCE
-javax.jcr.tck.SessionUUIDTest.nodetype=nt:unstructured
-# name of the property that is of type PropertyType.REFERENCE
-javax.jcr.tck.SessionUUIDTest.propertyname1=foobar
-# nodetype that has nodetype mix:referenceable assigned
-javax.jcr.tck.SessionUUIDTest.nodetype2=test:refTargetNode
-
-# Test class: SessionUUIDTest
-# Test method: testSaveMovedRefNode
-# name of the property that can be modified
-javax.jcr.tck.SessionUUIDTest.testSaveMovedRefNode.propertyname1=foobar
-
-# Test class: NodeTest
-# Test method: testAddNodeItemExistsException
-# nodetype that does not allow same name siblings and allows child nodes of
-# the same type
-javax.jcr.tck.NodeTest.testAddNodeItemExistsException.nodetype=nt:folder
-
-# Test class: NodeTest
-# Test method: testRemoveMandatoryNode
-# nodetype that has a mandatory child node definition
-javax.jcr.tck.NodeTest.testRemoveMandatoryNode.nodetype2=nt:file
-# nodetype of the  mandatory child
-javax.jcr.tck.NodeTest.testRemoveMandatoryNode.nodetype3=nt:base
-# name of the mandatory node
-javax.jcr.tck.NodeTest.testRemoveMandatoryNode.nodename3=jcr:content
-
-# Test class: NodeTest
-# Test method: testSaveContstraintViolationException
-# nodetype that has a property that is mandatory but not autocreated
-javax.jcr.tck.NodeTest.testSaveContstraintViolationException.nodetype2=nt:file
-
-# Test class: NodeUUIDTest
-# node type that has a property of type PropertyType.REFERENCE
-javax.jcr.tck.NodeUUIDTest.nodetype=nt:unstructured
-# name of the property that is of type PropertyType.REFERENCE
-javax.jcr.tck.NodeUUIDTest.propertyname1=ref
-# nodetype that has nodetype mix:referenceable assigned
-javax.jcr.tck.NodeUUIDTest.nodetype2=test:refTargetNode
-
-# Test class: NodeUUIDTest
-# Test method: testSaveMovedRefNode
-# name of the property that can be modified
-javax.jcr.tck.NodeUUIDTest.testSaveMovedRefNode.propertyname1=foobar
-# nodetype that has nodetype mix:referenceable assigned
-
-# Test class: NodeOrderableChildNodesTest
-# nodetype that supports orderable child nodes
-javax.jcr.tck.NodeOrderableChildNodesTest.nodetype2=nt:unstructured
-# valid node type that can be added as child of nodetype 2
-javax.jcr.tck.NodeOrderableChildNodesTest.nodetype3=nt:unstructured
-
-# Test class: NodeOrderableChildNodesTest
-# Test method: testOrderBeforeUnsupportedRepositoryOperationException
-# nodetype that does not allow ordering of child nodes
-javax.jcr.tck.NodeOrderableChildNodesTest.testOrderBeforeUnsupportedRepositoryOperationException.nodetype2=nt:folder
-# valid node type that can be added as child of nodetype 2
-javax.jcr.tck.NodeOrderableChildNodesTest.testOrderBeforeUnsupportedRepositoryOperationException.nodetype3=nt:hierarchyNode
-
-# Test class: SetPropertyNodeTest
-# nodetype which is referenceable
-javax.jcr.tck.SetPropertyNodeTest.nodetype=test:setProperty
-
-# Test class: SetPropertyValueTest
-# property that allows multiple values
-javax.jcr.tck.SetPropertyValueTest.propertyname2=test:multiProperty
-javax.jcr.tck.SetPropertyValueTest.nodetype=test:setProperty
-
-# Test class: SetPropertyStringTest
-# property that allows multiple values
-javax.jcr.tck.SetPropertyStringTest.propertyname2=test:multiProperty
-javax.jcr.tck.SetPropertyStringTest.nodetype=test:setProperty
-
-# Test class: WorkspaceCloneSameNameSibsTest
-javax.jcr.tck.WorkspaceCloneSameNameSibsTest.sameNameSibsFalseNodeType=test:sameNameSibsFalseChildNodeDefinition
-javax.jcr.tck.WorkspaceCloneSameNameSibsTest.sameNameSibsTrueNodeType=nt:unstructured
-
-# Test class: WorkspaceCopyBetweenWorkspacesSameNameSibsTest
-javax.jcr.tck.WorkspaceCopyBetweenWorkspacesSameNameSibsTest.sameNameSibsFalseNodeType=test:sameNameSibsFalseChildNodeDefinition
-javax.jcr.tck.WorkspaceCopyBetweenWorkspacesSameNameSibsTest.sameNameSibsTrueNodeType=nt:unstructured
-
-# Test class: WorkspaceCopySameNameSibsTest
-javax.jcr.tck.WorkspaceCopySameNameSibsTest.sameNameSibsFalseNodeType=test:sameNameSibsFalseChildNodeDefinition
-javax.jcr.tck.WorkspaceCopySameNameSibsTest.sameNameSibsTrueNodeType=nt:unstructured
-
-# Test class: WorkspaceMoveSameNameSibsTest
-javax.jcr.tck.WorkspaceMoveSameNameSibsTest.sameNameSibsFalseNodeType=test:sameNameSibsFalseChildNodeDefinition
-javax.jcr.tck.WorkspaceMoveSameNameSibsTest.sameNameSibsTrueNodeType=nt:unstructured
-
-# Test class: RepositoryLoginTest
-javax.jcr.tck.RepositoryLoginTest.testroot=/testdata
-
-# Test class: RootNodeTest
-javax.jcr.tck.RootNodeTest.testroot=/testdata
-
-# Test class: ReferenceableRootNodesTest
-javax.jcr.tck.ReferenceableRootNodesTest.testroot=/testdata
-
-# Test class: ExportDocViewTest
-javax.jcr.tck.ExportDocViewTest.testroot=/testdata
-
-# ------------------------------------------------------------------------------
-# observation configuration
-# ------------------------------------------------------------------------------
-
-# Test class: AddEventListenerTest
-# Test method: testNodeType
-javax.jcr.tck.AddEventListenerTest.testNodeType.nodetype2=nt:folder
-
-# Configuration settings for the serialization.
-# Note that the serialization test tries to use as many features of the repository
-# as possible, but fails silently if a feature is not available. You have to
-# specify all of the following configuration entries, even if your repository does
-# not support the feature that is associated with them.
-
-# Root node for the example tree
-javax.jcr.tck.SerializationTest.testroot=/testdata/serialization
-
-# Node type to use for the example tree. Specify a node type that allows complex trees and all property types if possible
-javax.jcr.tck.SerializationTest.nodetype=nt:unstructured
-
-# Name of the nodes for source and target tree
-javax.jcr.tck.SerializationTest.sourceFolderName=source
-javax.jcr.tck.SerializationTest.targetFolderName=target
-javax.jcr.tck.SerializationTest.rootNodeName=test
-
-# List the properties whose values may change during serialization/deserialization. For example,
-# the UUID of a node is unique in the repository, so it will have to change when you re-import
-# a tree at a different location.
-javax.jcr.tck.SerializationTest.propertyValueMayChange= jcr:created jcr:uuid jcr:versionHistory jcr:baseVersion jcr:predecessors P_Reference
-
-# List all properties which are skipped during xml import according specification chapter 7.3.3
-javax.jcr.tck.SerializationTest.propertySkipped=
-
-# The name of the test node types. For easier diagnostics, the node types have names
-# that tell you the kind of information they store
-javax.jcr.tck.SerializationTest.nodeTypesTestNode=NodeTypes
-javax.jcr.tck.SerializationTest.mixinTypeTestNode=MixinTypes
-javax.jcr.tck.SerializationTest.propertyTypesTestNode=PropertyTypes
-javax.jcr.tck.SerializationTest.sameNameChildrenTestNode=SameNameChildren
-javax.jcr.tck.SerializationTest.multiValuePropertiesTestNode=MultiValueProperties
-javax.jcr.tck.SerializationTest.referenceableNodeTestNode=ReferenceableNode
-javax.jcr.tck.SerializationTest.orderChildrenTestNode=OrderChildren
-javax.jcr.tck.SerializationTest.namespaceTestNode=Namespace
-
-# The name of the test property types.
-javax.jcr.tck.SerializationTest.stringTestProperty=P_String
-javax.jcr.tck.SerializationTest.binaryTestProperty=P_Binary
-javax.jcr.tck.SerializationTest.dateTestProperty=P_Date
-javax.jcr.tck.SerializationTest.longTestProperty=P_Long
-javax.jcr.tck.SerializationTest.doubleTestProperty=P_Double
-javax.jcr.tck.SerializationTest.booleanTestProperty=P_Boolean
-javax.jcr.tck.SerializationTest.nameTestProperty=P_Name
-javax.jcr.tck.SerializationTest.pathTestProperty=P_Path
-javax.jcr.tck.SerializationTest.referenceTestProperty=P_Reference
-javax.jcr.tck.SerializationTest.multiValueTestProperty=P_MultiValue
-
-# node type not allowing same name sibs
-javax.jcr.tck.SerializationTest.sameNameSibsFalseChildNodeDefinition=test:sameNameSibsFalseChildNodeDefinition
-
-# Test method: testVersioningExceptionSessionFileChild
-# specified nodetype must be versionable and allow child nodes of the same type.
-javax.jcr.tck.SerializationTest.testVersioningExceptionSessionFileChild.nodetype=test:versionable
-
-# Test method: testVersioningExceptionSessionFileParent
-# specified nodetype must be versionable and allow child nodes of the same type.
-javax.jcr.tck.SerializationTest.testVersioningExceptionSessionFileParent.nodetype=test:versionable
-
-# Test method: testSessionImportXmlOverwriteException
-# requires a node type that does not allow same name siblings
-javax.jcr.tck.SerializationTest.testSessionImportXmlOverwriteException.nodetype=nt:folder
-
-# Test class: ExportSysViewTest
-javax.jcr.tck.ExportSysViewTest.testroot=/testdata
-
-# ==============================================================================
-# JAVAX.JCR.QUERY CONFIGURATION
-# ==============================================================================
-
-javax.jcr.tck.nodetype.testroot=/testdata
-
-# ==============================================================================
-# JAVAX.JCR.QUERY CONFIGURATION
-# ==============================================================================
-
-# Test class: SaveTest
-# Test method: testConstraintViolationException
-# Specified node type must not allow child nodes.
-javax.jcr.tck.SaveTest.testConstraintViolationException.nodetype=nt:query
-
-# Test class: XPathQueryLevel1Test
-javax.jcr.tck.XPathQueryLevel1Test.testroot=/testdata/query
-
-# Test class: XPathDocOrderTest
-javax.jcr.tck.XPathDocOrderTest.testroot=/testdata/query
-
-# Test class: XPathPosIndexTest
-javax.jcr.tck.XPathPosIndexTest.testroot=/testdata/query
-
-# Test class: XPathOrderByTest
-javax.jcr.tck.XPathOrderByTest.testroot=/testdata/query
-
-# Test class: XPathSyntaxTest
-javax.jcr.tck.XPathSyntaxTest.testroot=/testdata/query
-
-# Test class: XPathJcrPathTest
-javax.jcr.tck.XPathJcrPathTest.testroot=/testdata
-
-# Test class: SQLQueryLevel1Test
-javax.jcr.tck.SQLQueryLevel1Test.testroot=/testdata/query
-
-# Test class: SQLSyntaxTest
-javax.jcr.tck.SQLSyntaxTest.testroot=/testdata/query
-
-# Test class: SQLOrderByTest
-javax.jcr.tck.SQLOrderByTest.testroot=/testdata/query
-
-# Test class: DerefQueryLevel1Test
-javax.jcr.tck.DerefQueryLevel1Test.testroot=/testdata
-
-# Test class: GetLanguageTest
-javax.jcr.tck.GetLanguageTest.testroot=/testdata
-
-# Test class: GetPersistentQueryPathLevel1Test
-javax.jcr.tck.GetPersistentQueryPathLevel1Test.testroot=/testdata
-
-# Test class: GetPropertyNamesTest
-javax.jcr.tck.GetPropertyNamesTest.testroot=/testdata
-
-# Test class: GetStatementTest
-javax.jcr.tck.GetStatementTest.testroot=/testdata
-
-# Test class: GetSupportedQueryLanguagesTest
-javax.jcr.tck.GetSupportedQueryLanguagesTest.testroot=/testdata
-
-# Test class: SQLJcrPathTest
-javax.jcr.tck.SQLJcrPathTest.testroot=/testdata
-
-# Test class: SQLPathTest
-javax.jcr.tck.SQLPathTest.testroot=/testdata
-
-# Test class: PredicatesTest
-javax.jcr.tck.PredicatesTest.testroot=/testdata
-
-# Test class: SimpleSelectionTest
-javax.jcr.tck.SimpleSelectionTest.testroot=/testdata
-
-# ==============================================================================
-# JAVAX.JCR.VERSIONING CONFIGURATION
-# ==============================================================================
-
-# nodetye that is versionable. if it is not, an attempt is made to create versionable nodes
-# by adding a mix:versionable mixin-type.
-# NOTE: javax.jcr.tck.nodetype must define a non-versionable nodetype!
-javax.jcr.tck.version.versionableNodeType=test:versionable
-javax.jcr.tck.version.propertyValue=aPropertyValue
-
-# testroot for the version package
-# the test root must allow versionable and non-versionable nodes being created below
-javax.jcr.tck.version.testroot=/testroot
-
-# 3 nodes (nodeName1, nodeName2, nodeName3 with nt=versionableNodeType / nt=nonVersionableNodeType will be cloned to 2nd workspace
-# nodename1 > used to persistently create versionable node below testroot
-# nodename2 > used to create second versionable node below testroot (used for restore/workspace.restore with uuid-conflict)
-# nodename3 > used to persistently create non-versionable node below testroot
-javax.jcr.tck.version.nodename1=versionableNodeName1
-javax.jcr.tck.version.nodename2=versionableNodeName2
-javax.jcr.tck.version.nodename3=nonVersionableNodeName1
-
-# nodename 4: versionabel child-node of the first versionable node with nodeName1 and nodetype 'versionableNodeType'
-# used for:
-# + creation of a node in the 2nd workspace, that does not exist in the first workspace
-# + creation of a node in the 2nd workspace, in order to test uuid-conflicts with Workspace.restore.
-# + creation of a sub-node in the default workspace, in order to test uuid-conflicts with Node.restore.
-# + NOTE: the nodetype with 'versionableNodeType' must define its children nodes to either have COPY or VERSION
-#         OPV behaviour in order to successfully test Node.restore and Workspace.restore with uuid conflict.
-javax.jcr.tck.version.nodename4=childNodeName
-
-# path to existing String-properties and a new value for the property, that allows to test the indicated OPV behaviour
-javax.jcr.tck.OnParentVersionAbortTest.propertyname1=test:abortOnParentVersionProp
-javax.jcr.tck.OnParentVersionComputeTest.propertyname1=test:computeOnParentVersionProp
-javax.jcr.tck.OnParentVersionCopyTest.propertyname1=test:copyOnParentVersionProp
-javax.jcr.tck.OnParentVersionIgnoreTest.propertyname1=test:ignoreOnParentVersionProp
-javax.jcr.tck.OnParentVersionInitializeTest.propertyname1=test:initializeOnParentVersionProp
-
-# Test class: RestoreTest
-# Test method: testRestoreWithUUIDConflict
-# nodename4 must be the name of a child node with a OPV definition COPY or VERSION
-javax.jcr.tck.RestoreTest.testRestoreWithUUIDConflict.nodename4=test:versionOnParentVersion
-
-# config for nodes that show the indicated OPV behaviour:
-# nodes are added in order to test the versioning behaviour indicated by the test-class name.
-# NOTE:
-# - nodename4 is uses as name for the childnode
-# - nodetype is used as nodetype name for the childnode
-# - the specified child node is created below nodename1 with versionableNodeType
-#   the versionableNodeType and/or nodename1 may be overwritten with the individual
-#   testclass below.
-javax.jcr.tck.OnParentVersionCopyTest.nodename4=test:copyOnParentVersion
-javax.jcr.tck.OnParentVersionCopyTest.nodetype=nt:unstructured
-javax.jcr.tck.OnParentVersionAbortTest.nodename4=test:abortOnParentVersion
-javax.jcr.tck.OnParentVersionAbortTest.nodetype=nt:unstructured
diff --git a/contrib/bdb-persistence/applications/test/workspaces/default/workspace.xml b/contrib/bdb-persistence/applications/test/workspaces/default/workspace.xml
deleted file mode 100644
index 49d87de..0000000
--- a/contrib/bdb-persistence/applications/test/workspaces/default/workspace.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0"?>
-<Workspace name="default">
-  <!--
-      virtual file system of the workspace:
-      class: FQN of class implementing FileSystem interface
-  -->
-  <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
-    <param name="path" value="${wsp.home}/data" />
-  </FileSystem>
-  <!--
-      persistence of the workspace:
-      class: FQN of class implementing PersistenceManager interface
-  -->
-  <PersistenceManager class="org.apache.jackrabbit.core.state.bdb.BerkeleyDBPersistenceManager"/>
-  <!--
-      Search index and the file system it uses.
-  -->
-  <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
-    <param name="path" value="${wsp.home}/index" />
-  </SearchIndex>
-</Workspace>
-
diff --git a/contrib/bdb-persistence/applications/test/workspaces/test/workspace.xml b/contrib/bdb-persistence/applications/test/workspaces/test/workspace.xml
deleted file mode 100644
index a9c80af..0000000
--- a/contrib/bdb-persistence/applications/test/workspaces/test/workspace.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0"?>
-<Workspace name="test">
-  <!--
-      virtual file system of the workspace:
-      class: FQN of class implementing FileSystem interface
-  -->
-  <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
-    <param name="path" value="${wsp.home}/data" />
-  </FileSystem>
-  <!--
-      persistence of the workspace:
-      class: FQN of class implementing PersistenceManager interface
-  -->
-  <PersistenceManager class="org.apache.jackrabbit.core.state.bdb.BerkeleyDBPersistenceManager"/>
-  <!--
-      Search index and the file system it uses.
-  -->
-  <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
-    <param name="path" value="${wsp.home}/index" />
-  </SearchIndex>
-</Workspace>
-
diff --git a/contrib/bdb-persistence/checkstyle.xml b/contrib/bdb-persistence/checkstyle.xml
deleted file mode 100644
index 47fc8ec..0000000
--- a/contrib/bdb-persistence/checkstyle.xml
+++ /dev/null
@@ -1,171 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                       as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-  -->
-  
-<!DOCTYPE module PUBLIC
-    "-//Puppy Crawl//DTD Check Configuration 1.1//EN"
-    "http://www.puppycrawl.com/dtds/configuration_1_1.dtd">
-
-<!--
-  Checkstyle checks configured for Maven.
--->
-
-<module name="Checker">
-
-    <!-- Checks that a package.html file exists for each package.     -->
-    <!-- See http://checkstyle.sf.net/config_javadoc.html#PackageHtml -->
-    <module name="PackageHtml"/>
-
-    <!-- Checks whether files end with a new line.                        -->
-    <!-- See http://checkstyle.sf.net/config_misc.html#NewlineAtEndOfFile -->
-    <module name="NewlineAtEndOfFile"/>
-
-    <!-- Checks that property files contain the same keys.         -->
-    <!-- See http://checkstyle.sf.net/config_misc.html#Translation -->
-    <module name="Translation"/>
-
-    <module name="TreeWalker">
-
-        <property name="cacheFile" value="${checkstyle.cache.file}"/>
-
-        <!-- ************************************************************** -->
-        <!-- Checks that are different from the sun coding conventions ones -->
-        <!-- ************************************************************** -->
-
-        <module name="Header">
-            <property name="headerFile" value="${basedir}/HEADER.txt"/>
-        </module>
-        <!-- <property name="tabWidth" value="4"/> -->
-        <module name="LeftCurly">
-          <property name="option" value="eol"/>
-        </module>
-        <module name="LineLength">
-          <property name="max" value="132"/>
-          <property name="ignorePattern" value="\* \$"/>
-        </module>
-        <module name="MethodLength">
-          <property name="max" value="175"/>
-        </module>
-        <module name="ConstantName">
-          <property name="format" value="log|^[a-zA-Z][a-zA-Z0-9_]*$"/>
-        </module>
-
-        <!-- ************************************************************** -->
-        <!-- Default Sun coding conventions checks                          -->
-        <!-- ************************************************************** -->
-
-        <!-- Checks for Javadoc comments.                     -->
-        <!-- See http://checkstyle.sf.net/config_javadoc.html -->
-        <module name="JavadocMethod"/>
-        <module name="JavadocType"/>
-        <module name="JavadocVariable"/>
-
-        <!-- Checks for Naming Conventions.                  -->
-        <!-- See http://checkstyle.sf.net/config_naming.html -->
-        <module name="LocalFinalVariableName"/>
-        <module name="LocalVariableName"/>
-        <module name="MethodName"/>
-        <module name="PackageName"/>
-        <module name="ParameterName"/>
-        <module name="StaticVariableName"/>
-        <module name="TypeName"/>
-        <module name="MemberName"/>
-
-        <!-- Checks for imports                              -->
-        <!-- See http://checkstyle.sf.net/config_import.html -->
-        <module name="AvoidStarImport"/>
-        <module name="IllegalImport"/> <!-- defaults to sun.* packages -->
-        <module name="RedundantImport"/>
-        <module name="UnusedImports"/>
-
-
-        <!-- Checks for Size Violations.                    -->
-        <!-- See http://checkstyle.sf.net/config_sizes.html -->
-        <module name="FileLength"/>
-        <module name="ParameterNumber"/>
-
-
-        <!-- Checks for whitespace                               -->
-        <!-- See http://checkstyle.sf.net/config_whitespace.html -->
-        <module name="EmptyForIteratorPad"/>
-        <module name="NoWhitespaceAfter"/>
-        <module name="NoWhitespaceBefore"/>
-        <module name="OperatorWrap"/>
-        <module name="TabCharacter"/>
-        <module name="WhitespaceAfter"/>
-        <module name="WhitespaceAround"/>
-
-
-        <!-- Modifier Checks                                    -->
-        <!-- See http://checkstyle.sf.net/config_modifiers.html -->
-        <module name="ModifierOrder"/>
-        <module name="RedundantModifier"/>
-
-
-        <!-- Checks for blocks. You know, those {}'s         -->
-        <!-- See http://checkstyle.sf.net/config_blocks.html -->
-        <module name="AvoidNestedBlocks"/>     
-        <module name="NeedBraces"/>
-
-        <!-- Checks for common coding problems               -->
-        <!-- See http://checkstyle.sf.net/config_coding.html -->
-        <!-- <module name="AvoidInlineConditionals"/> -->      <!-- DISABLED-->
-        <module name="DoubleCheckedLocking"/>
-        <module name="EqualsHashCode"/>
-        <module name="IllegalInstantiation"/>
-        <module name="InnerAssignment"/>
-        <module name="MissingSwitchDefault"/>
-        <module name="RedundantThrows">
-            <property name="allowUnchecked" value="true"/>   <!-- DISABLED -->
-            <property name="allowSubclasses" value="true"/>   <!-- DISABLED -->
-        </module>
-        <module name="SimplifyBooleanExpression"/>
-        <module name="SimplifyBooleanReturn"/>
-
-        <!-- Checks for class design                         -->
-        <!-- See http://checkstyle.sf.net/config_design.html -->
-        <module name="DesignForExtension">
-            <property name="severity" value="ignore"/>   <!-- DISABLED -->
-        </module>
-        <module name="HideUtilityClassConstructor"/>
-        <module name="InterfaceIsType"/>
-        <module name="VisibilityModifier">
-            <!-- Protected member variables are widely used in Jackrabbit -->
-            <property name="protectedAllowed" value="true"/>
-        </module>
-
-
-        <!-- Miscellaneous other checks.                   -->
-        <!-- See http://checkstyle.sf.net/config_misc.html -->
-        <module name="ArrayTypeStyle"/>
-        <module name="FinalParameters">
-            <property name="severity" value="ignore"/>   <!-- DISABLED -->
-        </module>
-        <module name="GenericIllegalRegexp">
-            <property name="format" value="\s+$"/>
-            <property name="message" value="Line has trailing spaces."/>
-        </module>
-        <module name="TodoComment"/>
-        <module name="UpperEll"/>
-
-    </module>
-    
-    <module name="SuppressionFilter">
-        <property name="file" value="checkstyle-suppressions.xml"/>
-    </module>    
-
-</module>
diff --git a/contrib/bdb-persistence/maven.xml b/contrib/bdb-persistence/maven.xml
deleted file mode 100644
index 3aa5ad7..0000000
--- a/contrib/bdb-persistence/maven.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<!--
-   Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                       as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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
-    default="jar:jar"
-    xmlns:deploy="deploy"
-    xmlns:j="jelly:core"
-    xmlns:ant="jelly:ant">
-
-    <!-- Additionally cleans the test data created -->
-    <postGoal name="clean">
-        <attainGoal name="test:clean"/>
-    </postGoal>
-
-    <!-- deletes the test data -->
-    <goal name="test:clean">
-        <ant:delete includeEmptyDirs="true">
-            <ant:fileset dir="applications/test/repository">
-                <ant:include name="**/*"/>
-                <ant:exclude name="**/custom_nodetypes.xml"/>
-            </ant:fileset>
-        </ant:delete>
-        <ant:delete includeEmptyDirs="true">
-            <ant:fileset dir="applications/test/workspaces">
-                <ant:include name="**/*"/>
-                <ant:exclude name="**/workspace.xml"/>
-            </ant:fileset>
-        </ant:delete>
-        <ant:delete dir="applications/test/tx"/>
-        <ant:delete dir="applications/test/version"/>
-        <ant:delete file="applications/test/.lock"/>
-    </goal>
-    
-    <!--
-        Creates a jar file with the JackrabbitRepositoryStub class which is
-        needed for running test cases
-    -->
-    <goal name="jackrabbit:test-stub">
-        <attainGoal name="test:compile"/>
-        <ant:jar destfile="./target/jackrabbit-test-stub-${pom.currentVersion}.jar"
-            basedir="target/test-classes"
-            includes="org/apache/jackrabbit/core/JackrabbitRepositoryStub.class"/>
-    </goal>
-
-    <!--
-        Run Jackrabbit init tests first.
-    -->
-    <preGoal name="test:test">
-        <j:if test="${context.getVariable('maven.test.skip') != 'true'}">
-            <attainGoal name="jackrabbit:test-init"/>
-        </j:if>
-    </preGoal>
-
-    <!--
-        Runs the init test cases to fill the repository with data for
-        read-only tests.
-    -->
-    <goal name="jackrabbit:test-init">
-        <j:set var="testcase" value="org.apache.jackrabbit.init.TestAll"/>
-        <attainGoal name="test:single"/>
-    </goal>
-
-</project>
diff --git a/contrib/bdb-persistence/project.properties b/contrib/bdb-persistence/project.properties
deleted file mode 100644
index 560e91d..0000000
--- a/contrib/bdb-persistence/project.properties
+++ /dev/null
@@ -1,94 +0,0 @@
-#  Copyright 2003-2005 The Apache Software Foundation or its licensors,
-#                      as applicable
-#
-#  Licensed under the Apache License, Version 2.0 (the "License");
-#  you may not use this file except in compliance with the License.
-#  You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-#  distributed under the License is distributed on an "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#  See the License for the specific language governing permissions and
-#  limitations under the License.
-
-######################################################################
-# Apache Central Repository
-######################################################################
-maven.repo.central=www.apache.org
-maven.repo.central.directory=/www/www.apache.org/dist/java-repository
-maven.remote.group=apcvs
-maven.changelog.factory = org.apache.maven.svnlib.SvnChangeLogFactory
-
-######################################################################
-# JUnit Testing
-######################################################################
-maven.test.failure = false
-maven.junit.fork=true
-#maven.test.search.classdir=true
-maven.junit.jvmargs=-Xmx128m
-#maven.junit.sysproperties=org.xml.sax.driver java.security.auth.login.config
-maven.junit.sysproperties=org.xml.sax.driver
-org.xml.sax.driver=org.apache.xerces.parsers.SAXParser
-#java.security.auth.login.config=applications/test/jaas.config
-
-
-#If you wish to skip tests when doing builds, uncomment
-#maven.test.skip = true
-
-######################################################################
-# Checkstyle
-######################################################################
-maven.checkstyle.properties= checkstyle.xml
-maven.linkcheck.enable=false 
-
-######################################################################
-# JavaDoc
-#
-# javadoc urls can be added here, multiple urls are appended using a comma
-#
-# maven.javadoc.links = http://foo/bar/api,\
-#                       http://flim/flam/api/
-######################################################################
-maven.javadoc.links=http://java.sun.com/j2se/1.4.2/docs/api/,\
-                    http://incubator.apache.org/jackrabbit/apidocs/,\
-                    http://www.day.com/maven/jsr170/javadocs/jcr-1.0/
-maven.javadoc.author=false
-maven.javadoc.version=false
-
-######################################################################
-# Other opts
-######################################################################
-# uncomment the next line to work in offline mode (no jar download & no linkcheck)
-#maven.mode.online=
-
-maven.compile.debug=on
-maven.compile.deprecation=off
-maven.compile.optimize=off
-
-maven.compile.source=1.4
-maven.compile.target=1.4
-
-maven.jarResources.basedir=src/java
-maven.jar.excludes=**/package.html
-
-# specifying additional remote repository for downloading dependencies 
-# not available at www.ibiblio.org/maven/
-maven.repo.remote = http://www.ibiblio.org/maven/,http://www.day.com/maven/
-
-######################################################################
-# Site L&F
-######################################################################
-# maven.xdoc.jsl=
-maven.xdoc.date=
-maven.xdoc.poweredby.image=maven-feather.png
-maven.xdoc.version=${pom.currentVersion}
-maven.xdoc.developmentProcessUrl=http://incubator.apache.org/projects/jackrabbit.html
-maven.changelog.range=60
-maven.changelog.factory=org.apache.maven.svnlib.SvnChangeLogFactory
-
-######################################################################
-# Site Deploy (into ../jackrabbit-site for checkout on incubator.apache.org)
-######################################################################
-maven.site.deploy.method=fs
diff --git a/contrib/bdb-persistence/project.xml b/contrib/bdb-persistence/project.xml
deleted file mode 100644
index 108232f..0000000
--- a/contrib/bdb-persistence/project.xml
+++ /dev/null
@@ -1,187 +0,0 @@
-<?xml version="1.0"?>

-<!--

-	Copyright 2004-2005 The Apache Software Foundation or its licensors,

-	as applicable.

-	

-	Licensed under the Apache License, Version 2.0 (the "License");

-	you may not use this file except in compliance with the License.

-	You may obtain a copy of the License at

-	

-	http://www.apache.org/licenses/LICENSE-2.0

-	

-	Unless required by applicable law or agreed to in writing, software

-	distributed under the License is distributed on an "AS IS" BASIS,

-	WITHOUT 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>

-	<artifactId>jackrabbit-bdb</artifactId>

-	<groupId>org.apache.jackrabbit</groupId>

-	<name>Jackrabbit BerkeleyDB Persistence Manager</name>

-	<currentVersion>1.0-SNAPSHOT</currentVersion>

-	<organization>

-		<name>The Apache Software Foundation</name>

-		<url>http://incubator.apache.org/projects/jackrabbit.html</url>

-		<logo>

-			http://incubator.apache.org/images/apache-incubator-logo.png

-		</logo>

-	</organization>

-	<inceptionYear>2005</inceptionYear>

-	<package>org.apache.jackrabbit.*</package>

-	<logo>/images/jackrabbitlogo.gif</logo>

-	<description>

-		A BerkeleyDB persistence manager for jackrabbit. It uses the

-		BerkeleyDB Java Edition

-		(http://www.sleepycat.com/products/je.shtml)

-	</description>

-	<shortDescription>

-		A BerkeleyDB persistence manager for jackrabbit

-	</shortDescription>

-

-	<repository>

-		<connection>scm:svn:http://svn.apache.org/repos/asf/incubator/jackrabbit/trunk/contrib/bdb-persistence</connection>

-		<developerConnection>scm:svn:https://svn.apache.org/repos/asf/incubator/jackrabbit/trunk/contrib/bdb-persistence</developerConnection>

-		<url>http://svn.apache.org/viewcvs</url>

-	</repository>

-	<developers>

-		<developer>

-			<name>Guillaume Bort</name>

-			<email>guillaume.bort@zenexity.fr</email>

-			<organization>zenexity.fr</organization>

-			<timezone>+1</timezone>

-		</developer>

-	</developers>

-

-	<dependencies>

-		<!--

-			compile-time dependencies of the BerkeleyDB persistence manager

-		-->

-		<dependency>

-			<groupId>berkeleydb</groupId>

-			<artifactId>je</artifactId>

-			<version>1.7.1</version>

-			<type>jar</type>

-		</dependency>

-		<dependency>

-			<groupId>commons-logging</groupId>

-			<artifactId>commons-logging</artifactId>

-			<version>1.0</version>

-			<type>jar</type>

-		</dependency>

-		<dependency>

-			<groupId>jsr170</groupId>

-			<artifactId>jcr</artifactId>

-			<version>1.0</version>

-			<type>jar</type>

-			<url>http://www.day.com/maven/jsr170/jars/jcr-1.0.jar</url>

-		</dependency>

-		<dependency>

-			<groupId>org.apache.jackrabbit</groupId>

-			<artifactId>jackrabbit</artifactId>

-			<version>${pom.currentVersion}</version>

-			<type>jar</type>

-		</dependency>

-

-		<!--

-			compile-time dependencies of the jUnit test-cases 

-			in the core project	

-		-->

-		<dependency>

-			<groupId>concurrent</groupId>

-			<artifactId>concurrent</artifactId>

-			<version>1.3.4</version>

-		</dependency>

-		<dependency>

-			<groupId>geronimo-spec</groupId>

-			<artifactId>geronimo-spec-jta</artifactId>

-			<version>1.0-M1</version>

-		</dependency>

-		<dependency>

-			<groupId>log4j</groupId>

-			<artifactId>log4j</artifactId>

-			<version>1.2.8</version>

-		</dependency>

-

-		<!--

-			runtime dependencies of jackrabbit/jUnit test-cases 

-		-->

-	    <dependency>

-            <groupId>commons-collections</groupId>

-            <artifactId>commons-collections</artifactId>

-			<version>3.1</version>

-	    </dependency>

-		<dependency>

-            <groupId>log4j</groupId>

-            <artifactId>log4j</artifactId>

-			<version>1.2.8</version>

-		</dependency>

-		<dependency>

-			<groupId>lucene</groupId>

-			<artifactId>lucene</artifactId>

-			<version>1.4.3</version>

-		</dependency>

-	        <dependency>

-			<groupId>xerces</groupId>

-			<artifactId>xercesImpl</artifactId>

-			<version>2.6.2</version>

-	        </dependency>

-		<dependency>

-			<groupId>xerces</groupId>

-			<artifactId>xmlParserAPIs</artifactId>

-			<version>2.0.2</version>

-		</dependency>

-	</dependencies>

-

-	<build>

-		<sourceDirectory>src/java</sourceDirectory>

-		<unitTestSourceDirectory>../../src/test</unitTestSourceDirectory>

-		<unitTest>

-			<includes>

-				<include>**/*TestAll.java</include>

-			</includes>

-			<excludes>

-				<exclude>**/init/*</exclude>

-			</excludes>

-			<resources>

-				<resource>

-					<directory>applications/test</directory>

-					<includes>

-						<include>*.properties</include>

-						<include>*.xml</include>

-					</includes>

-				</resource>

-				<resource>

-					<directory>../../src/test</directory>

-					<includes>

-						<include>**/*.xml</include>

-						<include>**/*.txt</include>

-					</includes>

-				</resource>

-			</resources>

-		</unitTest>

-		<resources>

-			<resource>

-				<directory>src/java</directory>

-				<includes>

-					<include>**/*.xml</include>

-					<include>**/*.properties</include>

-					<include>**/*.TextFilterService</include>

-				</includes>

-			</resource>

-		</resources>

-	</build>

-

-	<reports>

-		<report>maven-changelog-plugin</report>

-		<report>maven-changes-plugin</report>

-		<report>maven-checkstyle-plugin</report>

-		<report>maven-javadoc-plugin</report>

-		<report>maven-junit-report-plugin</report>

-		<report>maven-jxr-plugin</report>

-		<report>maven-license-plugin</report>

-		<report>maven-tasklist-plugin</report>

-	</reports>

-

-</project>

diff --git a/contrib/bdb-persistence/src/java/org/apache/jackrabbit/core/state/bdb/BerkeleyDBPersistenceManager.java b/contrib/bdb-persistence/src/java/org/apache/jackrabbit/core/state/bdb/BerkeleyDBPersistenceManager.java
deleted file mode 100644
index 8cd2069..0000000
--- a/contrib/bdb-persistence/src/java/org/apache/jackrabbit/core/state/bdb/BerkeleyDBPersistenceManager.java
+++ /dev/null
@@ -1,344 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.state.bdb;
-
-import com.sleepycat.je.Database;
-import com.sleepycat.je.DatabaseConfig;
-import com.sleepycat.je.DatabaseEntry;
-import com.sleepycat.je.Environment;
-import com.sleepycat.je.EnvironmentConfig;
-import com.sleepycat.je.LockMode;
-import com.sleepycat.je.OperationStatus;
-import com.sleepycat.je.Transaction;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.core.NodeId;
-import org.apache.jackrabbit.core.PropertyId;
-import org.apache.jackrabbit.core.fs.FileSystem;
-import org.apache.jackrabbit.core.fs.local.LocalFileSystem;
-import org.apache.jackrabbit.core.state.AbstractPersistenceManager;
-import org.apache.jackrabbit.core.state.ChangeLog;
-import org.apache.jackrabbit.core.state.ItemStateException;
-import org.apache.jackrabbit.core.state.NoSuchItemStateException;
-import org.apache.jackrabbit.core.state.NodeReferences;
-import org.apache.jackrabbit.core.state.NodeReferencesId;
-import org.apache.jackrabbit.core.state.NodeState;
-import org.apache.jackrabbit.core.state.PMContext;
-import org.apache.jackrabbit.core.state.PropertyState;
-import org.apache.jackrabbit.core.state.util.BLOBStore;
-import org.apache.jackrabbit.core.state.util.FileSystemBLOBStore;
-
-import java.io.File;
-
-public class BerkeleyDBPersistenceManager extends AbstractPersistenceManager {
-
-    private static Log log = LogFactory.getLog(BerkeleyDBPersistenceManager.class);
-
-    protected static final String ENCODING = "UTF-8";
-
-    private boolean initialized = false;
-    private Environment environment;
-    private Database database;
-    // file system where BLOB data is stored
-    private FileSystem blobFS;
-    // BLOBStore that manages BLOB data in the file system
-    private BLOBStore blobStore;
-
-    private ThreadLocal localTransaction = new ThreadLocal(); // ?? are persistence managers thread-safes ???
-
-    //
-
-    public void init(PMContext context) throws Exception {
-        if (initialized) {
-            throw new IllegalStateException("already initialized");
-        }
-
-        // prepare the db directory
-        File envDir = new File(context.getHomeDir(), "db");
-        if (!envDir.exists()) {
-            envDir.mkdirs();
-        }
-
-        log.debug("init berkeleyDb environment at " + envDir.getAbsolutePath());
-
-        // create environnement
-        EnvironmentConfig config = new EnvironmentConfig();
-        config.setAllowCreate(true);
-        config.setTransactional(true);
-        environment = new Environment(envDir, config);
-
-        // open database
-        DatabaseConfig dbConfig = new DatabaseConfig();
-        dbConfig.setAllowCreate(true);
-        dbConfig.setSortedDuplicates(false);
-        dbConfig.setTransactional(true);
-        database = environment.openDatabase(null, "jcrStore", dbConfig);
-
-        /**
-         * store BLOB data in local file system in a sub directory
-         * of the workspace home directory
-         */
-        LocalFileSystem blobFS = new LocalFileSystem();
-        blobFS.setRoot(new File(context.getHomeDir(), "blobs"));
-        blobFS.init();
-        this.blobFS = blobFS;
-        blobStore = new FileSystemBLOBStore(blobFS);
-
-        initialized = true;
-    }
-
-    public void close() throws Exception {
-        if (!initialized) {
-            throw new IllegalStateException("not initialized");
-        }
-
-        log.debug("close berkeleyDb environment");
-
-        // close database
-        database.close();
-
-        // close environnement
-        environment.close();
-
-        // close BLOB file system
-        blobFS.close();
-        blobFS = null;
-        blobStore = null;
-
-        initialized = false;
-    }
-
-    //
-
-    public NodeState load(NodeId id) throws NoSuchItemStateException, ItemStateException {
-        try {
-            DatabaseEntry key = new DatabaseEntry();
-            DatabaseEntry value = new DatabaseEntry();
-            NodeStateTupleBinding tupleBinding = new NodeStateTupleBinding(id);
-            key.setData(id.toString().getBytes(ENCODING));
-            OperationStatus operationStatus = database.get(null, key, value, LockMode.DEFAULT);
-            if (operationStatus.equals(OperationStatus.NOTFOUND)) {
-                throw new NoSuchItemStateException();
-            }
-            return (NodeState) tupleBinding.entryToObject(value);
-        } catch (NoSuchItemStateException e) {
-            throw e;
-        } catch (Exception e) {
-            log.error(e);
-            throw new ItemStateException(e);
-        }
-    }
-
-    public PropertyState load(PropertyId id) throws NoSuchItemStateException, ItemStateException {
-        try {
-            DatabaseEntry key = new DatabaseEntry();
-            DatabaseEntry value = new DatabaseEntry();
-            PropertyStateTupleBinding tupleBinding = new PropertyStateTupleBinding(id, blobStore);
-            key.setData(id.toString().getBytes(ENCODING));
-            OperationStatus operationStatus = database.get(null, key, value, LockMode.DEFAULT);
-            if (operationStatus.equals(OperationStatus.NOTFOUND)) {
-                throw new NoSuchItemStateException();
-            }
-            return (PropertyState) tupleBinding.entryToObject(value);
-        } catch (NoSuchItemStateException e) {
-            throw e;
-        } catch (Exception e) {
-            log.error(e);
-            throw new ItemStateException(e);
-        }
-    }
-
-    public NodeReferences load(NodeReferencesId id) throws NoSuchItemStateException, ItemStateException {
-        try {
-            DatabaseEntry key = new DatabaseEntry();
-            DatabaseEntry value = new DatabaseEntry();
-            NodeReferencesTupleBinding tupleBinding = new NodeReferencesTupleBinding(id);
-            key.setData((id.toString() + ".references").getBytes(ENCODING));
-            OperationStatus operationStatus = database.get(null, key, value, LockMode.DEFAULT);
-            if (operationStatus.equals(OperationStatus.NOTFOUND)) {
-                throw new NoSuchItemStateException();
-            }
-            return (NodeReferences) tupleBinding.entryToObject(value);
-        } catch (NoSuchItemStateException e) {
-            throw e;
-        } catch (Exception e) {
-            log.error(e);
-            throw new ItemStateException(e);
-        }
-    }
-
-    public boolean exists(NodeId id) throws ItemStateException {
-        try {
-            DatabaseEntry key = new DatabaseEntry();
-            DatabaseEntry value = new DatabaseEntry();
-            key.setData(id.toString().getBytes(ENCODING));
-            OperationStatus operationStatus = database.get(null, key, value, LockMode.DEFAULT);
-            return operationStatus.equals(OperationStatus.SUCCESS);
-        } catch (Exception e) {
-            log.error(e);
-            throw new ItemStateException(e);
-        }
-    }
-
-    public boolean exists(PropertyId id) throws ItemStateException {
-        try {
-            DatabaseEntry key = new DatabaseEntry();
-            DatabaseEntry value = new DatabaseEntry();
-            key.setData(id.toString().getBytes(ENCODING));
-            OperationStatus operationStatus = database.get(null, key, value, LockMode.DEFAULT);
-            return operationStatus.equals(OperationStatus.SUCCESS);
-        } catch (Exception e) {
-            log.error(e);
-            throw new ItemStateException(e);
-        }
-    }
-
-    public boolean exists(NodeReferencesId targetId) throws ItemStateException {
-        try {
-            DatabaseEntry key = new DatabaseEntry();
-            DatabaseEntry value = new DatabaseEntry();
-            key.setData((targetId.toString() + ".references").getBytes(ENCODING));
-            OperationStatus operationStatus = database.get(null, key, value, LockMode.DEFAULT);
-            return operationStatus.equals(OperationStatus.SUCCESS);
-        } catch (Exception e) {
-            log.error(e);
-            throw new ItemStateException(e);
-        }
-    }
-
-    //
-
-    public synchronized void store(ChangeLog changeLog) throws ItemStateException {
-        Transaction transaction = null;
-        try {
-            transaction = environment.beginTransaction(null, null);
-            localTransaction.set(transaction);
-            super.store(changeLog);
-            transaction.commit();
-        } catch (Exception e) {
-            try {
-                transaction.abort();
-            } catch (Exception fe) {
-                log.fatal(fe);
-            }
-            throw new ItemStateException(e);
-        } finally {
-            localTransaction.set(null);
-        }
-    }
-
-    //
-
-    protected void store(NodeState state) throws ItemStateException {
-        try {
-            Transaction transaction = (Transaction) localTransaction.get();
-            DatabaseEntry key = new DatabaseEntry();
-            DatabaseEntry value = new DatabaseEntry();
-            NodeStateTupleBinding tupleBinding = new NodeStateTupleBinding();
-            key.setData(state.getId().toString().getBytes(ENCODING));
-            tupleBinding.objectToEntry(state, value);
-            OperationStatus operationStatus = database.put(transaction, key, value);
-            if (!operationStatus.equals(OperationStatus.SUCCESS)) {
-                throw new ItemStateException(operationStatus.toString());
-            }
-        } catch (Exception e) {
-            log.error(e);
-            throw new ItemStateException(e);
-        }
-    }
-
-    protected void store(PropertyState state) throws ItemStateException {
-        try {
-            Transaction transaction = (Transaction) localTransaction.get();
-            DatabaseEntry key = new DatabaseEntry();
-            DatabaseEntry value = new DatabaseEntry();
-            PropertyStateTupleBinding tupleBinding = new PropertyStateTupleBinding(blobStore);
-            key.setData(state.getId().toString().getBytes(ENCODING));
-            tupleBinding.objectToEntry(state, value);
-            OperationStatus operationStatus = database.put(transaction, key, value);
-            if (!operationStatus.equals(OperationStatus.SUCCESS)) {
-                throw new ItemStateException(operationStatus.toString());
-            }
-        } catch (Exception e) {
-            log.error(e);
-            throw new ItemStateException(e);
-        }
-    }
-
-    protected void store(NodeReferences refs) throws ItemStateException {
-        try {
-            Transaction transaction = (Transaction) localTransaction.get();
-            DatabaseEntry key = new DatabaseEntry();
-            DatabaseEntry value = new DatabaseEntry();
-            NodeReferencesTupleBinding tupleBinding = new NodeReferencesTupleBinding();
-            key.setData((refs.getTargetId().toString() + ".references").getBytes(ENCODING));
-            tupleBinding.objectToEntry(refs, value);
-            OperationStatus operationStatus = database.put(transaction, key, value);
-            if (!operationStatus.equals(OperationStatus.SUCCESS)) {
-                throw new ItemStateException(operationStatus.toString());
-            }
-        } catch (Exception e) {
-            log.error(e);
-            throw new ItemStateException(e);
-        }
-    }
-
-    protected void destroy(NodeState state) throws ItemStateException {
-        try {
-            Transaction transaction = (Transaction) localTransaction.get();
-            DatabaseEntry key = new DatabaseEntry();
-            key.setData(state.getId().toString().getBytes(ENCODING));
-            OperationStatus operationStatus = database.delete(transaction, key);
-            if (!operationStatus.equals(OperationStatus.SUCCESS)) {
-                throw new ItemStateException(operationStatus.toString());
-            }
-        } catch (Exception e) {
-            log.error(e);
-            throw new ItemStateException(e);
-        }
-    }
-
-    protected void destroy(PropertyState state) throws ItemStateException {
-        try {
-            Transaction transaction = (Transaction) localTransaction.get();
-            DatabaseEntry key = new DatabaseEntry();
-            key.setData(state.getId().toString().getBytes(ENCODING));
-            OperationStatus operationStatus = database.delete(transaction, key);
-            if (!operationStatus.equals(OperationStatus.SUCCESS)) {
-                throw new ItemStateException(operationStatus.toString());
-            }
-        } catch (Exception e) {
-            log.error(e);
-            throw new ItemStateException(e);
-        }
-    }
-
-    protected void destroy(NodeReferences refs) throws ItemStateException {
-        try {
-            Transaction transaction = (Transaction) localTransaction.get();
-            DatabaseEntry key = new DatabaseEntry();
-            key.setData((refs.getTargetId().toString() + ".references").getBytes(ENCODING));
-            OperationStatus operationStatus = database.delete(transaction, key);
-            if (!operationStatus.equals(OperationStatus.SUCCESS)) {
-                throw new ItemStateException(operationStatus.toString());
-            }
-        } catch (Exception e) {
-            log.error(e);
-            throw new ItemStateException(e);
-        }
-    }
-}
diff --git a/contrib/bdb-persistence/src/java/org/apache/jackrabbit/core/state/bdb/NodeReferencesTupleBinding.java b/contrib/bdb-persistence/src/java/org/apache/jackrabbit/core/state/bdb/NodeReferencesTupleBinding.java
deleted file mode 100644
index 1cb01c5..0000000
--- a/contrib/bdb-persistence/src/java/org/apache/jackrabbit/core/state/bdb/NodeReferencesTupleBinding.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.state.bdb;
-
-import com.sleepycat.bind.tuple.TupleBinding;
-import com.sleepycat.bind.tuple.TupleInput;
-import com.sleepycat.bind.tuple.TupleOutput;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.core.state.NodeReferences;
-import org.apache.jackrabbit.core.state.NodeReferencesId;
-import org.apache.jackrabbit.core.state.util.Serializer;
-
-public class NodeReferencesTupleBinding extends TupleBinding {
-
-    private Log log = LogFactory.getLog(NodeReferencesTupleBinding.class);
-
-    private NodeReferencesId id;
-
-    public NodeReferencesTupleBinding(NodeReferencesId id) {
-        this.id = id;
-    }
-
-    public NodeReferencesTupleBinding() {
-    }
-
-    public Object entryToObject(TupleInput in) {
-
-        NodeReferences refs = new NodeReferences(id);
-
-        try {
-            Serializer.deserialize(refs, in);
-        } catch (Exception e) {
-            // since the TupleInput methods do not throw any
-            // exceptions the above call should neither...
-            String msg = "error while deserializing node references";
-            log.debug(msg);
-            throw new RuntimeException(msg, e);
-        }
-
-        return refs;
-    }
-
-    public void objectToEntry(Object o, TupleOutput out) {
-        try {
-            Serializer.serialize((NodeReferences) o, out);
-        } catch (Exception e) {
-            // since the TupleOutput methods do not throw any
-            // exceptions the above call should neither...
-            String msg = "error while serializing node references";
-            log.debug(msg);
-            throw new RuntimeException(msg, e);
-        }
-    }
-}
diff --git a/contrib/bdb-persistence/src/java/org/apache/jackrabbit/core/state/bdb/NodeStateTupleBinding.java b/contrib/bdb-persistence/src/java/org/apache/jackrabbit/core/state/bdb/NodeStateTupleBinding.java
deleted file mode 100644
index 4378066..0000000
--- a/contrib/bdb-persistence/src/java/org/apache/jackrabbit/core/state/bdb/NodeStateTupleBinding.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.state.bdb;
-
-import com.sleepycat.bind.tuple.TupleBinding;
-import com.sleepycat.bind.tuple.TupleInput;
-import com.sleepycat.bind.tuple.TupleOutput;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.core.NodeId;
-import org.apache.jackrabbit.core.state.NodeState;
-import org.apache.jackrabbit.core.state.util.Serializer;
-
-public class NodeStateTupleBinding extends TupleBinding {
-
-    private Log log = LogFactory.getLog(NodeStateTupleBinding.class);
-
-    private NodeId id;
-
-    public NodeStateTupleBinding(NodeId nodeId) {
-        this.id = nodeId;
-    }
-
-    public NodeStateTupleBinding() {
-    }
-
-    public Object entryToObject(TupleInput in) {
-
-        NodeState state = new NodeState(id.getUUID(), null, null, NodeState.STATUS_NEW, false);
-
-        try {
-            Serializer.deserialize(state, in);
-        } catch (Exception e) {
-            // since the TupleInput methods do not throw any
-            // exceptions the above call should neither...
-            String msg = "error while deserializing node state";
-            log.debug(msg);
-            throw new RuntimeException(msg, e);
-        }
-
-        return state;
-    }
-
-    public void objectToEntry(Object o, TupleOutput out) {
-        try {
-            Serializer.serialize((NodeState) o, out);
-        } catch (Exception e) {
-            // since the TupleOutput methods do not throw any
-            // exceptions the above call should neither...
-            String msg = "error while serializing node state";
-            log.debug(msg);
-            throw new RuntimeException(msg, e);
-        }
-    }
-
-}
diff --git a/contrib/bdb-persistence/src/java/org/apache/jackrabbit/core/state/bdb/PropertyStateTupleBinding.java b/contrib/bdb-persistence/src/java/org/apache/jackrabbit/core/state/bdb/PropertyStateTupleBinding.java
deleted file mode 100644
index 20a8f99..0000000
--- a/contrib/bdb-persistence/src/java/org/apache/jackrabbit/core/state/bdb/PropertyStateTupleBinding.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.state.bdb;
-
-import com.sleepycat.bind.tuple.TupleBinding;
-import com.sleepycat.bind.tuple.TupleInput;
-import com.sleepycat.bind.tuple.TupleOutput;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.core.PropertyId;
-import org.apache.jackrabbit.core.state.PropertyState;
-import org.apache.jackrabbit.core.state.util.BLOBStore;
-import org.apache.jackrabbit.core.state.util.Serializer;
-
-public class PropertyStateTupleBinding extends TupleBinding {
-
-    private Log log = LogFactory.getLog(PropertyStateTupleBinding.class);
-
-    private BLOBStore blobStore;
-    private PropertyId id;
-
-    public PropertyStateTupleBinding(BLOBStore blobStore) {
-        this.blobStore = blobStore;
-    }
-
-    public PropertyStateTupleBinding(PropertyId propertyId, BLOBStore blobStore) {
-        this.blobStore = blobStore;
-        this.id = propertyId;
-    }
-
-    public Object entryToObject(TupleInput in) {
-
-        PropertyState state = new PropertyState(id.getName(), id.getParentUUID(), PropertyState.STATUS_NEW, false);
-
-        try {
-            Serializer.deserialize(state, in, blobStore);
-        } catch (Exception e) {
-            // since the TupleInput methods do not throw any
-            // exceptions the above call should neither...
-            String msg = "error while deserializing property state";
-            log.debug(msg);
-            throw new RuntimeException(msg, e);
-        }
-
-        return state;
-    }
-
-    public void objectToEntry(Object o, TupleOutput out) {
-        try {
-            Serializer.serialize((PropertyState) o, out, blobStore);
-        } catch (Exception e) {
-            // since the TupleOutput methods do not throw any
-            // exceptions the above call should neither...
-            String msg = "error while serializing property state";
-            log.debug(msg);
-            throw new RuntimeException(msg, e);
-        }
-    }
-}
diff --git a/contrib/classloader/HEADER.txt b/contrib/classloader/HEADER.txt
deleted file mode 100644
index 1c669de..0000000
--- a/contrib/classloader/HEADER.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
\ No newline at end of file
diff --git a/contrib/classloader/LICENSE.txt b/contrib/classloader/LICENSE.txt
deleted file mode 100644
index d645695..0000000
--- a/contrib/classloader/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/contrib/classloader/project.properties b/contrib/classloader/project.properties
deleted file mode 100644
index 3eae439..0000000
--- a/contrib/classloader/project.properties
+++ /dev/null
@@ -1,107 +0,0 @@
-#  Copyright 2003-2005 The Apache Software Foundation or its licensors,
-#                      as applicable
-#
-#  Licensed under the Apache License, Version 2.0 (the "License");
-#  you may not use this file except in compliance with the License.
-#  You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-#  distributed under the License is distributed on an "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#  See the License for the specific language governing permissions and
-#  limitations under the License.
-
-######################################################################
-# Apache Central Repository
-######################################################################
-maven.repo.central=www.apache.org
-maven.repo.central.directory=/www/www.apache.org/dist/java-repository
-maven.remote.group=apcvs
-maven.changelog.factory = org.apache.maven.svnlib.SvnChangeLogFactory
-
-######################################################################
-# JUnit Testing
-######################################################################
-maven.test.failure = false
-maven.junit.fork=true
-maven.junit.dir=${maven.build.dir}
-#maven.junit.sysproperties=org.xml.sax.driver java.security.auth.login.config
-maven.junit.sysproperties=org.xml.sax.driver
-org.xml.sax.driver=org.apache.xerces.parsers.SAXParser
-#java.security.auth.login.config=applications/test/jaas.config
-
-
-#If you wish to skip tests when doing builds, uncomment
-#maven.test.skip = true
-
-######################################################################
-# Checkstyle
-######################################################################
-maven.checkstyle.properties= checkstyle.xml
-maven.linkcheck.enable=false
-
-######################################################################
-# JavaDoc
-#
-# javadoc urls can be added here, multiple urls are appended using a comma
-#
-# maven.javadoc.links = http://foo/bar/api,\
-#                       http://flim/flam/api/
-######################################################################
-maven.javadoc.links=http://java.sun.com/j2se/1.4.2/docs/api/,http://www.day.com/maven/jsr170/javadocs/jcr-0.16.4.1/
-maven.javadoc.author=false
-maven.javadoc.version=false
-
-######################################################################
-# Other opts
-######################################################################
-# uncomment the next line to work in offline mode (no jar download & no linkcheck)
-#maven.mode.online=
-
-maven.compile.debug=on
-maven.compile.deprecation=off
-maven.compile.optimize=off
-maven.compile.source=1.4
-maven.compile.target=1.4
-
-maven.jarResources.basedir=src/java
-maven.jar.excludes=**/package.html
-
-# Location of the generated query language parsers. Needed for
-# the Maven Eclipse plugin to automatically locate the generated
-# source files. Note that this value matches the hardcoded path
-# in the Maven JavaCC plugin. Therefore, do not change this value!
-maven.gen.src=${maven.build.dir}/generated-src/main
-
-# specifying additional remote repository for downloading dependencies
-# not available at www.ibiblio.org/maven/
-maven.repo.remote = http://www.ibiblio.org/maven/,http://www.day.com/maven/
-
-######################################################################
-# Site L&F
-######################################################################
-# maven.xdoc.jsl=
-maven.xdoc.date=
-maven.xdoc.poweredby.image=maven-feather.png
-maven.xdoc.version=${pom.currentVersion}
-maven.xdoc.developmentProcessUrl=http://incubator.apache.org/projects/jackrabbit.html
-maven.changelog.range=60
-maven.changelog.factory=org.apache.maven.svnlib.SvnChangeLogFactory
-maven.multiproject.overviewPage.title=Jackrabbit components
-
-# ------------------------------------------------------------------------
-# M A V E N  J A R  O V E R R I D E
-# ------------------------------------------------------------------------
-#maven.jar.override = on
-#maven.jar.jcr = ${basedir}/lib/jcr.jar
-
-######################################################################
-# Site Deploy (into ../jackrabbit-site for checkout on incubator.apache.org)
-######################################################################
-maven.site.deploy.method=fs
-
-# IDE settings
-maven.eclipse.resources.addtoclasspath=true
-
diff --git a/contrib/classloader/project.xml b/contrib/classloader/project.xml
deleted file mode 100644
index 2665b5c..0000000
--- a/contrib/classloader/project.xml
+++ /dev/null
@@ -1,129 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-

-<!--

-   Copyright 2004-2005 The Apache Software Foundation or its licensors,

-                       as applicable.

-

-   Licensed under the Apache License, Version 2.0 (the "License");

-   you may not use this file except in compliance with the License.

-   You may obtain a copy of the License at

-

-       http://www.apache.org/licenses/LICENSE-2.0

-

-   Unless required by applicable law or agreed to in writing, software

-   distributed under the License is distributed on an "AS IS" BASIS,

-   WITHOUT 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>1</pomVersion>

-    <groupId>org.apache.jackrabbit</groupId>

-    <currentVersion>1.0-SNAPSHOT</currentVersion>

-    <organization>

-        <name>The Apache Software Foundation</name>

-        <url>http://incubator.apache.org/projects/jackrabbit.html</url>

-        <logo>http://incubator.apache.org/images/apache-incubator-logo.png</logo>

-    </organization>

-    <inceptionYear>2005</inceptionYear>

-    <package>org.apache.jackrabbit.classloader</package>

-    <description>Classloader is an independent subproject of the Jackrabbit project. It provides support for loading classes from from Java Content Repository for Java Technology API (JCR) implementations. Although implemented as a contribution to the Jackrabbit project, the Jackrabbit Repository Classloader layer is independent of the underlying JCR repository implementation, with a small exception regarding node type creation.</description>

-    <shortDescription>Java Classloader for JCR Repositories</shortDescription>

-    <repository />

-    <developers>

-        <developer>

-            <name>Felix Meschberger</name>

-            <id>1</id>

-            <email>fmeschbe@apache.org</email>

-            <organization>Day Software</organization>

-            <timezone>+1</timezone>

-        </developer>

-    </developers>

-    <licenses>

-        <license>

-            <name>The Apache Software License, Version 2.0</name>

-            <url>/LICENSE.txt</url>

-            <distribution>repo</distribution>

-        </license>

-    </licenses>

-    <reports>

-        <report>maven-javadoc-plugin</report>

-        <report>maven-jdepend-plugin</report>

-        <report>maven-license-plugin</report>

-    </reports>

-    <artifactId>classloader</artifactId>

-    <name>Jackrabbit Repository Classloader</name>

-    <dependencies>

-        <dependency>

-            <groupId>org.apache.jackrabbit</groupId>

-            <artifactId>jackrabbit</artifactId>

-            <version>1.0-SNAPSHOT</version>

-            <type>jar</type>

-        </dependency>

-        <dependency>

-            <groupId>org.apache.jackrabbit</groupId>

-            <artifactId>nt-ns-util</artifactId>

-            <version>1.0-SNAPSHOT</version>

-            <type>jar</type>

-        </dependency>

-        <dependency>

-            <groupId>jsr170</groupId>

-            <artifactId>jcr</artifactId>

-            <version>1.0</version>

-            <type>jar</type>

-        </dependency>

-        <dependency>

-            <groupId>commons-logging</groupId>

-            <artifactId>commons-logging</artifactId>

-            <version>1.0</version>

-            <type>jar</type>

-        </dependency>

-

-        <!-- Unit Testing -->

-        <dependency>

-            <groupId>log4j</groupId>

-            <artifactId>log4j</artifactId>

-            <version>1.2.8</version>

-            <type>jar</type>

-        </dependency>

-        <dependency>

-            <groupId>commons-collections</groupId>

-            <artifactId>commons-collections</artifactId>

-            <version>3.1</version>

-            <type>jar</type>

-        </dependency>

-        <dependency>

-            <groupId>concurrent</groupId>

-            <artifactId>concurrent</artifactId>

-            <version>1.3.4</version>

-            <type>jar</type>

-        </dependency>

-        <dependency>

-            <groupId>lucene</groupId>

-            <artifactId>lucene</artifactId>

-            <version>1.4.3</version>

-            <type>jar</type>

-        </dependency>

-    </dependencies>

-    <build>

-        <sourceDirectory>src/main/java</sourceDirectory>

-	    <resources>

-	        <resource>

-	            <directory>src/main/resources</directory>

-	        </resource>

-	    </resources>

-        <unitTestSourceDirectory>src/test/java</unitTestSourceDirectory>

-        <unitTest>

-            <includes>

-                <include>**/*TestAll.java</include>

-            </includes>

-            <resources>

-                <resource>

-                    <directory>src/test/resources</directory>

-                </resource>

-            </resources>

-        </unitTest>

-    </build>

-</project>

-

diff --git a/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/ArchiveClassPathEntry.java b/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/ArchiveClassPathEntry.java
deleted file mode 100644
index 6e985a6..0000000
--- a/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/ArchiveClassPathEntry.java
+++ /dev/null
@@ -1,578 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.classloader;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.jar.JarEntry;
-import java.util.jar.JarInputStream;
-import java.util.jar.Manifest;
-
-import javax.jcr.Property;
-import javax.jcr.RepositoryException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.net.URLFactory;
-
-
-/**
- * The <code>ArchiveClassPathEntry</code> implements the {@link ClassPathEntry}
- * abstract class with support for archives containing classes and other
- * resources. The path used to construct the instance is the path of an item
- * resolving to a property containing the jar archive to access.
- *
- * @author Felix Meschberger
- * @version $Rev:$, $Date:$
- */
-class ArchiveClassPathEntry extends ClassPathEntry {
-
-    /** Default logger */
-    private static final Log log =
-        LogFactory.getLog(ArchiveClassPathEntry.class);
-
-    /** The property containing the archive */
-    private final Property prop;
-
-    /**
-     * Cache all entries in the archive for faster decision on whether such
-     * an entry is contained.
-     */
-    private Map entryMap;
-
-    /**
-     * The JAR file manifest. Set on demand by the {@link #getManifest()}
-     * method.
-     */
-    private Manifest jarManifest;
-
-    /**
-     * Flag to indicate, whether the {@link #jarManifest} has already been read
-     * from the archive. This field is used and set by the
-     * {@link #getManifest()} to decide, whether to try to read the manifest.
-     */
-    private boolean jarManifestRead;
-
-    /**
-     * Creates an instance of the <code>ArchiveClassPathEntry</code> class.
-     *
-     * @param prop The <code>Property</code> containing the archive and
-     *      the session used to access the repository.
-     * @param path The original class path entry leading to the creation of
-     *      this instance. This is not necessairily the same path as the
-     *      properties path if the property was found through the primary
-     *      item chain.
-     *
-     * @throws RepositoryException If an error occurrs retrieving the session
-     *      from the property.
-     */
-    ArchiveClassPathEntry(Property prop, String path) throws RepositoryException {
-        super(prop.getSession(), path);
-        this.prop = prop;
-    }
-
-    /**
-     * Clones the indicated <code>ArchiveClassPathEntry</code> object by
-     * taking over its path, session and property.
-     *
-     * @param base The base <code>ArchiveClassPath</code> entry to clone.
-     *
-     * @see ClassPathEntry#ClassPathEntry(ClassPathEntry)
-     */
-    protected ArchiveClassPathEntry(ArchiveClassPathEntry base) {
-        super(base);
-        this.prop = base.prop;
-    }
-
-    /**
-     * Returns the <code>Property</code> containing the JAR file of this
-     * archive class path entry.
-     */
-    protected Property getProperty() {
-        return prop;
-    }
-
-    /**
-     * Returns a {@link ClassLoaderResource} for the named resource if it
-     * can be found in the archive identified by the path given at
-     * construction time. Note that if the archive property would exist but is
-     * not readable by the current session, no resource is returned.
-     * <p>
-     * This method accesses the archive through an <code>InputStream</code>
-     * retrievedfrom the property. This <code>InputStream</code> is closed before
-     * returning to the caller to release the resources behind the stream
-     * such that it might be updated, etc. For this reason the resource
-     * instance returned will again open an <code>InputStream</code> on the
-     * archive property to access the resource. Users of the resource
-     * <code>InputStream</code> are encouraged to close the stream when no
-     * longer used to prevent lockups in the Repository.
-     *
-     * @param name The name of the resource to return. If the resource would
-     *      be a class the name must already be modified to denote a valid
-     *      path, that is dots replaced by slashes and the <code>.class</code>
-     *      extension attached.
-     *
-     * @return The {@link ClassLoaderResource} identified by the name or
-     *      <code>null</code> if no resource is found for that name.
-     */
-    public ClassLoaderResource getResource(final String name) {
-
-        JarInputStream zins = null;
-        try {
-            // get the archive and try to find the entry
-            zins = getJarInputStream(prop);
-            JarEntry entry = findEntry(zins, name);
-
-            // if found create the resource to return
-            if (entry != null) {
-                return new ArchiveClassPathResource(this, entry);
-            }
-
-            log.debug("getResource: resource " + name + " not found"
-                + " in archive " + path);
-
-        } catch (IOException ioe) {
-
-            log.warn("getResource: problem accessing the archive " + path
-                + " for " + name + ": " + ioe.toString());
-
-        } catch (RepositoryException re) {
-
-            log.warn("getResource: problem accessing the archive " + path
-                + " for " + name + ": " + re.toString());
-
-        } finally {
-
-            // make sure streams are closed at the end
-            if (zins != null) {
-                try {
-                    zins.close();
-                } catch (IOException ignore) {
-                }
-            }
-
-        }
-        // invariant : not found or problem accessing the archive
-
-        return null;
-    }
-
-    /**
-     * Returns a <code>ClassPathEntry</code> with the same configuration as
-     * this <code>ClassPathEntry</code>.
-     * <p>
-     * The <code>ArchiveClassPathEntry</code> class has internal state.
-     * Therefore a new instance is created from the unmodifiable configuration
-     * of this instance.
-     */
-    ClassPathEntry copy() {
-        return new ArchiveClassPathEntry(this);
-    }
-
-    /**
-     * Returns a JAR URL with no entry as the base URL of this class path entry.
-     */
-    public URL toURL() {
-        if (baseURL == null) {
-            try {
-                baseURL = URLFactory.createJarURL(session, path, null);
-            } catch (MalformedURLException mue) {
-                log.warn("Problem creating baseURI for " + path, mue);
-            }
-        }
-
-        return baseURL;
-    }
-
-    //----------- internal helper to find the entry ------------------------
-
-    /**
-     * Returns a JAR URL to access the named resource within the archive
-     * underlying this class path entry. This is a helper method for the
-     * {@link ClassLoaderResource} instance returned by
-     * {@link #getResource(String)} method.
-     * <p>
-     * This method does not check, whether the named entry actually exists in
-     * the underlying archive.
-     *
-     * @param name The name of the resource for which to create the JAR URL.
-     */
-    protected URL getURL(String name) {
-        try {
-            return URLFactory.createJarURL(session, path, name);
-        } catch (MalformedURLException mue) {
-            log.error("getURL: Cannot create URL for " + name, mue);
-        }
-        return null;
-    }
-
-    /**
-     * Returns an URL to access the underlying archive itself of this class
-     * path entry. The URL returned may be used as the code source for Java
-     * securtiy protection domains. This is a helper method for the
-     * {@link ClassLoaderResource} instance returned by
-     * {@link #getResource(String)} method.
-     *
-     * @return The URL to access the underlying archive.
-     */
-    protected URL getCodeSourceURL() {
-        try {
-            return URLFactory.createURL(session, path);
-        } catch (MalformedURLException mue) {
-            log.warn("getCodeSourceURL: Cannot getURL" + " for " + path, mue);
-        }
-        return null;
-    }
-
-    /**
-     * Returns a <code>JarInputStream</code> from the property.
-     *
-     * @param property The <code>Property</code> containing the archive to
-     *      access.
-     *
-     * @return A valid <code>JarInputStream</code>.
-     *
-     * @throws RepositoryException If an <code>InputStream</code> cannot be
-     *      retrieved from the property.
-     * @throws IOException If the <code>JarInputStream</code> cannot be
-     *      created.
-     */
-    static JarInputStream getJarInputStream(Property property)
-            throws RepositoryException, IOException {
-        return new JarInputStream(property.getStream());
-    }
-
-    /**
-     * Returns the <code>Manifest</code> object of the JAR archive file
-     * underlying this archive class path entry. If no manifest exists in the
-     * JAR file or if the archive is not a JAR file at - e.g. a plain ZIP
-     * file - this method returns <code>null</code>. If an error occurrs
-     * trying to access the manifest, <code>null</code> is also returned. Later
-     * calls to this method, will not try again to read the manifest file,
-     * though.
-     * <p>
-     * This method is synchronized to prevent two threads from trying to access
-     * the manifest at the same time, which might result in false negative
-     * returned.
-     *
-     * @return The manifest contained in the underlying JAR file or
-     *      <code>null</code> if none exists or an error occurrs trying to
-     *      load the manifest.
-     */
-    protected synchronized Manifest getManifest() {
-        if (jarManifest == null && !jarManifestRead) {
-
-            // immediately mark the manifest read, to prevent repeated read
-            // in the case of missing manifest
-            jarManifestRead = true;
-
-            JarInputStream zipIns = null;
-            try {
-                zipIns = new JarInputStream(prop.getStream());
-                jarManifest = zipIns.getManifest();
-            } catch (RepositoryException re) {
-                log.warn("Cannot access JAR file " + getPath(), re);
-            } catch (IOException ioe) {
-                log.warn("Cannot access manifest of JAR file " + getPath(), ioe);
-            } finally {
-                if (zipIns != null) {
-                    try {
-                        zipIns.close();
-                    } catch (IOException ignore) {
-                    }
-                }
-            }
-        }
-
-        return jarManifest;
-    }
-
-    /**
-     * Returns the <code>JarEntry</code> for the path from the
-     * <code>JarInputStream</code> or <code>null</code> if the path cannot
-     * be found in the archive.
-     *
-     * @param zins The <code>JarInputStream</code> to search in.
-     * @param path The path of the <code>JarEntry</code> to return.
-     *
-     * @return The <code>JarEntry</code> for the path or <code>null</code>
-     *      if no such entry can be found.
-     *
-     * @throws IOException if a problem occurrs reading from the stream.
-     */
-    JarEntry findEntry(JarInputStream zins, String path)
-        throws IOException {
-
-        if (entryMap == null) {
-
-            // make sure to not build the list twice
-            synchronized (this) {
-
-                /**
-                 * make sure, we still need to build the list. this
-                 * implementation surely does not cure all problems of the
-                 * double-checked-locking problem, but it surely remmedies
-                 * the main problem where the reference is already written
-                 * to the field before the constructor has finished. Also
-                 * this only assigns the field when the contents has been
-                 * filled.
-                 */
-                if (entryMap == null) {
-
-                    // prepare an empty entry map to be filled
-                    Map tmpEntryMap = new HashMap();
-
-                    try {
-                        // build the name-to-index map
-                        log.debug("findEntry: Building map while searching");
-
-                        JarEntry result = null;
-                        JarEntry entry = zins.getNextJarEntry();
-                        for (int i=0; entry != null; i++) {
-
-                            // add the entry to the map
-                            String name = entry.getName();
-                            Integer entryNumO = new Integer(i);
-                            tmpEntryMap.put(name, entryNumO);
-                            log.debug("findEntry: Entry " + name + " ==> " +
-                                entryNumO);
-
-                            // if we found our entry, keep it to be returned later
-                            if (result == null && path.equals(name)) {
-                                log.debug("findEntry: Found the entry, " +
-                                        "continue indexing");
-                                result = entry;
-                            }
-
-                            // on to the next entry
-                            entry = zins.getNextJarEntry();
-                        }
-                        // invariant: path has the entry found or null
-
-                        // return what we found
-                        log.debug("findEntry: Indexing complete, " +
-                                "returning " + result);
-                        return result;
-
-                    } finally {
-
-                        /**
-                         * assign the finished tmp entryMap to the field now.
-                         * theoretically, this may still be null, which
-                         * is no issue because it will be tried to be
-                         * rebuilt - over and over again, though - by the
-                         * next call to findEntry.
-                         * in the case of build problems, the map be empty
-                         * in which case it will not be rebuilt, which is
-                         * ok, too, given that reading will still yield
-                         * problems.
-                         */
-
-                        entryMap = tmpEntryMap;
-                    }
-
-                }
-            }
-        }
-        // invariant: entryMap is not null, but might be empty
-        // ( in case of problems creating the tmpEntryMap above, e.g.
-        //   OutOfMemoryError, the entryMap might be null, but then we
-        //   are thrown out of the method any way ... this is no issue
-        //   here )
-
-        // map exists, lets try to get via number
-        Number entryNumO = (Number) entryMap.get(path);
-        if (entryNumO == null) {
-            log.debug("findEntry: This archive does not contain " + path);
-            return null;
-        }
-
-        // find the indexed entry
-        log.debug("findEntry: " + path + " is entry #" + entryNumO);
-        int entryNum = entryNumO.intValue();
-        JarEntry entry = zins.getNextJarEntry();
-        while (entryNum > 0 && entry != null) {
-            entry = zins.getNextJarEntry();
-            entryNum--;
-        }
-        return entry;
-    }
-
-    /**
-     * The <code>ArchiveClassPathResource</code> extends the
-     * {@link ClassLoaderResource} with support to extract resources from a
-     * JAR or ZIP archive.
-     *
-     * @author Felix Meschberger
-     * @version $Rev:$, $Date:$
-     */
-    private static class ArchiveClassPathResource extends ClassLoaderResource {
-
-        /**
-         * The JAR/ZIP file entry providing the name, size and modification
-         * time information.
-         */
-        private final JarEntry jarEntry;
-
-        /**
-         * Creates an instance of this resource for the given
-         * {@link ArchiveClassPathEntry} and JAR/ZIP file entry.
-         *
-         * @param pathEntry The {@link ArchiveClassPathEntry} from which this
-         *      resource has been loaded.
-         * @param jarEntry The JAR/ZIP file entry describing this resource.
-         */
-        private ArchiveClassPathResource(ArchiveClassPathEntry pathEntry,
-                JarEntry jarEntry) {
-            super(pathEntry, jarEntry.getName(), pathEntry.getProperty());
-            this.jarEntry = jarEntry;
-        }
-
-        /**
-         * Returns an URL to access this resource.
-         *
-         * @see ArchiveClassPathEntry#getURL(String)
-         */
-        public URL getURL() {
-            return getArchiveClassPathEntry().getURL(getName());
-        }
-
-        /**
-         * Returns an URL identifying the archive from which this resource is
-         * loaded.
-         *
-         * @see ArchiveClassPathEntry#getCodeSourceURL()
-         */
-        public URL getCodeSourceURL() {
-            return getArchiveClassPathEntry().getCodeSourceURL();
-        }
-
-        /**
-         * Returns an <code>InputStream</code> to read the contents of the
-         * resource. Calling this method actually accesses the JAR/ZIP file
-         * and seeks through the file until the entry is found.
-         * <p>
-         * Clients of this method must make sure to close the stream returned
-         * if not used anymore to prevent resource drain.
-         *
-         * @throws RepositoryException If an error occurrs accessing or reading
-         *      the archive.
-         *
-         * @see ArchiveClassPathEntry#findEntry(JarInputStream, String)
-         */
-        public InputStream getInputStream() throws RepositoryException {
-            /**
-             * Cannot reuse the ClassPathEntry instances entry and
-             * JarInputStream, because this is shared and has to be
-             * closed to release the property resource.
-             */
-            JarInputStream zipIns = null;
-            JarEntry entry = null;
-
-            try {
-
-                zipIns = getJarInputStream(getProperty());
-                entry = getArchiveClassPathEntry().findEntry(zipIns, getName());
-                if (entry != null) {
-                    return zipIns;
-                }
-
-                // otherwise
-                log.warn("Cannot find entry " + getName() + " in the archive "
-                    + getClassPathEntry().getPath() + " anymore!");
-                return null;
-
-            } catch (IOException ioe) {
-
-                // log
-                throw new RepositoryException(ioe);
-
-            } finally {
-
-                // if thrown during findEntry(), entry is null but
-                // the stream is open. As we exit by an exception,
-                // the InputStream is not returned and must be
-                // closed to release it.
-
-                if (entry == null && zipIns != null) {
-                    try {
-                        zipIns.close();
-                    } catch (IOException ignored) {
-                    }
-                }
-
-            }
-        }
-
-        /**
-         * Returns the value of the <code>size</code> field of the JAR/ZIP
-         * file entry of this resource. If the size is not known to the entry,
-         * <code>-1</code> may be returned.
-         */
-        public int getContentLength() {
-            return (int) jarEntry.getSize();
-        }
-
-        /**
-         * Returns the path to the property containing the archive or the
-         * path with which the {@link ArchiveClassPathEntry} was created if the
-         * former cannot be retrieved.
-         */
-        public String getPath() {
-            try {
-                return getProperty().getPath();
-            } catch (RepositoryException re) {
-                String archivePath = getClassPathEntry().getPath();
-                log.warn("Cannot access the path of the archive " +
-                        "property below " + archivePath, re);
-                return archivePath;
-            }
-        }
-
-        /**
-         * Returns the value of the <code>time</code> field of the JAR/ZIP
-         * file entry of this resource. If the time is not known to the entry,
-         * <code>-1</code> may be returned.
-         */
-        public long getLastModificationTime() {
-            return jarEntry.getTime();
-        }
-
-        /**
-         * Returns the manifest of the archive from which this resource was
-         * loaded or <code>null</code> if no such manifest exists or an error
-         * occurrs reading the manifest.
-         *
-         * @see ArchiveClassPathEntry#getManifest()
-         */
-        public Manifest getManifest() {
-            return getArchiveClassPathEntry().getManifest();
-        }
-
-        /**
-         * Returns the {@link ArchiveClassPathEntry} from which this resource
-         * was loaded.
-         */
-        protected ArchiveClassPathEntry getArchiveClassPathEntry() {
-            return (ArchiveClassPathEntry) getClassPathEntry();
-        }
-    }
-}
\ No newline at end of file
diff --git a/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/ClassLoaderResource.java b/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/ClassLoaderResource.java
deleted file mode 100644
index d222bb5..0000000
--- a/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/ClassLoaderResource.java
+++ /dev/null
@@ -1,401 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.classloader;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.security.cert.Certificate;
-import java.util.Date;
-import java.util.jar.Manifest;
-
-import javax.jcr.Property;
-import javax.jcr.RepositoryException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.net.URLFactory;
-
-
-/**
- * The <code>ClassLoaderResource</code> class represents a resource looked up
- * by the {@link ClassPathEntry}s of the {@link RepositoryClassLoader}. The
- * class provides transparent access to the resource irrespective of the fact
- * on whether the resource is contained in a repository property or in an
- * JAR or ZIP archive.
- * <p>
- * This class is extended to implement depending features such as storing
- * resources in repository properties or JAR or ZIP archives.
- *
- * @author Felix Meschberger
- * @version $Rev:$, $Date:$
- */
-class ClassLoaderResource {
-
-    /** default log category */
-    private static final Log log = LogFactory.getLog(ClassLoaderResource.class);
-
-    /**
-     * The class path entry which loaded this class loader resource
-     */
-    private final ClassPathEntry pathEntry;
-
-    /**
-     * The name of this resource.
-     */
-    private final String name;
-
-    /**
-     * The repository property providing the resource's contents. This may be
-     * <code>null</code> if the resource was loaded from a JAR/ZIP archive.
-     */
-    private final Property resProperty;
-
-    /**
-     * The class optionally loaded/defined through this resource.
-     *
-     * @see #getLoadedClass()
-     * @see #setLoadedClass(Class)
-     */
-    private Class loadedClass;
-
-    /**
-     * The time in milliseconds at which this resource has been loaded from
-     * the repository.
-     */
-    private final long loadTime;
-
-    /**
-     * Creates an instance of this class for the class path entry.
-     *
-     * @param pathEntry The {@link ClassPathEntry} of the code source of this
-     *      class loader resource.
-     * @param name The path name of this resource.
-     * @param resProperty The <code>Property</code>providing the content's of
-     *      this resource. This may be <code>null</code> if the resource
-     *      was loaded from an JAR or ZIP archive.
-     */
-    /* package */ ClassLoaderResource(ClassPathEntry pathEntry, String name,
-            Property resProperty) {
-        this.pathEntry = pathEntry;
-        this.name = name;
-        this.resProperty = resProperty;
-        this.loadTime = System.currentTimeMillis();
-    }
-
-    /**
-     * Returns the {@link ClassPathEntry} which loaded this resource.
-     */
-    protected ClassPathEntry getClassPathEntry() {
-        return pathEntry;
-    }
-
-    /**
-     * Returns the name of this resource. This is the name used to find the
-     * resource, for example the class name or the properties file path.
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * Returns the <code>Property</code> with which this resource is created.
-     */
-    protected Property getProperty() {
-        return resProperty;
-    }
-
-    /**
-     * Returns the time in milliseconds at which this resource has been loaded
-     */
-    protected long getLoadTime() {
-        return loadTime;
-    }
-
-    /**
-     * Returns the URL to access this resource, for example a JCR or a JAR URL.
-     * If the URL cannot be created from the resource data, <code>null</code> is
-     * returned.
-     */
-    public URL getURL() {
-        try {
-            return URLFactory.createURL(getClassPathEntry().session, getPath());
-        } catch (Exception e) {
-            log.warn("getURL: Cannot getURL for " + getPath(), e);
-        }
-        return null;
-    }
-
-    /**
-     * Returns the URL to the code source of this entry. If there is no code
-     * source available, <code>null</code> is returned.
-     * <p>
-     * This base class implementation returns the result of calling
-     * {@link ClassPathEntry#toURL()} on the class path entry from which this
-     * resource was loaded.
-     */
-    public URL getCodeSourceURL() {
-        return getClassPathEntry().toURL();
-    }
-
-    /**
-     * Returns an <code>InputStream</code> to read from the resource.
-     * <p>
-     * This base class implementation returns the result of calling the
-     * <code>getStream()</code> method on the resource's property or
-     * <code>null</code> if the property is not set.
-     */
-    public InputStream getInputStream() throws RepositoryException {
-        return (getProperty() != null) ? getProperty().getStream() : null;
-    }
-
-    /**
-     * Returns the size of the resource or -1 if the size cannot be found out.
-     * <p>
-     * This base class implementation returns the result of calling the
-     * <code>getLength()</code> method on the resource's property or -1 if
-     * the property is not set.
-     *
-     * @throws RepositoryException If an error occurrs trying to find the length
-     *      of the property.
-     */
-    public int getContentLength() throws RepositoryException {
-        return (getProperty() != null) ? (int) getProperty().getLength() : -1;
-    }
-
-    /**
-     * Returns the path of the property containing the resource.
-     * <p>
-     * This base class implementation returns the absolute path of the
-     * resource's property. If the property is not set or if an error occurrs
-     * accesing the property's path, the concatentation of the class path
-     * entry's path and the resource's name is returned.
-     */
-    public String getPath() {
-        if (getProperty() != null) {
-            try {
-                return getProperty().getPath();
-            } catch (RepositoryException re) {
-                // fallback
-                log.warn("getPath: Cannot retrieve path of entry " + getName(),
-                    re);
-            }
-        }
-
-        // fallback if no resource property or an error accessing the path of
-        // the property
-        return getClassPathEntry().getPath() + getName();
-    }
-
-    /**
-     * Returns the time of the the last modification of the resource or -1 if
-     * the last modification time cannot be evaluated.
-     * <p>
-     * This base class implementation returns the result of calling the
-     * {@link Util#getLastModificationTime(Property)} method on the resource's
-     * property if not <code>null</code>. In case of an error or if the
-     * property is <code>null</code>, -1 is returned.
-     */
-    public long getLastModificationTime() {
-        if (getProperty() != null) {
-            try {
-                return Util.getLastModificationTime(getProperty());
-            } catch (RepositoryException re) {
-                log.info("getLastModificationTime of resource property", re);
-            }
-        }
-
-        // cannot find the resource modification time, use epoch
-        return -1;
-    }
-
-    /**
-     * Returns the resource as an array of bytes
-     */
-    public byte[] getBytes() throws IOException, RepositoryException {
-        InputStream in = null;
-        byte[] buf = null;
-
-        log.debug("getBytes");
-
-        try {
-            in = getInputStream();
-            log.debug("getInputStream() returned " + in);
-
-            int length = getContentLength();
-            log.debug("getContentLength() returned " + String.valueOf(length));
-
-            if (length >= 0) {
-
-                buf = new byte[length];
-                for (int read; length > 0; length -= read) {
-                    read = in.read(buf, buf.length - length, length);
-                    if (read == -1) {
-                        throw new IOException("unexpected EOF");
-                    }
-                }
-
-            } else {
-
-                buf = new byte[1024];
-                int count = 0;
-                int read;
-
-                // read enlarging buffer
-                while ((read = in.read(buf, count, buf.length - count)) != -1) {
-                    count += read;
-                    if (count >= buf.length) {
-                        byte buf1[] = new byte[count * 2];
-                        System.arraycopy(buf, 0, buf1, 0, count);
-                        buf = buf1;
-                    }
-                }
-
-                // resize buffer if too big
-                if (count != buf.length) {
-                    byte buf1[] = new byte[count];
-                    System.arraycopy(buf, 0, buf1, 0, count);
-                    buf = buf1;
-                }
-
-            }
-
-        } finally {
-
-            if (in != null) {
-                try {
-                    in.close();
-                } catch (IOException ignore) {
-                }
-            }
-
-        }
-
-        return buf;
-    }
-
-    /**
-     * Returns the manifest from the jar file for this class resource. If this
-     * resource is not from a jar file, the method returns <code>null</code>,
-     * which is what the default implementation does.
-     */
-    public Manifest getManifest() {
-        return null;
-    }
-
-    /**
-     * Returns the certificates from the jar file for this class resource. If
-     * this resource is not from a jar file, the method returns
-     * <code>null</code>, which is what the default implementation does.
-     */
-    public Certificate[] getCertificates() {
-        return null;
-    }
-
-    /**
-     * Returns the <code>Property</code> which is used to check whether this
-     * resource is expired or not.
-     * <p>
-     * This base class method returns the same property as returned by the
-     * {@link #getProperty()} method. This method may be overwritten by
-     * implementations as appropriate.
-     *
-     * @see #isExpired()
-     */
-    protected Property getExpiryProperty() {
-        return getProperty();
-    }
-
-    /**
-     * Returns <code>true</code> if the last modification date of the expiry
-     * property of this resource is loaded is later than the time at which this
-     * resource has been loaded. If the last modification time of the expiry
-     * property cannot be calculated or if an error occurrs checking the expiry
-     * propertiy's last modification time, <code>true</code> is returned.
-     */
-    public boolean isExpired() {
-        try {
-            // creation time of version if loaded now
-            long currentPropTime = 0;
-            Property prop = getExpiryProperty();
-            if (prop != null) {
-                currentPropTime = Util.getLastModificationTime(prop);
-            }
-
-            // creation time of version currently loaded
-            long loadTime = getLoadTime();
-
-            // expire if a new version would be loaded
-            boolean exp = currentPropTime > loadTime;
-            if (exp && log.isDebugEnabled()) {
-                log.debug("expireResource: Resource created " +
-                    new Date(loadTime) + " superceded by version created " +
-                    new Date(currentPropTime));
-            }
-
-            // return the result of checking
-            return exp;
-        } catch (RepositoryException re) {
-            log.debug("expireResource: Cannot get current version for " +
-                toString() + ", will expire: " + re);
-            return true;
-        }
-    }
-
-    /**
-     * Returns the class which was loaded through this resource. It is expected
-     * that the class loader sets the class which was loaded through this
-     * resource by calling the {@link #setLoadedClass(Class)} method. If this
-     * class was not used to load a class or if the class loader failed to
-     * set the class loaded through this resoource, this method will return
-     * <code>null</code>.
-     *
-     * @return The class loaded through this resource, which may be
-     *      <code>null</code> if this resource was never used to load a class
-     *      or if the loader failed to set class through the
-     *      {@link #setLoadedClass(Class)} method.
-     *
-     * @see #setLoadedClass(Class)
-     */
-    public Class getLoadedClass() {
-        return loadedClass;
-    }
-
-    /**
-     * Sets the class which was loaded through this resource. This method does
-     * not check, whether it is plausible that this class was actually loaded
-     * from this resource, nor does this method check whether the class object
-     * is <code>null</code> or not.
-     *
-     * @param loadedClass The class to be loaded.
-     */
-    public void setLoadedClass(Class loadedClass) {
-        this.loadedClass = loadedClass;
-    }
-
-    /**
-     * Returns the <code>String</code> representation of this resource.
-     */
-    public String toString() {
-        StringBuffer buf = new StringBuffer(getClass().getName());
-        buf.append(": path=");
-        buf.append(getPath());
-        buf.append(", name=");
-        buf.append(getName());
-        return buf.toString();
-    }
-}
\ No newline at end of file
diff --git a/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/ClassPathEntry.java b/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/ClassPathEntry.java
deleted file mode 100644
index 0b7a908..0000000
--- a/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/ClassPathEntry.java
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.classloader;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.security.AccessControlException;
-import java.util.jar.JarException;
-import java.util.jar.JarInputStream;
-
-import javax.jcr.ItemNotFoundException;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.Property;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.net.URLFactory;
-
-/**
- * The <code>ClassPathEntry</code> class encapsulates entries in the class path
- * of the {@link DynamicRepositoryClassLoader}. The main task is to retrieve
- * {@link ClassLoaderResource} instances for classes or resources to load from it.
- * <p>
- * This implementation is not currently integrated with Java security. That is
- * protection domains and security managers are not supported yet.
- * <p>
- * This class is not intended to be subclassed or instantiated by clients.
- *
- * @author Felix Meschberger
- * @version $Rev:$, $Date:$
- */
-abstract class ClassPathEntry {
-
-    /** default logging */
-    private static final Log log = LogFactory.getLog(ClassPathEntry.class);
-
-    /** The session assigned to this class path entry */
-    protected final Session session;
-
-    /** The path to the item of this class path entry */
-    protected final String path;
-
-    /** The base URL for the class path entry to later construct resource URLs */
-    protected URL baseURL;
-
-    //---------- construction --------------------------------------------------
-
-    /**
-     * Creates an instance of the <code>ClassPathEntry</code> assigning the
-     * session and path.
-     *
-     * @param session The <code>Session</code> to access the Repository.
-     * @param path The path of the class path entry, this is either the
-     *      path of a node containing a jar archive or is the path
-     *      of the root of a hierarchy to look up resources in.
-     */
-    protected ClassPathEntry(Session session, String path) {
-        this.path = path;
-        this.session = session;
-    }
-
-    /**
-     * Clones this instance of the <code>ClassPathEntry</code> setting the
-     * path and session to the same value as the base instance.
-     * <p>
-     * Note that this constructor does not duplicate the session from the base
-     * instance.
-     *
-     * @param base The <code>ClassPathEntry</code> from which to copy the path
-     *      and the session.
-     */
-    protected ClassPathEntry(ClassPathEntry base) {
-        this.path = base.path;
-        this.session = base.session;
-        this.baseURL = base.baseURL;
-    }
-
-    /**
-     * Returns an instance of the <code>ClassPathEntry</code> class. This
-     * instance will be a subclass correctly handling the type (directory or
-     * jar archive) of class path entry is to be created.
-     * <p>
-     * If the path given has a trailing slash, it is taken as a directory root
-     * else the path is first tested, whether it contains an archive. If not
-     * the path is treated as a directory.
-     *
-     * @param session The <code>Session</code> to access the Repository.
-     * @param path The path of the class path entry, this is either the
-     *      path of a node containing a jar archive or is the path
-     *      of the root of a hierharchy to look up resources in.
-     *
-     * @return An initialized <code>ClassPathEntry</code> instance for the
-     *      path or <code>null</code> if an error occurred creating the
-     *      instance.
-     */
-    static ClassPathEntry getInstance(Session session, String path) {
-
-        // check we can access the path, don't care about content now
-        try {
-            session.checkPermission(path, "read");
-        } catch (AccessControlException ace) {
-            log.warn("getInstance: Access denied reading from " + path +
-                ", ignoring entry");
-            return null;
-        } catch (RepositoryException re) {
-            log.error("getInstance: Cannot check permission to " + path, re);
-        }
-
-        // only check for archive if no trailing slash in path
-        if (!path.endsWith("/")) {
-            InputStream is = null;
-            JarInputStream zip = null;
-            try {
-
-                Property prop = Util.getProperty(session.getItem(path));
-                if (prop != null) {
-
-                    is = prop.getStream();
-                    zip = new JarInputStream(is);
-                    if (zip.getNextJarEntry() != null /* && zip.read() != -1 */ ) {
-                        // use the expanding jar support if can expand
-                        if (ExpandingArchiveClassPathEntry.canExpandArchives(session)) {
-                            return new ExpandingArchiveClassPathEntry(prop, path);
-                        }
-
-                        // otherwise use the non-expanding
-                        return new ArchiveClassPathEntry(prop, path);
-                    }
-
-                    log.debug("getInstance: " + path + " might not be a jar " +
-                            "archive, using as directory");
-                } else {
-                    log.debug("getInstance: " + path + " does not resolve" +
-                            " to a property, using as directory");
-                }
-
-            } catch (ItemNotFoundException infe) {
-
-                // how to path ?
-                // thrown from
-                //   - Node.getPrimaryItem
-                //   -
-
-            } catch (PathNotFoundException pnfe) {
-
-                // how to path ?
-                // thrown from
-                //   - session.getItem
-                //   -
-
-            } catch (RepositoryException re) {
-
-                log.debug("getInstance: " + path + " cannot be read from, " +
-                        "using as directory");
-
-            } catch (JarException ze) {
-
-                log.debug("getInstance: " + path + " does not contain an " +
-                        "archive, using as directory");
-
-            } catch (IOException ioe) {
-
-                log.debug("getInstance: " + path + " problem reading from " +
-                        "the archive, using as directory");
-
-            } finally {
-                if (zip != null) {
-                    try {
-                        zip.close();
-                    } catch (IOException ignored) {}
-                } else if (is != null) {
-                    try {
-                        is.close();
-                    } catch (IOException ignored) {}
-                }
-            }
-            // assume the path designates a directory
-
-            // append trailing slash now
-            path += "/";
-        }
-
-        // we assume a directory class path entry, but we might have to check
-        // whether the path refers to a node or not. On the other hande, this
-        // class path entry will not be usable anyway if not, user beware :-)
-
-        return new DirectoryClassPathEntry(session, path);
-    }
-
-    /**
-     * Returns the path on which this <code>ClassPathEntry</code> is based.
-     */
-    public String getPath() {
-        return path;
-    }
-
-    /**
-     * Returns this <code>ClassPathEntry</code> represented as an URL to be
-     * used in a list of URLs to further work on. If there is a problem creating
-     * the URL for this instance, <code>null</code> is returned instead.
-     */
-    public URL toURL() {
-        if (baseURL == null) {
-            try {
-                baseURL = URLFactory.createURL(session, path);
-            } catch (MalformedURLException mue) {
-                log.warn("DirectoryClassPathEntry: Creating baseURl for " +
-                    path, mue);
-            }
-        }
-
-        return baseURL;
-    }
-
-    /**
-     * Returns a <code>ClassPathEntry</code> with the same configuration as
-     * this <code>ClassPathEntry</code>.
-     * <p>
-     * The returned object may be but need not be a new instance. If the original
-     * implementation is an immutable class, the instance returned may well
-     * be the same as this.
-     */
-    abstract ClassPathEntry copy();
-
-    /**
-     * Searches for the named resource. The name is looked up as is, it is not
-     * further modified such as appended with ".class" or made relative. That
-     * is callers must make sure, that (1) this name is the full name of the
-     * resource to find and that (2) it is a relative name, that is it should
-     * not have a leading slash.
-     * <p>
-     * An example of a class to find would be : <code>com/day/test/Tester.class</code>
-     * which is converted from the generally used value <code>com.day.test.Tester</code>
-     * by the caller.
-     *
-     * @param name The name of the resource to find.
-     */
-    public abstract ClassLoaderResource getResource(String name);
-
-    /**
-     * @see Object#toString()
-     */
-    public String toString() {
-        StringBuffer buf = new StringBuffer(super.toString());
-        buf.append(": path: ");
-        buf.append(path);
-        buf.append(", user: ");
-        buf.append(session.getUserID());
-        return buf.toString();
-    }
-
-    //----------- internal helper ----------------------------------------------
-
-}
diff --git a/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/DirectoryClassPathEntry.java b/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/DirectoryClassPathEntry.java
deleted file mode 100644
index 65b957f..0000000
--- a/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/DirectoryClassPathEntry.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.classloader;
-
-import javax.jcr.PathNotFoundException;
-import javax.jcr.Property;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-
-/**
- * The <code>DirectoryClassPathEntry</code> implements the
- * {@link ClassPathEntry} abstract class with support for directory like
- * class path access. The path used to construct the instance is the
- * root path of a page structure finally containing the classes and
- * resources.
- *
- * @author Felix Meschberger
- * @version $Rev:$, $Date:$
- */
-class DirectoryClassPathEntry extends ClassPathEntry {
-
-    /** Default log */
-    private static final Log log =
-        LogFactory.getLog(DirectoryClassPathEntry.class);
-
-    /**
-     * Creates an instance of the <code>DirectoryClassPathEntry</code> class.
-     * <p>
-     * The path given is expected to have a trailing slash character else
-     * results will not be as expected when getting resources.
-     *
-     * @param session The <code>Ticket</code> to access the ContentBus.
-     * @param path The path of the class path entry, which is the path
-     *      of the root of a hierarchy to look up resources in.
-     */
-    DirectoryClassPathEntry(Session ticket, String handle) {
-        super(ticket, handle);
-    }
-
-    /**
-     * Returns a {@link ClassLoaderResource} for the named resource if it
-     * can befound below this directory root identified by the path given
-     * at construction time. Note that if the page would exist but does
-     * either not contain content or is not readable by the current session,
-     * no resource is returned.
-     *
-     * @param name The name of the resource to return. If the resource would
-     *      be a class the name must already be modified to denote a valid
-     *      path, that is dots replaced by dashes and the <code>.class</code>
-     *      extension attached.
-     *
-     * @return The {@link ClassLoaderResource} identified by the name or
-     *      <code>null</code> if no resource is found for that name.
-     */
-    public ClassLoaderResource getResource(final String name) {
-
-        try {
-            final Property prop = Util.getProperty(session.getItem(path + name));
-            if (prop != null) {
-                return new ClassLoaderResource(this, name, prop);
-            }
-
-            log.debug("getResource: resource " + name +
-                " not found below " + path);
-
-        } catch (PathNotFoundException pnfe) {
-
-            log.info("getResource: Classpath entry " + path +
-                " does not have resource " + name);
-
-        } catch (RepositoryException cbe) {
-
-            log.warn("getResource: problem accessing the resource " + name +
-                " below " + path + ": " + cbe);
-
-        }
-        // invariant : no page or problem accessing the page
-
-        return null;
-    }
-
-    /**
-     * Returns a <code>ClassPathEntry</code> with the same configuration as
-     * this <code>ClassPathEntry</code>.
-     * <p>
-     * Becase the <code>DirectoryClassPathEntry</code> class does not have
-     * internal state, this method returns this instance to be used as
-     * the "copy".
-     */
-    ClassPathEntry copy() {
-        return this;
-    }
-}
\ No newline at end of file
diff --git a/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/DynamicPatternPath.java b/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/DynamicPatternPath.java
deleted file mode 100644
index 0f49d3d..0000000
--- a/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/DynamicPatternPath.java
+++ /dev/null
@@ -1,276 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.classloader;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.observation.Event;
-import javax.jcr.observation.EventIterator;
-import javax.jcr.observation.EventListener;
-import javax.jcr.observation.ObservationManager;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * The <code>DynamicPatternPath</code> class is a {@link PatternPath}
- * which registers for modifications in the repository which may affect the
- * result of calling the <code>getExpandedPaths</code> method. If also supports
- * for clients registering with instances of this class to be notified if such
- * an event happens.
- * <p>
- * To free the system from too much work, instances of this class are only
- * registered with the session's observation manager if at least one listener is
- * interested in notification to changes in the matched path list.
- *
- * @author Felix Meschberger
- * @version $Rev:$, $Date:$
- */
-/* package */ class DynamicPatternPath extends PatternPath
-        implements EventListener {
-
-    /** default logger */
-    private static final Log log =
-        LogFactory.getLog(DynamicPatternPath.class);
-
-    /** The list of registered listeners for this list */
-    private final ArrayList listeners = new ArrayList();
-
-    /**
-     * <code>true</code> if this instance is registered with the session's
-     * observation manager.
-     */
-    private boolean isRegistered;
-
-    /**
-     * Creates an instance of the <code>DynamicPatternPath</code> from
-     * a collection of path patterns.
-     *
-     * @param session The session to access the Repository to expand the paths
-     *      and to register as an event listener.
-     * @param pathPatterns The array of path patterns to add.
-     *
-     * @throws NullPointerException if the <code>pathPatterns</code> array is
-     *      <code>null</code>.
-     *
-     * @see PatternPath#PathPatternList(Session, String[])
-     */
-    /* package */ DynamicPatternPath(Session session, String[] pathPatterns) {
-        super(session, pathPatterns);
-    }
-
-    //---------- notification listener registration and interface -------------
-
-    /**
-     * Adds the given listener to the list of registered listeners. If the
-     * listener is already registered, it is not added a second time.
-     * <p>
-     * This is synchronized to prevent multiple parallel modification of the
-     * listeners list by mutliple threads.
-     *
-     * @param listener The listener to register. This must not be
-     *      <code>null</code>.
-     *
-     * @throws NullPointerException if the <code>listener</code> parameter is
-     *      <code>null</code>.
-     */
-    /* package */ synchronized void addListener(Listener listener) {
-
-        // check listener
-        if (listener == null) {
-            throw new NullPointerException("listener");
-        }
-
-        // make sure we get updated on changes to be able to notify listeners
-        // we are pretty sure our listeners list will not be empty :-)
-        if (!isRegistered) {
-            log.debug("addListener: Register with observation service");
-            registerEventListener();
-        }
-
-        // guarded add
-        if (!listeners.contains(listener)) {
-            log.debug("addListener: Listener " + listener);
-            listeners.add(listener);
-        } else {
-            log.info("addListener: Listener " + listener + " already added");
-        }
-    }
-
-    /**
-     * Removes the given listener from the list of registered listeners. If the
-     * listener is not registered, the list of registered listeners is not
-     * modified.
-     * <p>
-     * This is synchronized to prevent multiple parallel modification of the
-     * listeners list by mutliple threads.
-     *
-     * @param listener The listener to deregister. This must not be
-     *      <code>null</code>.
-     *
-     * @throws NullPointerException if the <code>listener</code> parameter is
-     *      <code>null</code>.
-     */
-    /* package */ synchronized void removeListener(Listener listener) {
-
-        // check listener
-        if (listener == null) {
-            throw new NullPointerException("listener");
-        }
-
-        // guarded removal
-        if (listeners.remove(listener)) {
-            log.debug("removeListener: Listener " + listener);
-        } else {
-            log.info("removeListener: Listener " + listener +  " not registered");
-        }
-
-        // deregister if no listener is registered anymore
-        // we are pretty sure to be registered
-        if (listeners.size() == 0) {
-            log.debug("removeListener: Deregister from observation service");
-            unregisterEventListener();
-        }
-    }
-
-    //---------- EventListener interface --------------------------------------
-
-    /**
-     * Handles the case where any change occurrs to the set of matched paths.
-     * This is, if either a newly created item matches or a previously matching
-     * item has been removed.
-     * <p>
-     * This method ignores <code>PROPERTY_CHANGED</code> events, as these
-     * events do not have an influence on the set of matched paths.
-     * <p>
-     * The events in the iterator are analyzed until any non-property-change
-     * event has an influence on the set of matched paths. As soon as such a
-     * path is encountered, the listeners are notified and this method
-     * terminates without further inspection of the events.
-     *
-     * @param events The iterator on the events being sent
-     */
-    public void onEvent(EventIterator events) {
-        // check whether any of the events match the pattern list. If so
-        // notify listeners on first match found and ignore rest for testing
-        while (events.hasNext()) {
-            Event event = events.nextEvent();
-
-            // ignore property modifications
-            if (event.getType() == Event.PROPERTY_CHANGED) {
-                continue;
-            }
-
-            try {
-                String path= event.getPath();
-                if (matchPath(path)) {
-                    log.debug("onEvent: Listener Notification due to " +
-                        path);
-                    notifyListeners();
-                    return;
-                }
-            } catch (RepositoryException re) {
-                log.info("onEvent: Cannot check events", re);
-            }
-        }
-    }
-
-    /**
-     * Registers this list object with the session's observation manager to get
-     * information on item updates.
-     */
-    private void registerEventListener() {
-
-        // make sure we are not registered yet
-        if (isRegistered) {
-            log.debug("registerModificationListener: Already registered");
-            return;
-        }
-
-        try {
-            ObservationManager om =
-                getSession().getWorkspace().getObservationManager();
-            om.addEventListener(this, 0xffff, "/", true, null, null, false);
-            isRegistered = true;
-        } catch (RepositoryException re) {
-            log.warn("registerModificationListener", re);
-        }
-    }
-
-    /**
-     * Unregisters this list object from the observation manager to not get
-     * information on item updates anymore. This method is called when no more
-     * listeners are interested on updates. This helps garbage collect this
-     * object in the case no reference is held to the list anymore. If no one
-     * is interested in changes anymore, we are not interested either, so we
-     * may as well unregister.
-     */
-    private void unregisterEventListener() {
-
-        // make sure we are registered
-        if (!isRegistered) {
-            log.debug("deregisterModificationListener: Not registered");
-            return;
-        }
-
-        try {
-            ObservationManager om =
-                getSession().getWorkspace().getObservationManager();
-            om.removeEventListener(this);
-            isRegistered = false;
-        } catch (RepositoryException re) {
-            log.warn("deregisterModificationListener", re);
-        }
-    }
-
-    /**
-     * Notifies all registered listeners on the change in the set of matched
-     * paths by calling their <code>pathListChanged</code> method.
-     */
-    private void notifyListeners() {
-        for (int i=0; i < listeners.size(); i++) {
-            Listener listener = (Listener) listeners.get(i);
-            log.debug("notifyListeners: Notifying listener " + listener);
-            try {
-                listener.pathChanged();
-            } catch (Exception e) {
-                log.warn("notifyListeners: Listener " + listener + " threw: " + e);
-                log.debug("dump", e);
-            }
-        }
-    }
-
-    /**
-     * The <code>PatternPath.Listener</code> interface may be implemented
-     * by interested classes to be notified as soon as the
-     * {@link PatternPath#getExpandedPaths} method will return a
-     * different result on the next invocation. This happens as soon as the set
-     * of paths to which the list of patterns matches would change.
-     */
-    /* package */ interface Listener {
-
-        /**
-         * This method is called if the listener is to be notified of an event
-         * resulting in the set of paths matched by the list of patterns to be
-         * different.
-         */
-        public void pathChanged();
-    }
-}
diff --git a/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/DynamicRepositoryClassLoader.java b/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/DynamicRepositoryClassLoader.java
deleted file mode 100644
index 330fbd5..0000000
--- a/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/DynamicRepositoryClassLoader.java
+++ /dev/null
@@ -1,645 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.classloader;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import javax.jcr.Property;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.observation.Event;
-import javax.jcr.observation.EventIterator;
-import javax.jcr.observation.EventListener;
-import javax.jcr.observation.ObservationManager;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.classloader.DynamicPatternPath.Listener;
-
-
-/**
- * The <code>DynamicRepositoryClassLoader</code> class extends the
- * {@link org.apache.jackrabbit.classloader.RepositoryClassLoader} and provides the
- * functionality to load classes and resources from the JCR Repository.
- * Additionally, this class supports the notion of getting 'dirty', which means,
- * that if a resource loaded through this class loader has been modified in the
- * Repository, this class loader marks itself dirty, which flag can get
- * retrieved. This helps the user of this class loader to decide on whether to
- * {@link #reinstantiate(Session, ClassLoader) reinstantiate} it or continue
- * using this class loader.
- * <p>
- * When a user of the class loader recognizes an instance to be dirty, it can
- * easily be reinstantiated with the {@link #reinstantiate} method. This
- * reinstantiation will also rebuild the internal real class path from the same
- * list of path patterns as was used to create the internal class path for the
- * original class loader. The resulting internal class path need not be the
- * same, though.
- * <p>
- * As an additional feature the class loaders provides the functionality for
- * complete reconfiguration of the list of path patterns defined at class loader
- * construction time through the {@link #reconfigure(String[])} method. This
- * reconfiguration replaces the internal class path with a new one built from
- * the new path list and also replaces that path list. Reinstantiating a
- * reconfigured class loader gets a class loader containing the same path list
- * as the original class loader had after reconfiguration. That is the original
- * configuration is lost. While reconfiguration is not able to throw away
- * classes already loaded, it will nevertheless mark the class loader dirty, if
- * any classes have already been loaded through it.
- * <p>
- * This class is not intended to be extended by clients.
- *
- * @author Felix Meschberger
- * @version $Rev:$, $Date$
- */
-public class DynamicRepositoryClassLoader extends RepositoryClassLoader
-        implements EventListener, Listener {
-
-    /** default log category */
-    private static final Log log =
-        LogFactory.getLog(DynamicRepositoryClassLoader.class);
-
-    /**
-     * Cache of resources used to check class loader expiry. The map is indexed
-     * by the paths of the expiry properties of the cached resources. This map
-     * is not complete in terms of resources which have been loaded through this
-     * class loader. That is for resources loaded through an archive class path
-     * entry, only one of those resources (the last one loaded) is kept in this
-     * cache, while the others are ignored.
-     *
-     * @see #onEvent(EventIterator)
-     * @see #findClassLoaderResource(String)
-     */
-    private Map modTimeCache;
-
-    /**
-     * Flag indicating whether there are loaded classes which have later been
-     * expired (e.g. invalidated or modified)
-     */
-    private boolean dirty;
-
-    /**
-     * The list of repositories added through either the {@link #addURL} or the
-     * {@link #addHandle} method.
-     */
-    private ClassPathEntry[] addedRepositories;
-
-    /**
-     * Creates a <code>DynamicRepositoryClassLoader</code> from a list of item
-     * path strings containing globbing pattens for the paths defining the
-     * class path.
-     *
-     * @param session The <code>Session</code> to use to access the class items.
-     * @param classPath The list of path strings making up the (initial) class
-     *      path of this class loader. The strings may contain globbing
-     *      characters which will be resolved to build the actual class path.
-     * @param parent The parent <code>ClassLoader</code>, which may be
-     *      <code>null</code>.
-     *
-     * @throws NullPointerException if either the session or the handles list
-     *      is <code>null</code>.
-     */
-    public DynamicRepositoryClassLoader(Session session,
-            String[] classPath, ClassLoader parent) {
-
-        // initialize the super class with an empty class path
-        super(session, new DynamicPatternPath(session, classPath), parent);
-
-        // set fields
-        dirty = false;
-        modTimeCache = new HashMap();
-
-        // register with observation service and path pattern list
-        registerModificationListener();
-
-        log.debug("DynamicRepositoryClassLoader: " + this + " ready");
-    }
-
-    /**
-     * Creates a <code>DynamicRepositoryClassLoader</code> with the same
-     * configuration as the given <code>DynamicRepositoryClassLoader</code>.
-     * This constructor is used by the {@link #reinstantiate} method.
-     * <p>
-     * Before returning from this constructor the <code>old</code> class loader
-     * is destroyed and may not be used any more.
-     *
-     * @param session The session to associate with this class loader.
-     * @param old The <code>DynamicRepositoryClassLoader</code> to copy the
-     *            cofiguration from.
-     * @param parent The parent <code>ClassLoader</code>, which may be
-     *            <code>null</code>.
-     */
-    private DynamicRepositoryClassLoader(Session session,
-            DynamicRepositoryClassLoader old, ClassLoader parent) {
-
-        // initialize the super class with an empty class path
-        super(session, old.getHandles(), parent);
-
-        // set the configuration and fields
-        dirty = false;
-        modTimeCache = new HashMap();
-
-        // create a repository from the handles - might get a different one
-        setRepository(resetClassPathEntries(old.getRepository()));
-        setAddedRepositories(resetClassPathEntries(old.getAddedRepositories()));
-        buildRepository();
-
-        // register with observation service and path pattern list
-        registerModificationListener();
-
-        // finally finalize the old class loader
-        old.destroy();
-
-        log.debug("DynamicRepositoryClassLoader: Copied " + old + ". Do not use " +
-                "that anymore");
-    }
-
-    /**
-     * Destroys this class loader. This process encompasses all steps needed
-     * to remove as much references to this class loader as possible.
-     * <p>
-     * <em>NOTE</em>: This method just clears all internal fields and especially
-     * the class path to render this class loader unusable.
-     * <p>
-     * This implementation does not throw any exceptions.
-     */
-    public void destroy() {
-        // we expect to be called only once, so we stop destroyal here
-        if (isDestroyed()) {
-            log.debug("Instance is already destroyed");
-            return;
-        }
-
-        // remove ourselves as listeners from other places
-        unregisterListener();
-
-        addedRepositories = null;
-
-        super.destroy();
-    }
-
-    //---------- reload support ------------------------------------------------
-
-    /**
-     * Checks whether this class loader already loaded the named resource and
-     * would load another version if it were instructed to do so. As a side
-     * effect the class loader sets itself dirty in this case.
-     * <p>
-     * Calling this method yields the same result as calling
-     * {@link #shouldReload(String, boolean)} with the <code>force</code>
-     * argument set to <code>false</code>.
-     *
-     * @param name The name of the resource to check.
-     *
-     * @return <code>true</code> if the resource is loaded and reloading would
-     *      take another version than currently loaded.
-     *
-     * @see #isDirty
-     */
-    public synchronized boolean shouldReload(String name) {
-        return shouldReload(name, false);
-    }
-
-    /**
-     * Checks whether this class loader already loaded the named resource and
-     * whether the class loader should be set dirty depending on the
-     * <code>force</code> argument. If the argument is <code>true</code>, the
-     * class loader is marked dirty and <code>true</code> is returned if the
-     * resource has been loaded, else the loaded resource is checked for expiry
-     * and the class loader is only set dirty if the loaded resource has
-     * expired.
-     *
-     * @param name The name of the resource to check.
-     * @param force <code>true</code> if the class loader should be marked dirty
-     *      if the resource is loaded, else the class loader is only marked
-     *      dirty if the resource is loaded and has expired.
-     *
-     * @return <code>true</code> if the resource is loaded and
-     *      <code>force</code> is <code>true</code> or if the resource has
-     *      expired. <code>true</code> is also returned if this class loader
-     *      has already been destroyed.
-     *
-     * @see #isDirty
-     */
-    public synchronized boolean shouldReload(String name, boolean force) {
-        if (isDestroyed()) {
-            log.warn("Classloader already destroyed, reload required");
-            return true;
-        }
-
-        ClassLoaderResource res = getCachedResource(name);
-        if (res != null) {
-            log.debug("shouldReload: Expiring cache entry " + res);
-            if (force) {
-                log.debug("shouldReload: Forced dirty flag");
-                dirty = true;
-                return true;
-            }
-
-            return expireResource(res);
-        }
-
-        return false;
-    }
-
-    /**
-     * Returns <code>true</code> if any of the loaded classes need reload. Also
-     * sets this class loader dirty. If the class loader is already set dirty
-     * or if this class loader has been destroyed before calling this method,
-     * it returns immediately.
-     *
-     * @return <code>true</code> if any class loader needs to be reinstantiated.
-     *
-     * @see #isDirty
-     */
-    public synchronized boolean shouldReload() {
-
-        // check whether we are already dirty
-        if (isDirty()) {
-            log.debug("shouldReload: Dirty, need reload");
-            return true;
-        }
-
-        // Check whether any class has changed
-        for (Iterator iter = getCachedResources(); iter.hasNext();) {
-            if (expireResource((ClassLoaderResource) iter.next())) {
-                log.debug("shouldReload: Found expired resource, need reload");
-                return true;
-            }
-        }
-
-        // No changes, no need to reload
-        log.debug("shouldReload: No expired resource found, no need to reload");
-        return false;
-    }
-
-    /**
-     * Returns whether the class loader is dirty. This can be the case if any
-     * of the {@link #shouldReload(String)} or {@link #shouldReload()}
-     * methods returned <code>true</code> or if a loaded class has been expired
-     * through the observation.
-     * <p>
-     * This method may also return <code>true</code> if the <code>Session</code>
-     * associated with this class loader is not valid anymore.
-     * <p>
-     * Finally the method always returns <code>true</code> if the class loader
-     * has already been destroyed. Note, however, that a destroyed class loader
-     * cannot be reinstantiated. See {@link #reinstantiate(Session, ClassLoader)}.
-     * <p>
-     * If the class loader is dirty, it should be reinstantiated through the
-     * {@link #reinstantiate} method.
-     *
-     * @return <code>true</code> if the class loader is dirty and needs
-     *      reinstantiation.
-     */
-    public boolean isDirty() {
-        return isDestroyed() || dirty || !getSession().isLive();
-    }
-
-    /**
-     * Reinstantiates this class loader. That is, a new ClassLoader with no
-     * loaded class is created with the same configuration as this class loader.
-     * <p>
-     * When the new class loader is returned, this class loader has been
-     * destroyed and may not be used any more.
-     *
-     * @param parent The parent <code>ClassLoader</code> for the reinstantiated
-     * 	    <code>DynamicRepositoryClassLoader</code>, which may be
-     *      <code>null</code>.
-     *
-     * @return a new instance with the same configuration as this class loader.
-     *
-     * @throws IllegalStateException if <code>this</code>
-     *      {@link DynamicRepositoryClassLoader} has already been destroyed
-     *      through the {@link #destroy()} method.
-     */
-    public DynamicRepositoryClassLoader reinstantiate(Session session, ClassLoader parent) {
-        log.debug("reinstantiate: Copying " + this + " with parent " + parent);
-
-        if (isDestroyed()) {
-            throw new IllegalStateException("Destroyed class loader cannot be recreated");
-        }
-
-        // create the new loader
-        DynamicRepositoryClassLoader newLoader =
-                new DynamicRepositoryClassLoader(session, this, parent);
-
-        // return the new loader
-        return newLoader;
-    }
-
-    //---------- URLClassLoader overwrites -------------------------------------
-
-    /**
-     * Reconfigures this class loader with the pattern list. That is the new
-     * pattern list completely replaces the current pattern list. This new
-     * pattern list will also be used later to configure the reinstantiated
-     * class loader.
-     * <p>
-     * If this class loader already has loaded classes using the old, replaced
-     * path list, it is set dirty.
-     * <p>
-     * If this class loader has already been destroyed, this method has no
-     * effect.
-     *
-     * @param classPath The list of path strings making up the (initial) class
-     *      path of this class loader. The strings may contain globbing
-     *      characters which will be resolved to build the actual class path.
-     */
-    public void reconfigure(String[] classPath) {
-        log.debug("reconfigure: Reconfiguring the with " + classPath);
-
-        // whether the loader is destroyed
-        if (isDestroyed()) {
-            log.warn("Cannot reconfigure this destroyed class loader");
-            return;
-        }
-
-        // deregister to old handles
-        ((DynamicPatternPath) getHandles()).removeListener(this);
-
-        // assign new handles and register
-        setHandles(new DynamicPatternPath(getSession(), classPath));
-        buildRepository();
-        ((DynamicPatternPath) getHandles()).addListener(this);
-
-        dirty = !hasLoadedResources();
-        log.debug("reconfigure: Class loader is dirty now: " +
-                (isDirty() ? "yes" : "no"));
-    }
-
-    //---------- RepositoryClassLoader overwrites -----------------------------
-
-    /**
-     * Calls the base class implementation to actually retrieve the resource.
-     * If the resource could be found and provides a non-<code>null</code>
-     * {@link ClassLoaderResource#getExpiryProperty() expiry property}, the
-     * resource is registered with an internal cache to check with when
-     * a repository modification is observed in {@link #onEvent(EventIterator)}.
-     *
-     * @param name The name of the resource to be found
-     *
-     * @return the {@link ClassLoaderResource} found for the name or
-     *      <code>null</code> if no such resource is available in the class
-     *      path.
-     *
-     * @throws NullPointerException If this class loader has already been
-     *      destroyed.
-     */
-    /* package */ ClassLoaderResource findClassLoaderResource(String name) {
-        // call the base class implementation to actually search for it
-        ClassLoaderResource res = super.findClassLoaderResource(name);
-
-        // if it could be found, we register it with the caches
-        if (res != null) {
-            // register the resource in the expiry map, if an appropriate
-            // property is available
-            Property prop = res.getExpiryProperty();
-            if (prop != null) {
-                try {
-                    modTimeCache.put(prop.getPath(), res);
-                } catch (RepositoryException re) {
-                    log.warn("Cannot register the resource " + res +
-                        " for expiry", re);
-                }
-            }
-        }
-
-        // and finally return the resource
-        return res;
-    }
-
-    /**
-     * Builds the repository list from the list of path patterns and appends
-     * the path entries from any added handles. This method may be used multiple
-     * times, each time replacing the currently defined repository list.
-     *
-     * @throws NullPointerException If this class loader has already been
-     *      destroyed.
-     */
-    protected synchronized void buildRepository() {
-        super.buildRepository();
-
-        // add added repositories
-        ClassPathEntry[] addedPath = getAddedRepositories();
-        if (addedPath != null && addedPath.length > 0) {
-            ClassPathEntry[] oldClassPath = getRepository();
-            ClassPathEntry[] newClassPath =
-                new ClassPathEntry[oldClassPath.length + addedPath.length];
-
-            System.arraycopy(oldClassPath, 0, newClassPath, 0,
-                oldClassPath.length);
-            System.arraycopy(addedPath, 0, newClassPath, oldClassPath.length,
-                addedPath.length);
-
-            setRepository(newClassPath);
-        }
-    }
-
-    //---------- ModificationListener interface -------------------------------
-
-    /**
-     * Handles a repository item modifcation events checking whether a class
-     * needs to be expired. As a side effect, this method sets the class loader
-     * dirty if a loaded class has been modified in the repository.
-     *
-     * @param events The iterator of repository events to be handled.
-     */
-    public void onEvent(EventIterator events) {
-        while (events.hasNext()) {
-            Event event = events.nextEvent();
-            try {
-                String path = event.getPath();
-                log.debug("onEvent: Item " + path + " has been modified, " +
-                        "checking with cache");
-
-                ClassLoaderResource resource =
-                    (ClassLoaderResource) modTimeCache.get(path);
-                if (resource != null) {
-                    log.debug("pageModified: Expiring cache entry "+ resource);
-                    expireResource(resource);
-                } else {
-                    // might be in not-found cache - remove from there
-                    if (event.getType() == Event.NODE_ADDED ||
-                            event.getType() == Event.PROPERTY_ADDED) {
-                        log.debug("pageModified: Clearing not-found cache " +
-                                "for possible new class");
-                        cleanCache();
-                    }
-                }
-
-            } catch (RepositoryException re) {
-                //
-            }
-        }
-    }
-
-    //----------- PatternPath.Listener interface -------------------------
-
-    /**
-     * Handles modified matched path set by setting the class loader dirty.
-     * The internal class path is only rebuilt when the class loader is
-     * reinstantiated.
-     */
-    public void pathChanged() {
-        log.debug("handleListChanged: The path list has changed");
-        buildRepository();
-        dirty = true;
-    }
-
-    //----------- Object overwrite ---------------------------------------------
-
-    /**
-     * Returns a string representation of this class loader.
-     */
-    public String toString() {
-        if (isDestroyed()) {
-            return super.toString();
-        }
-
-        StringBuffer buf = new StringBuffer(super.toString());
-        buf.append(", dirty: ");
-        buf.append(isDirty());
-        return buf.toString();
-    }
-
-    //---------- internal ------------------------------------------------------
-
-    /**
-     * Sets the list of class path entries to add to the class path after
-     * reconfiguration or reinstantiation.
-     *
-     * @param addedRepositories The list of class path entries to keep for
-     *      readdition.
-     */
-    protected void setAddedRepositories(ClassPathEntry[] addedRepositories) {
-        this.addedRepositories = addedRepositories;
-    }
-
-    /**
-     * Returns the list of added class path entries to readd them to the class
-     * path after reconfiguring the class loader.
-     */
-    protected ClassPathEntry[] getAddedRepositories() {
-        return addedRepositories;
-    }
-
-    /**
-     * Adds the class path entry to the current class path list. If the class
-     * loader has already been destroyed, this method creates a single entry
-     * class path list with the new class path entry.
-     * <p>
-     * Besides adding the entry to the current class path, it is also added to
-     * the list to be readded after reconfiguration and/or reinstantiation.
-     *
-     * @see #getAddedRepositories()
-     * @see #setAddedRepositories(ClassPathEntry[])
-     */
-    protected void addClassPathEntry(ClassPathEntry cpe) {
-        super.addClassPathEntry(cpe);
-
-        // add the repsitory to the list of added repositories
-        ClassPathEntry[] oldClassPath = getAddedRepositories();
-        ClassPathEntry[] newClassPath = addClassPathEntry(oldClassPath, cpe);
-        setAddedRepositories(newClassPath);
-    }
-
-    /**
-     * Registers this class loader with the observation service to get
-     * information on page updates in the class path and to the path
-     * pattern list to get class path updates.
-     *
-     * @throws NullPointerException if this class loader has already been
-     *      destroyed.
-     */
-    private final void registerModificationListener() {
-        ((DynamicPatternPath) getHandles()).addListener(this);
-
-        log.debug("registerModificationListener: Registering to the observation service");
-        try {
-            ObservationManager om = getSession().getWorkspace().getObservationManager();
-            om.addEventListener(this, 255, "/", true, null, null, false);
-        } catch (RepositoryException re) {
-            log.error("registerModificationListener: Cannot register " +
-                this + " with observation manager", re);
-        }
-    }
-
-    /**
-     * Removes this instances registrations from the observation service and
-     * the path pattern list.
-     *
-     * @throws NullPointerException if this class loader has already been
-     *      destroyed.
-     */
-    private final void unregisterListener() {
-        ((DynamicPatternPath) getHandles()).removeListener(this);
-
-        log.debug("registerModificationListener: Deregistering from the observation service");
-        try {
-            ObservationManager om = getSession().getWorkspace().getObservationManager();
-            om.removeEventListener(this);
-        } catch (RepositoryException re) {
-            log.error("unregisterListener: Cannot unregister " +
-                this + " from observation manager", re);
-        }
-    }
-
-    /**
-     * Checks whether the page backing the resource has been updated with a
-     * version, such that this new version would be used to access the resource.
-     * In this case the resource has expired and the class loader needs to be
-     * set dirty.
-     *
-     * @param resource The <code>ClassLoaderResource</code> to check for
-     *      expiry.
-     */
-    private boolean expireResource(ClassLoaderResource resource) {
-
-        // check whether the resource is expired (only if a class has been loaded)
-        boolean exp = resource.getLoadedClass() != null && resource.isExpired();
-
-        // update dirty flag accordingly
-        dirty |= exp;
-        log.debug("expireResource: Loader dirty: " + isDirty());
-
-        // return the expiry status
-        return exp;
-    }
-
-    /**
-     * Returns the list of classpath entries after resetting each of them.
-     *
-     * @param list The list of {@link ClassPathEntry}s to reset
-     *
-     * @return The list of reset {@link ClassPathEntry}s.
-     */
-    private static ClassPathEntry[] resetClassPathEntries(
-            ClassPathEntry[] oldClassPath) {
-        if (oldClassPath != null) {
-            for (int i=0; i < oldClassPath.length; i++) {
-                ClassPathEntry entry = oldClassPath[i];
-                log.debug("resetClassPathEntries: Cloning " + entry);
-                oldClassPath[i] = entry.copy();
-            }
-        } else {
-            log.debug("resetClassPathEntries: No list to reset");
-        }
-        return oldClassPath;
-    }
-}
\ No newline at end of file
diff --git a/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/ExpandingArchiveClassPathEntry.java b/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/ExpandingArchiveClassPathEntry.java
deleted file mode 100644
index 33619e5..0000000
--- a/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/ExpandingArchiveClassPathEntry.java
+++ /dev/null
@@ -1,458 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.classloader;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.Calendar;
-import java.util.StringTokenizer;
-import java.util.jar.Manifest;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipInputStream;
-
-import javax.jcr.Item;
-import javax.jcr.Node;
-import javax.jcr.Property;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.Workspace;
-import javax.jcr.nodetype.NoSuchNodeTypeException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * The <code>ExpandingArchiveClassPathEntry</code> extends the
- * {@link org.apache.jackrabbit.classloader.ArchiveClassPathEntry} class with support
- * to automatically expand the archive (JAR or ZIP) into the repository
- * below the path entry node. The path used to construct the instance is the
- * path of an item resolving to a property containing the jar archive to access.
- *
- * @author Felix Meschberger
- * @version $Rev:$, $Date$
- *
- * @see org.apache.jackrabbit.classloader.ArchiveClassPathEntry
- * @see org.apache.jackrabbit.classloader.ClassPathEntry
- */
-/* package */ class ExpandingArchiveClassPathEntry extends ArchiveClassPathEntry {
-
-    /** The name of the node type required to expand the archive */
-    public static final String TYPE_JARFILE = "rep:jarFile";
-
-    /** The name of the child node taking the expanded archive */
-    public static final String NODE_JARCONTENTS = "rep:jarContents";
-
-    /**
-     * The name of the property taking the time at which the archive was
-     * expanded
-     */
-    public static final String PROP_EXPAND_DATE = "rep:jarExpanded";
-
-    /** Default logger */
-    private static final Log log =
-        LogFactory.getLog(ExpandingArchiveClassPathEntry.class);
-
-    /** The node of the unpacked JAR contents */
-    private Node jarContents;
-
-    /**
-     * Creates an instance of the <code>ExpandingArchiveClassPathEntry</code>
-     * class.
-     *
-     * @param prop The <code>Property</code> containing the archive and
-     *      the session used to access the repository.
-     * @param path The original class path entry leading to the creation of
-     *      this instance. This is not necessairily the same path as the
-     *      property's path if the property was found through the primary
-     *      item chain.
-     *
-     * @throws RepositoryException If an error occurrs retrieving the session
-     *      from the property.
-     */
-    ExpandingArchiveClassPathEntry(Property prop, String path)
-            throws RepositoryException {
-        super(prop, path);
-    }
-
-    /**
-     * Clones the indicated <code>ExpandingArchiveClassPathEntry</code> object
-     * by taking over its path, session and property.
-     *
-     * @param base The base <code>ExpandingArchiveClassPathEntry</code> entry
-     *      to clone.
-     *
-     * @see ClassPathEntry#ClassPathEntry(ClassPathEntry)
-     */
-    private ExpandingArchiveClassPathEntry(ExpandingArchiveClassPathEntry base) {
-        super(base);
-    }
-
-    /**
-     * Returns a {@link ClassLoaderResource} for the named resource if it
-     * can be found in the archive identified by the path given at
-     * construction time. Note that if the archive property would exist but is
-     * not readable by the current session, no resource is returned.
-     *
-     * @param name The name of the resource to return. If the resource would
-     *      be a class the name must already be modified to denote a valid
-     *      path, that is dots replaced by slashes and the <code>.class</code>
-     *      extension attached.
-     *
-     * @return The {@link ClassLoaderResource} identified by the name or
-     *      <code>null</code> if no resource is found for that name.
-     */
-    public ClassLoaderResource getResource(final String name) {
-
-        try {
-            // find the resource for the name in the expanded archive contents
-            Node jarContents = getJarContents();
-            Item resItem = null;
-            if (jarContents.hasNode(name)) {
-                resItem = jarContents.getNode(name);
-            } else if (jarContents.hasProperty(name)) {
-                resItem = jarContents.getProperty(name);
-            }
-
-            // if the name resolved to an item, resolve the item to a
-            // single-valued non-reference property
-            Property resProp = (resItem != null)
-                    ? Util.getProperty(resItem)
-                    : null;
-
-            // if found create the resource to return
-            if (resProp != null) {
-                return new ClassLoaderResource(this, name, resProp) {
-                    public URL getURL() {
-                        return ExpandingArchiveClassPathEntry.this.getURL(getName());
-                    }
-
-                    public URL getCodeSourceURL() {
-                        return ExpandingArchiveClassPathEntry.this.getCodeSourceURL();
-                    }
-
-                    public Manifest getManifest() {
-                        return ExpandingArchiveClassPathEntry.this.getManifest();
-                    }
-
-                    protected Property getExpiryProperty() {
-                        return ExpandingArchiveClassPathEntry.this.getProperty();
-                    }
-                };
-            }
-
-            log.debug("getResource: resource " + name + " not found"
-                + " in archive " + path);
-
-        } catch (RepositoryException re) {
-
-            log.warn("getResource: problem accessing the archive " + path
-                + " for " + name + ": " + re.toString());
-
-        }
-        // invariant : not found or problem accessing the archive
-
-        return null;
-    }
-
-    /**
-     * Returns a <code>ClassPathEntry</code> with the same configuration as
-     * this <code>ClassPathEntry</code>.
-     * <p>
-     * The <code>ExpandingArchiveClassPathEntry</code> class has internal state.
-     * Therefore a new instance is created from the unmodifiable configuration
-     * of this instance.
-     */
-    ClassPathEntry copy() {
-        return new ExpandingArchiveClassPathEntry(this);
-    }
-
-    //----------- internal helper to find the entry ------------------------
-
-    /**
-     * Returns the root node of the expanded archive. If the archive's node
-     * does not contain the expanded archive, it is expanded on demand. If the
-     * archive has already been expanded, it is checked whether it is up to
-     * date and expanded again if not.
-     *
-     * @throws RepositoryException if an error occurrs expanding the archive
-     *      into the repository.
-     */
-    private Node getJarContents() throws RepositoryException {
-        if (jarContents == null) {
-            Node jarNode = null; // the node containing the jar file
-            Node jarRoot = null; // the root node of the expanded contents
-            try {
-                Item jarItem = session.getItem(getPath());
-                jarNode = (jarItem.isNode()) ? (Node) jarItem : jarItem.getParent();
-
-                // if the jar been unpacked once, check for updated jar file,
-                // which must be unpacked
-                if (jarNode.isNodeType(TYPE_JARFILE)) {
-                    long lastMod = Util.getLastModificationTime(getProperty());
-                    long expanded =
-                        jarNode.getProperty(PROP_EXPAND_DATE).getLong();
-
-                    // get the content, remove if outdated or use if ok
-                    jarRoot = jarNode.getNode(NODE_JARCONTENTS);
-
-                    // if expanded content is outdated, remove it
-                    if (lastMod <= expanded) {
-                        jarRoot.remove();
-                        jarRoot = null; // have to unpack below
-                    }
-
-                } else if (!jarNode.canAddMixin(TYPE_JARFILE)) {
-                    // this is actually a problem, because I expect to be able
-                    // to add the mixin node type due to checkExpandArchives
-                    // having returned true earlier
-                    throw new RepositoryException(
-                        "Cannot unpack JAR file contents into "
-                            + jarNode.getPath());
-
-                } else {
-                    jarNode.addMixin(TYPE_JARFILE);
-                    jarNode.setProperty(PROP_EXPAND_DATE, Calendar.getInstance());
-                }
-
-                // if the content root is not set, unpack and save
-                if (jarRoot == null) {
-                    jarRoot = jarNode.addNode(NODE_JARCONTENTS, "nt:folder");
-                    unpack(jarRoot);
-                    jarNode.save();
-                }
-
-            } finally {
-
-                // rollback changes on the jar node in case of problems
-                if (jarNode != null && jarNode.isModified()) {
-                    // rollback incomplete modifications
-                    log.warn("Rolling back unsaved changes on JAR node "
-                        + getPath());
-
-                    try {
-                        jarNode.refresh(false);
-                    } catch (RepositoryException re) {
-                        log.warn("Cannot rollback changes after failure to " +
-                                "expand " + getPath(), re);
-                    }
-                }
-            }
-
-            jarContents = jarRoot;
-        }
-
-        return jarContents;
-    }
-
-    /**
-     * Expands the archive stored in the property of this class path entry into
-     * the repositroy below the given <code>jarRoot</code> node.
-     * <p>
-     * This method leaves the subtree at and below <code>jarRoot</code> unsaved.
-     * It is the task of the caller to save or rollback as appropriate.
-     *
-     * @param jarRoot The <code>Node</code> below which the archive is to be
-     *      unpacked.
-     *
-     * @throws RepositoryException If an error occurrs creating the item
-     *      structure to unpack the archive or if an error occurrs reading
-     *      the archive.
-     */
-    private void unpack(Node jarRoot) throws RepositoryException {
-
-        ZipInputStream zin = null;
-        try {
-            zin = new ZipInputStream(getProperty().getStream());
-            ZipEntry entry = zin.getNextEntry();
-            while (entry != null) {
-                if (entry.isDirectory()) {
-                    unpackFolder(jarRoot, entry.getName());
-                } else {
-                    unpackFile(jarRoot, entry, zin);
-                }
-                entry = zin.getNextEntry();
-            }
-        } catch (IOException ioe) {
-            throw new RepositoryException(
-                "Problem reading JAR contents of " + getPath(), ioe);
-        } finally {
-            // close the JAR stream if open
-            if (zin != null) {
-                try {
-                    zin.close();
-                } catch (IOException ignore) {}
-            }
-        }
-    }
-
-    /**
-     * Makes sure a node exists at the <code>path</code> relative to
-     * <code>root</code>. In other words, this method returns the node
-     * <code>root.getNode(path)</code>, creating child nodes as required. Newly
-     * created nodes are created with node type <code>nt:folder</code>.
-     * <p>
-     * If intermediate nodes or the actual node required already exist, they
-     * must be typed such, that they may either accept child node creations
-     * of type <code>nt:file</code> or <code>nt:folder</code>.
-     *
-     * @param root The <code>Node</code> relative to which a node representing
-     *      a folder is to created if required.
-     * @param path The path relative to <code>root</code> of the folder to
-     *      ensure.
-     *
-     * @return The <code>Node</code> representing the folder below
-     *      <code>root</code>.
-     *
-     * @throws RepositoryException If an error occurrs accessing the repository
-     *      or creating missing node(s).
-     */
-    private Node unpackFolder(Node root, String path) throws RepositoryException {
-
-        // remove trailing slash
-        while (path.endsWith("/")) {
-            path = path.substring(0, path.length()-1);
-        }
-
-        // quick check if the folder already exists
-        if (root.hasNode(path)) {
-            return root.getNode(path);
-        }
-
-        // go down and create the path
-        StringTokenizer tokener = new StringTokenizer(path, "/");
-        while (tokener.hasMoreTokens()) {
-            String label = tokener.nextToken();
-            if (root.hasNode(label)) {
-                root = root.getNode(label);
-            } else {
-                root = root.addNode(label, "nt:folder");
-            }
-        }
-
-        // return the final node
-        return root;
-    }
-
-    /**
-     * Creates a <code>nt:file</code> node with the path
-     * <code>entry.getName()</code> relative to the <code>root</code> node. The
-     * contents of the <code>jcr:content/jcr:data</code> property of the file
-     * node is retrieved from <code>ins</code>.
-     * <p>
-     * The <code>jcr:content/jcr:lastModified</code> property is set to the
-     * value of the <code>time</code> field of the <code>entry</code>. The
-     * <code>jcr:content/jcr:mimeType</code> property is set to a best-effort
-     * guess of the content type of the entry. To guess the content type, the
-     * <code>java.net.URLConnection.guessContentType(String)</code> method
-     * is called. If this results in no content type, the default
-     * <code>application/octet-stream</code> is set.
-     *
-     * @param root The node relative to which the <code>nt:file</code> node
-     *      is created.
-     * @param entry The <code>ZipEntry</code> providing information on the
-     *      file to be created. Namely the <code>name</code> and
-     *      <code>time</code> fields are used.
-     * @param ins The <code>InputStream</code> providing the data to be written
-     *      to the <code>jcr:content/jcr:data</code> property.
-     *
-     * @throws RepositoryException If an error occurrs creating and filling
-     *      the <code>nt:file</code> node.
-     */
-    private void unpackFile(Node root, ZipEntry entry, InputStream ins) throws RepositoryException {
-        int slash = entry.getName().lastIndexOf('/');
-        String label = entry.getName().substring(slash+1);
-        Node parent = (slash <= 0)
-                ? root
-                : unpackFolder(root, entry.getName().substring(0, slash));
-
-        // remove existing node (and all children by the way !!)
-        if (parent.hasNode(label)) {
-            parent.getNode(label).remove();
-        }
-
-        // prepare property values
-        Calendar lastModified = Calendar.getInstance();
-        lastModified.setTimeInMillis(entry.getTime());
-        String mimeType = URLConnection.guessContentTypeFromName(label);
-        if (mimeType == null) {
-            mimeType = "application/octet-stream";
-        }
-
-        // create entry nodes
-        Node ntFile = parent.addNode(label, "nt:file");
-        Node content = ntFile.addNode("jcr:content", "nt:resource");
-        content.setProperty("jcr:mimeType", mimeType);
-        content.setProperty("jcr:data", ins);
-        content.setProperty("jcr:lastModified", lastModified);
-    }
-
-    /**
-     * Checks whether it is possible to use this class for archive class path
-     * entries in the workspace (and repository) to which the <code>session</code>
-     * provides access.
-     * <p>
-     * This method works as follows. If the node type <code>rep:jarFile</code>
-     * is defined in the session's repository, <code>true</code> is immediately
-     * returned. If an error checking for the node type, <code>false</code> is
-     * immediately returned.
-     * <p>
-     * If the node type is not defined, the
-     * {@link NodeTypeSupport#registerNodeType(Workspace)} method is called
-     * to register the node type. Any errors occurring while calling or
-     * executing this method is logged an <code>false</code> is returned.
-     * Otherwise, if node type registration succeeded, <code>true</code> is
-     * returned.
-     * <p>
-     * This method is synchronized such that two paralell threads do not try
-     * to create the node, which might yield wrong negatives.
-     *
-     * @param session The <code>Session</code> providing access to the
-     *      repository.
-     *
-     * @return <code>true</code> if this class can be used to handle archive
-     *      class path entries. See above for a description of the test used.
-     */
-    /* package */ synchronized static boolean canExpandArchives(Session session) {
-
-        // quick check for the node type, succeed if defined
-        try {
-            session.getWorkspace().getNodeTypeManager().getNodeType(TYPE_JARFILE);
-            log.debug("Required node type exists, can expand archives");
-            return true;
-        } catch (NoSuchNodeTypeException nst) {
-            log.debug("Required node types does not exist, try to define");
-        } catch (RepositoryException re) {
-            log.info("Cannot check for required node type, cannot expand " +
-                    "archives", re);
-            return false;
-        }
-
-        try {
-            Workspace workspace = session.getWorkspace();
-            return NodeTypeSupport.registerNodeType(workspace);
-        } catch (Throwable t) {
-            // Prevent anything from hapening if node type registration fails
-            // due to missing libraries or other errors
-            log.info("Error registering node type", t);
-        }
-
-        // fallback to failure
-        return false;
-    }
-}
\ No newline at end of file
diff --git a/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/NodeTypeSupport.java b/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/NodeTypeSupport.java
deleted file mode 100644
index 0fa0625..0000000
--- a/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/NodeTypeSupport.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.classloader;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.UnsupportedEncodingException;
-import java.util.List;
-
-import javax.jcr.RepositoryException;
-import javax.jcr.Workspace;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.core.nodetype.InvalidNodeTypeDefException;
-import org.apache.jackrabbit.core.nodetype.NodeTypeManagerImpl;
-import org.apache.jackrabbit.core.nodetype.NodeTypeRegistry;
-import org.apache.jackrabbit.core.nodetype.compact.CompactNodeTypeDefReader;
-import org.apache.jackrabbit.core.nodetype.compact.ParseException;
-
-/**
- * The <code>NodeTypeSupport</code> contains a single utility method
- * {@link #registerNodeType(Workspace)} to register the required mixin node
- * type <code>rep:jarFile</code> with the repository.
- * <p>
- * If the class loader is not used on a Jackrabbit based repository, loading
- * this class or calling the {@link #registerNodeType(Workspace)} methods may
- * fail with link errors.
- *
- * @author Felix Meschberger
- * @version $Rev:$, $Date:$
- */
-/* package */ class NodeTypeSupport {
-
-    /** Default log */
-    private static final Log log = LogFactory.getLog(NodeTypeSupport.class);
-
-    /**
-     * The name of the class path resource containing the node type definition
-     * file used by the {@link #registerNodeType(Workspace)} method to register
-     * the required mixin node type (value is "type.cnd").
-     */
-    private static final String TYPE_FILE = "type.cnd";
-
-    /**
-     * The encoding used to read the node type definition file (value is
-     * "ISO-8859-1").
-     */
-    private static final String ENCODING = "ISO-8859-1";
-
-    /**
-     * Registers the required node type (<code>rep:jarFile</code>) with the
-     * node type manager available from the given <code>workspace</code>.
-     * <p>
-     * The <code>NodeTypeManager</code> returned by the <code>workspace</code>
-     * is expected to be of type
-     * <code>org.apache.jackrabbit.core.nodetype.NodeTypeManagerImpl</code> for
-     * the node type registration to succeed.
-     * <p>
-     * This method is not synchronized. It is up to the calling method to
-     * prevent paralell execution.
-     *
-     * @param workspace The <code>Workspace</code> providing the node type
-     *      manager through which the node type is to be registered.
-     *
-     * @return <code>true</code> if this class can be used to handle archive
-     *      class path entries. See above for a description of the test used.
-     */
-    /* package */ static boolean registerNodeType(Workspace workspace) {
-
-        // Access the node type definition file, "fail" if not available
-        InputStream ins = NodeTypeSupport.class.getResourceAsStream(TYPE_FILE);
-        if (ins == null) {
-            log.error("Node type definition file " + TYPE_FILE +
-                " not in class path. Cannot define required node type");
-            return false;
-        }
-
-        // Wrap the stream with a reader
-        InputStreamReader reader = null;
-        try {
-            reader = new InputStreamReader(ins, ENCODING);
-        } catch (UnsupportedEncodingException uee) {
-            log.warn("Required Encoding " + ENCODING + " not supported, " +
-                    "using platform default encoding", uee);
-
-            reader = new InputStreamReader(ins);
-        }
-
-        try {
-            // Create a CompactNodeTypeDefReader
-            CompactNodeTypeDefReader cndReader =
-                new CompactNodeTypeDefReader(reader, TYPE_FILE);
-
-            // Get the List of NodeTypeDef objects
-            List ntdList = cndReader.getNodeTypeDefs();
-
-            // Get the NodeTypeManager from the Workspace.
-            // Note that it must be cast from the generic JCR NodeTypeManager
-            // to the Jackrabbit-specific implementation.
-            NodeTypeManagerImpl ntmgr =
-                (NodeTypeManagerImpl) workspace.getNodeTypeManager();
-
-            // Acquire the NodeTypeRegistry
-            NodeTypeRegistry ntreg = ntmgr.getNodeTypeRegistry();
-
-            // register the node types from the file in a batch
-            ntreg.registerNodeTypes(ntdList);
-
-            // get here and succeed
-            return true;
-
-        } catch (ParseException pe) {
-            log.error("Unexpected failure to parse compact node defintion " + TYPE_FILE, pe);
-
-        } catch (InvalidNodeTypeDefException ie) {
-            log.error("Cannot define required node type", ie);
-
-        } catch (RepositoryException re) {
-            log.error("General problem accessing the repository", re);
-
-        } catch (ClassCastException cce) {
-            log.error("Unexpected object type encountered", cce);
-
-        } finally {
-            // make sure the reader is closed - expect to be non-null here !
-            try {
-                reader.close();
-            } catch (IOException ioe) {
-                // ignore
-            }
-        }
-
-        // fall back to failure
-        return false;
-    }
-}
diff --git a/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/PatternPath.java b/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/PatternPath.java
deleted file mode 100644
index 11fb02c..0000000
--- a/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/PatternPath.java
+++ /dev/null
@@ -1,344 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.classloader;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.StringTokenizer;
-
-import javax.jcr.Item;
-import javax.jcr.Node;
-import javax.jcr.NodeIterator;
-import javax.jcr.PropertyIterator;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.observation.Event;
-import javax.jcr.observation.EventIterator;
-import javax.jcr.observation.EventListener;
-import javax.jcr.observation.ObservationManager;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.util.ChildrenCollectorFilter;
-import org.apache.jackrabbit.util.Text;
-
-/**
- * The <code>PatternPath</code> implements a list of repository item path
- * patterns providing an iterator on the expanded paths. The list of patterns is
- * immutably configured from an array of strings.
- * <p>
- * While the original list of path patterns may be retrieved for informational
- * purposes by calling the {@link #getPath()} method, the primary contents of
- * instances of this class are the expanded paths accessible by calling the
- * {@link #getExpandedPaths()} method.
- * <p>
- * Please note that though this list is immutable there is intentionally no
- * guarantee that all invocations of the {@link #getExpandedPaths} method
- * return the same contents as the patterns contained in the list may expand to
- * different paths for each invocation of that method.
- * <p>
- * Each entry in the pattern list is a path whose segments conform to the
- * pattern syntax defined for the <code>Node.getNodes(String)</code> method.
- * The pattern may be a full name or a partial name with one or more wildcard
- * characters ("*"), or a disjunction (using the "|" character to represent
- * logical <i>OR</i>) of these. For example,
- * <blockquote><code>"jcr:*|foo:bar"</code></blockquote>
- * would match <code>"foo:bar"</code>, but also <code>"jcr:whatever"</code>.
- * <p>
- * The EBNF for pattern is:
- * <pre>
- * namePattern ::= disjunct {'|' disjunct}
- * disjunct ::= name [':' name]
- * name ::= '*' |
- *          ['*'] fragment {'*' fragment}['*']
- * fragment ::= char {char}
- * char ::= nonspace | ' '
- * nonspace ::= (* Any Unicode character except:
- *               '/', ':', '[', ']', '*',
- *               ''', '"', '|' or any whitespace
- *               character *)
- * </pre>
- *
- * @author Felix Meschberger
- * @version $Rev:$, $Date:$
- */
-/* package */ class PatternPath {
-
-    /** default logger */
-    private static final Log log = LogFactory.getLog(PatternPath.class);
-
-    /** The session to access the repository */
-    private final Session session;
-
-    /** The list of path patterns */
-    private final String[] patterns;
-
-    /**
-     * Creates a <code>PatternPath</code> containing the elements of the
-     * string array. Each entry in the array which is either empty or
-     * <code>null</code> is ignored and not added to the list. If the array
-     * is empty or only contains empty or <code>null</code> elements, the
-     * resulting list will consequently be empty.
-     *
-     * @param session The session to access the Repository to expand the paths
-     *      and to register as an event listener.
-     * @param pathPatterns The array of path patterns to add.
-     *
-     * @throws NullPointerException if the <code>pathPatterns</code> array or
-     *      the <code>session</code> is <code>null</code>.
-     */
-    /* package */ PatternPath(Session session, String[] pathPatterns) {
-
-        // check session
-        if (session == null) {
-            throw new NullPointerException("session");
-        }
-
-        // prepare the pattern list, excluding null/empty entries
-        List patternList = new ArrayList();
-        for (int i=0; i < pathPatterns.length; i++) {
-            addChecked(patternList, pathPatterns[i]);
-        }
-        patterns =
-            (String[]) patternList.toArray(new String[patternList.size()]);
-
-        this.session = session;
-    }
-
-    /**
-     * Returns the session from which this instance has been constructed.
-     */
-    /* package */ Session getSession() {
-        return session;
-    }
-
-    /**
-     * Returns a copy of the list of path patterns from which this instance has
-     * been constructed.
-     */
-    /* package */  String[] getPath() {
-        return (String[]) patterns.clone();
-    }
-
-    /**
-     * Returns the list of expanded paths matching the list of patterns. This
-     * list is guaranteed to only return existing items.
-     * <p>
-     * Each invocation of this method expands the pattern anew and returns a
-     * new list instance.
-     *
-     * @return The list of paths matching the patterns. If the pattern list is
-     *      empty or if no real paths match for any entry in the list, the
-     *      returned list is empty.
-     *
-     * @throws RepositoryException if an error occurrs expanding the path
-     *      pattern list.
-     */
-    /* package */ List getExpandedPaths() throws RepositoryException {
-        List result = new ArrayList(patterns.length);
-        Node root = session.getRootNode();
-
-        for (int i=0; i < patterns.length; i++) {
-            String entry = patterns[i];
-
-            if (entry.indexOf('*') >= 0 || entry.indexOf('|') >= 0) {
-
-                scan(root, entry, result);
-
-            } else {
-                // add path without pattern characters without further
-                // checking. This allows adding paths which do not exist yet.
-                result.add(entry);
-            }
-
-        }
-
-        return result;
-    }
-
-    //---------- Object overwrite ----------------------------------------------
-
-    /**
-     * Returns <code>true</code> if this object equals the other object. This
-     * implementation only returns true if the other object is the same as this
-     * object.
-     * <p>
-     * The difference to the base class implementation is, that we only accept
-     * equality if the other object is the same than this object. This is
-     * actually the same implementation as the original <code>Object.equals</code>
-     * implementation.
-     *
-     * @param o The other object to compare to.
-     *
-     * @return <code>true</code> if the other object is the same as this.
-     */
-    public boolean equals(Object o) {
-        return o == this;
-    }
-
-    /**
-     * Returns a hashcode for this instance. This is currently the hash code
-     * returned by the parent implementation. While it does not violate the
-     * contract to not change the <code>hashCode()</code> implementation but
-     * to change the implementation of the {@link #equals} method, I think this
-     * is ok, because our implementation of the {@link #equals} method is just
-     * more specific than the base class implementation, which also allows
-     * the other object to be a list with the same contents.
-     *
-     * @return The hash code returned by the base class implementation.
-     */
-    public int hashCode() {
-        return super.hashCode();
-    }
-
-    /**
-     * Returns a string representation of this instance. This is actually the
-     * result of the string representation of the List, this actually is,
-     * prefixed with the name of this class.
-     *
-     * @return The string representation of this instance.
-     */
-    public String toString() {
-        StringBuffer buf = new StringBuffer("PatternPath: [");
-        for (int i=0; i < patterns.length; i++) {
-            if (i != 0) buf.append(", ");
-            buf.append(patterns[i]);
-        }
-        buf.append("]");
-        return buf.toString();
-    }
-
-    //---------- internal ------------------------------------------------------
-
-    /**
-     * Adds the string to the list of patterns, if neither empty nor
-     * <code>null</code>. If the string has one or more trailing slashes
-     * (<em>/</em>) they are removed before adding the string.
-     */
-    private void addChecked(List patternList, String pattern) {
-        if (pattern == null || pattern.length() == 0) {
-            log.debug("addChecked: Not adding null/empty pattern");
-        } else {
-
-            // remove all trailing slashes
-            while (pattern.endsWith("/") && pattern.length() > 1) {
-                pattern = pattern.substring(0, pattern.length()-1);
-            }
-
-            log.debug("addChecked: Adding " + pattern);
-            patternList.add(pattern);
-        }
-    }
-
-    //---------- Path expansion -----------------------------------------------
-
-    /**
-     * Finds the paths of all nodes and properties matching the pattern below
-     * the <code>root</code> node.
-     *
-     * @param root The root node of the subtree to match against the path
-     *      pattern.
-     * @param pathPattern The path pattern to use to find matching nodes.
-     * @param gather The list into which the paths of matching child items
-     *      are added.
-     */
-    private static void scan(Node root, String pathPattern, List gather)
-            throws RepositoryException {
-
-        // initial list of candidates is the root node
-        List candidates = new ArrayList();
-        candidates.add(root);
-
-        StringTokenizer patterns = new StringTokenizer(pathPattern, "/");
-        boolean moreTokens = patterns.hasMoreTokens();
-        while (moreTokens) {
-            String pattern = patterns.nextToken();
-            moreTokens = patterns.hasMoreTokens();
-
-            // new candidates are the children of the current candidates list
-            // matching the current pattern
-            List newCandidates = new ArrayList();
-            for (Iterator ci=candidates.iterator(); ci.hasNext(); ) {
-                Node current = (Node) ci.next();
-                for (NodeIterator ni=current.getNodes(pattern); ni.hasNext(); ) {
-                    newCandidates.add(ni.nextNode());
-                }
-
-                // if pattern is the last, also consider properties
-                if (!moreTokens) {
-                    PropertyIterator pi = current.getProperties(pattern);
-                    while (pi.hasNext()) {
-                        newCandidates.add(pi.nextProperty());
-                    }
-                }
-            }
-
-            // drop old candidates and use new for next step
-            candidates.clear();
-            candidates = newCandidates;
-        }
-
-        // add paths of the candidates to the gather list
-        for (Iterator ci=candidates.iterator(); ci.hasNext(); ) {
-            Item current = (Item) ci.next();
-            gather.add(current.getPath());
-        }
-    }
-
-    //---------- matching support ---------------------------------------------
-
-    /**
-     * Applies the list of path patterns to the given path returning
-     * <code>true</code> if it matches, <code>false</code> otherwise.
-     * <p>
-     * <b><em>This method is package protected for testing purposes. This
-     * method is not intended to be used by clients. Its specification or
-     * implementation may change without notice.</em></b>
-     *
-     * @param path The path to match with the pattern list.
-     *
-     * @return <code>true</code> if the path matches any of the patterns.
-     */
-    /* package */ boolean matchPath(String path) {
-        StringTokenizer exploded = new StringTokenizer(path, "/");
-
-        OUTER_LOOP:
-        for (int i=0; i < patterns.length; i++) {
-            StringTokenizer exEntry = new StringTokenizer(patterns[i], "/");
-
-            // ignore if the number of path elements to not match
-            if (exploded.countTokens() != exEntry.countTokens()) {
-                continue;
-            }
-
-            while (exploded.hasMoreTokens()) {
-                if (!ChildrenCollectorFilter.matches(exploded.nextToken(),
-                        exEntry.nextToken())) {
-                    continue OUTER_LOOP;
-                }
-            }
-
-            // if I get here, the path matches entry[i]
-            return true;
-        }
-
-        // if we run out, no match has been found
-        return false;
-    }
-}
diff --git a/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/RepositoryClassLoader.java b/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/RepositoryClassLoader.java
deleted file mode 100644
index fa5c893..0000000
--- a/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/RepositoryClassLoader.java
+++ /dev/null
@@ -1,865 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.classloader;
-
-import java.beans.Introspector;
-import java.io.IOException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.security.AccessController;
-import java.security.PrivilegedExceptionAction;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.NoSuchElementException;
-import java.util.jar.Attributes;
-import java.util.jar.Manifest;
-
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.net.JCRURLConnection;
-import org.apache.jackrabbit.net.URLFactory;
-
-
-/**
- * The <code>RepositoryClassLoader</code> class extends the
- * <code>URLClassLoader</code> and provides the functionality to load classes
- * and resources from JCR Repository.
- * <p>
- * This class loader supports loading classes from the Repository hierarchy,
- * such as a <em>classes</em> 'folder', but also from Jar and Zip files stored
- * in the Repository.
- * <p>
- * For enhanced performance, this class loader keeps a list of resources and
- * classes which have already been loaded through this class loader. If later
- * requests ask for already cached resources, these are returned without
- * checking whether the underlying repository actually still exists.
- * <p>
- * This class is not intended to be extended by clients.
- *
- * @author Felix Meschberger
- * @version $Rev:$, $Date$
- */
-public class RepositoryClassLoader extends URLClassLoader {
-
-    /** default log category */
-    private static final Log log =
-        LogFactory.getLog(RepositoryClassLoader.class);
-
-    /** An empty list of url paths to call superclass constructor */
-    private static final URL[] NULL_PATH = {};
-
-    /**
-     * The special resource representing a resource which could not be
-     * found in the class path.
-     *
-     * @see #cache
-     * @see #findClassLoaderResource(String)
-     */
-    /* package */ static final ClassLoaderResource NOT_FOUND_RESOURCE =
-        new ClassLoaderResource(null, "[sentinel]", null) {
-            public boolean isExpired() {
-                return false;
-            }
-        };
-
-    /**
-     * The classpath which this classloader searches for class definitions.
-     * Each element of the vector should be either a directory, a .zip
-     * file, or a .jar file.
-     * <p>
-     * It may be empty when only system classes are controlled.
-     */
-    private ClassPathEntry[] repository;
-
-    /**
-     * The list of handles to use as a classpath. These is the unprocessed
-     * list of handles given to the constructor.
-     */
-    private PatternPath handles;
-
-    /**
-     * The <code>Session</code> grants access to the Repository to access the
-     * resources.
-     * <p>
-     * This field is not final such that it may be cleared when the class loader
-     * is destroyed.
-     */
-    private Session session;
-
-    /**
-     * Cache of resources found or not found in the class path. The map is
-     * indexed by resource name and contains mappings to instances of the
-     * {@link ClassLoaderResource} class. If a resource has been tried to be
-     * loaded, which could not be found, the resource is cached with the
-     * special mapping to {@link #NOT_FOUND_RESOURCE}.
-     *
-     * @see #NOT_FOUND_RESOURCE
-     * @see #findClassLoaderResource(String)
-     */
-    private Map cache;
-
-    /**
-     * Flag indicating whether the {@link #destroy()} method has already been
-     * called (<code>true</code>) or not (<code>false</code>)
-     */
-    private boolean destroyed;
-
-    /**
-     * Creates a <code>RepositoryClassLoader</code> from a list of item path
-     * strings containing globbing pattens for the paths defining the class
-     * path.
-     *
-     * @param session The <code>Session</code> to use to access the class items.
-     * @param classPath The list of path strings making up the (initial) class
-     *      path of this class loader. The strings may contain globbing
-     *      characters which will be resolved to build the actual class path.
-     * @param parent The parent <code>ClassLoader</code>, which may be
-     *            <code>null</code>.
-     *
-     * @throws NullPointerException if either the session or the handles list is
-     *             <code>null</code>.
-     */
-    public RepositoryClassLoader(Session session, String[] classPath,
-        ClassLoader parent) {
-        this(session, new DynamicPatternPath(session, classPath), parent);
-    }
-
-    /**
-     * Creates a <code>RepositoryClassLoader</code> from a
-     * {@link PatternPath} containing globbing pattens for the handles
-     * defining the class path.
-     *
-     * @param session The <code>Session</code> to use to access the class items.
-     * @param handles The {@link PatternPath} of handles.
-     * @param parent The parent <code>ClassLoader</code>, which may be
-     *            <code>null</code>.
-     *
-     * @throws NullPointerException if either the session or the handles list is
-     *             <code>null</code>.
-     */
-    /* package */ RepositoryClassLoader(Session session, PatternPath handles,
-            ClassLoader parent) {
-
-        // initialize the super class with an empty class path
-        super(NULL_PATH, parent);
-
-        // check session and handles
-        if (session == null) {
-            throw new NullPointerException("session");
-        }
-        if (handles == null) {
-            throw new NullPointerException("handles");
-        }
-
-        // set fields
-        this.session = session;
-        this.setHandles(handles);
-        this.cache = new HashMap();
-        this.destroyed = false;
-
-        // build the class repositories list
-        buildRepository();
-
-        log.debug("RepositoryClassLoader: " + this + " ready");
-    }
-
-    /**
-     * Returns <code>true</code> if this class loader has already been destroyed
-     * by calling {@link #destroy()}.
-     */
-    protected boolean isDestroyed() {
-        return destroyed;
-    }
-
-    /**
-     * Destroys this class loader. This process encompasses all steps needed
-     * to remove as much references to this class loader as possible.
-     * <p>
-     * <em>NOTE</em>: This method just clears all internal fields and especially
-     * the class path to render this class loader unusable.
-     * <p>
-     * This implementation does not throw any exceptions.
-     */
-    public void destroy() {
-        // we expect to be called only once, so we stop destroyal here
-        if (isDestroyed()) {
-            log.debug("Instance is already destroyed");
-            return;
-        }
-
-        // set destroyal guard
-        destroyed = true;
-
-        // clear caches and references
-        setRepository(null);
-        setHandles(null);
-        session = null;
-
-        // clear the cache of loaded resources and flush cached class
-        // introspections of the JavaBean framework
-        if (cache != null) {
-            for (Iterator ci=cache.values().iterator(); ci.hasNext(); ) {
-                ClassLoaderResource res = (ClassLoaderResource) ci.next();
-                if (res.getLoadedClass() != null) {
-                    Introspector.flushFromCaches(res.getLoadedClass());
-                    res.setLoadedClass(null);
-                }
-                ci.remove();
-            }
-        }
-    }
-
-    //---------- URLClassLoader overwrites -------------------------------------
-
-    /**
-     * Finds and loads the class with the specified name from the class path.
-     *
-     * @param name the name of the class
-     * @return the resulting class
-     *
-     * @throws ClassNotFoundException If the named class could not be found or
-     *      if this class loader has already been destroyed.
-     */
-    protected Class findClass(final String name) throws ClassNotFoundException {
-
-        if (isDestroyed()) {
-            throw new ClassNotFoundException(name + " (Classloader destroyed)");
-        }
-
-        log.debug("findClass: Try to find class " + name);
-
-        try {
-            return (Class) AccessController
-                .doPrivileged(new PrivilegedExceptionAction() {
-
-                    public Object run() throws ClassNotFoundException {
-                        return findClassPrivileged(name);
-                    }
-                });
-        } catch (java.security.PrivilegedActionException pae) {
-            throw (ClassNotFoundException) pae.getException();
-        }
-    }
-
-    /**
-     * Finds the resource with the specified name on the search path.
-     *
-     * @param name the name of the resource
-     *
-     * @return a <code>URL</code> for the resource, or <code>null</code>
-     *      if the resource could not be found or if the class loader has
-     *      already been destroyed.
-     */
-    public URL findResource(String name) {
-
-        if (isDestroyed()) {
-            log.warn("Destroyed class loader cannot find a resource");
-            return null;
-        }
-
-        log.debug("findResource: Try to find resource " + name);
-
-        ClassLoaderResource res = findClassLoaderResource(name);
-        if (res != null) {
-            log.debug("findResource: Getting resource from " + res + ", " +
-                "created " + new Date(res.getLastModificationTime()));
-            return res.getURL();
-        }
-
-        return null;
-    }
-
-    /**
-     * Returns an Enumeration of URLs representing all of the resources
-     * on the search path having the specified name.
-     *
-     * @param name the resource name
-     *
-     * @return an <code>Enumeration</code> of <code>URL</code>s. This is an
-     *      empty enumeration if no resources are found by this class loader
-     *      or if this class loader has already been destroyed.
-     */
-    public Enumeration findResources(String name) {
-
-        if (isDestroyed()) {
-            log.warn("Destroyed class loader cannot find resources");
-            return new Enumeration() {
-                public boolean hasMoreElements() {
-                    return false;
-                }
-                public Object nextElement() {
-                    throw new NoSuchElementException("No Entries");
-                }
-            };
-        }
-
-        log.debug("findResources: Try to find resources for " + name);
-
-        List list = new LinkedList();
-        for (int i=0; i < repository.length; i++) {
-            final ClassPathEntry cp = repository[i];
-            log.debug("findResources: Trying " + cp);
-
-            ClassLoaderResource res = cp.getResource(name);
-            if (res != null) {
-                log.debug("findResources: Adding resource from " + res + ", " +
-                    "created " + new Date(res.getLastModificationTime()));
-                URL url = res.getURL();
-                if (url != null) {
-                    list.add(url);
-                }
-            }
-
-        }
-
-        // return the enumeration on the list
-        return Collections.enumeration(list);
-    }
-
-    /**
-     * Returns the search path of URLs for loading classes and resources.
-     * This includes the original list of URLs specified to the constructor,
-     * along with any URLs subsequently appended by the {@link #addURL(URL)}
-     * and {@link #addHandle(String)} methods.
-     *
-     * @return the search path of URLs for loading classes and resources. The
-     *      list is empty, if this class loader has already been destroyed.
-     */
-    public URL[] getURLs() {
-        if (isDestroyed()) {
-            log.warn("Destroyed class loader has no URLs any more");
-            return new URL[0];
-        }
-
-        List urls = new ArrayList();
-        for (int i=0; i < repository.length; i++) {
-            URL url = repository[i].toURL();
-            if (url != null) {
-                urls.add(url);
-            }
-        }
-        return (URL[]) urls.toArray(new URL[urls.size()]);
-    }
-
-    /**
-     * Appends the specified URL to the list of URLs to search for
-     * classes and resources. Only Repository URLs with the protocol set to
-     * <code>JCR</code> are considered for addition. The system will find out
-     * whether the URL points to a directory or a jar archive.
-     * <p>
-     * URLs added using this method will be preserved through reconfiguration
-     * and reinstantiation.
-     * <p>
-     * If this class loader has already been destroyed this method has no
-     * effect.
-     *
-     * @param url the <code>JCR</code> URL to be added to the search path of
-     *      URLs.
-     */
-    protected void addURL(URL url) {
-        if (isDestroyed()) {
-            log.warn("Cannot add URL to destroyed class loader");
-
-        } else if (checkURL(url)) {
-            // Repository URL
-            log.debug("addURL: Adding URL " + url);
-            try {
-                JCRURLConnection conn = (JCRURLConnection) url.openConnection();
-                ClassPathEntry cp = ClassPathEntry.getInstance(
-                    conn.getSession(), conn.getPath());
-                addClassPathEntry(cp);
-            } catch (IOException ioe) {
-                log.warn("addURL: Cannot add URL " + url, ioe);
-            }
-
-        } else {
-            log.warn("addURL: " + url + " is not a Repository URL, ignored");
-        }
-    }
-
-    /**
-     * Appends the specified path to the list of handles to search for classes
-     * and resources. The system will find out whether the path points to a
-     * directory or a JAR or ZIP archive. The path is added as is, provided it
-     * is valid to be used in the class path and therefore must not contain any
-     * globbing characters.
-     * <p>
-     * If this class loader has already been destroyed, this method has no
-     * effect.
-     *
-     * @param path The path to be added to the search path.
-     */
-    public void addHandle(String path) {
-        if (isDestroyed()) {
-            log.warn("Cannot add handle to destroyed class loader");
-            return;
-        }
-
-        log.debug("addURL: Adding Handle " + path);
-        ClassPathEntry cp = ClassPathEntry.getInstance(session, path);
-        if (cp != null) {
-            addClassPathEntry(cp);
-        } else {
-            log.debug("addHandle: Cannot get a ClassPathEntry for " + path);
-        }
-    }
-
-    //---------- Property access ----------------------------------------------
-
-    /**
-     * Sets the {@link PatternPath} list to be used as the initial search
-     * path of this class loader. This new list replaces the path pattern list
-     * set in the constructor or in a previous call to this method.
-     * <p>
-     * After setting the list, this class loader's class path has to be rebuilt
-     * by calling the {@link #buildRepository()} method.
-     *
-     * @param handles The {@link PatternPath} to set on this class loader.
-     */
-    /* package */ void setHandles(PatternPath handles) {
-        this.handles = handles;
-    }
-
-    /**
-     * Returns the current {@link PatternPath} from which the search path
-     * of this class loader is configured.
-     */
-    /* package */ PatternPath getHandles() {
-        return handles;
-    }
-
-    /**
-     * Returns the named {@link ClassLoaderResource} if it is contained in the
-     * cache. If the resource does not exist in the cache or has not been found
-     * in the class path at an earlier point in time, <code>null</code> is
-     * returned.
-     *
-     * @param name The name of the resource to retrieve from the cache.
-     *
-     * @return The named <code>ClassLoaderResource</code> or <code>null</code>
-     *      if not loaded.
-     *
-     * @throws NullPointerException If this class loader has already been
-     *      destroyed.
-     */
-    /* package */ ClassLoaderResource getCachedResource(String name) {
-        Object res = cache.get(name);
-        if (res == null || res == NOT_FOUND_RESOURCE) {
-            log.debug("Resource " + name + " no cached");
-            return null;
-        }
-
-        return (ClassLoaderResource) res;
-    }
-
-    /**
-     * Returns an <code>Iterator</code> on all resources in the cache. This
-     * iterator may also contain {@link #NOT_FOUND_RESOURCE sentinel} entries
-     * for resources, which failed to load. Callers of this method should take
-     * care to filter out such resources before acting on it.
-     *
-     * @throws NullPointerException If this class loader has already been
-     *      destroyed.
-     */
-    /* package */ Iterator getCachedResources() {
-        return cache.values().iterator();
-    }
-
-    /**
-     * Removes all entries from the cache of loaded resources, which mark
-     * resources, which have not been found as of yet.
-     *
-     * @throws NullPointerException If this class loader has already been
-     *      destroyed.
-     */
-    protected void cleanCache() {
-        for (Iterator ci=cache.values().iterator(); ci.hasNext(); ) {
-            if (ci.next() == NOT_FOUND_RESOURCE) {
-                ci.remove();
-            }
-        }
-    }
-
-    /**
-     * Returns <code>true</code>, if the cache is not empty. If the
-     * {@link #cleanCache()} method is not called before calling this method, a
-     * false positive result may be returned.
-     *
-     * @throws NullPointerException If this class loader has already been
-     *      destroyed.
-     */
-    protected boolean hasLoadedResources() {
-        return cache.isEmpty();
-    }
-
-    /**
-     * Returns the session used by this class loader to access the repository.
-     * If this class loader has already been destroyed, this <code>null</code>
-     * is returned.
-     */
-    protected Session getSession() {
-        return session;
-    }
-
-    /**
-     * Sets the current active class path to the list of class path entries.
-     */
-    protected void setRepository(ClassPathEntry[] classPath) {
-        this.repository = classPath;
-    }
-
-    /**
-     * Returns the current active class path entries list or <code>null</code>
-     * if this class loader has already been destroyed.
-     */
-    protected ClassPathEntry[] getRepository() {
-        return repository;
-    }
-
-    /**
-     * Adds the class path entry to the current class path list. If the class
-     * loader has already been destroyed, this method creates a single entry
-     * class path list with the new class path entry.
-     */
-    protected void addClassPathEntry(ClassPathEntry cpe) {
-        log.debug("addHandle: Adding path " + cpe.getPath());
-
-        // append the entry to the current class path
-        ClassPathEntry[] oldClassPath = getRepository();
-        ClassPathEntry[] newClassPath = addClassPathEntry(oldClassPath, cpe);
-        setRepository(newClassPath);
-    }
-
-    /**
-     * Helper method for class path handling to a new entry to an existing
-     * list and return the new list.
-     * <p>
-     * If <code>list</code> is <code>null</code> a new array is returned with
-     * a single element <code>newEntry</code>. Otherwise the array returned
-     * contains all elements of <code>list</code> and <code>newEntry</code>
-     * at the last position.
-     *
-     * @param list The array of class path entries, to which a new entry is
-     *      to be appended. This may be <code>null</code>.
-     * @param newEntry The new entry to append to the class path list.
-     *
-     * @return The extended class path list.
-     */
-    protected ClassPathEntry[] addClassPathEntry(ClassPathEntry[] list,
-            ClassPathEntry newEntry) {
-
-        // quickly define single entry array for the first entry
-        if (list == null) {
-            return new ClassPathEntry[]{ newEntry };
-        }
-
-        // create new array and copy old and new contents
-        ClassPathEntry[] newList = new ClassPathEntry[list.length+1];
-        System.arraycopy(list, 0, newList, 0, list.length);
-        newList[list.length] = newEntry;
-        return newList;
-    }
-
-    //---------- Object overwrite ---------------------------------------------
-
-    /**
-     * Returns a string representation of this instance.
-     */
-    public String toString() {
-        StringBuffer buf = new StringBuffer(getClass().getName());
-
-        if (isDestroyed()) {
-            buf.append(" - destroyed");
-        } else {
-            buf.append(": parent: { ");
-            buf.append(getParent());
-            buf.append(" }, user: ");
-            buf.append(session.getUserID());
-        }
-
-        return buf.toString();
-    }
-
-    //---------- internal ------------------------------------------------------
-
-    /**
-     * Builds the repository list from the list of path patterns and appends
-     * the path entries from any added handles. This method may be used multiple
-     * times, each time replacing the currently defined repository list.
-     *
-     * @throws NullPointerException If this class loader has already been
-     *      destroyed.
-     */
-    protected synchronized void buildRepository() {
-
-        // build new repository
-        List handles;
-        try {
-            handles = getHandles().getExpandedPaths();
-        } catch (RepositoryException re) {
-            log.error("Cannot expand handle list", re);
-            return;
-        }
-
-        List newRepository = new ArrayList(handles.size());
-
-        // build repository from path patterns
-        for (int i=0; i < handles.size(); i++) {
-            String entry = (String) handles.get(i);
-            ClassPathEntry cp = null;
-
-            // try to find repository based on this path
-            if (getRepository() != null) {
-                for (int j=0; j < repository.length; j++) {
-                    ClassPathEntry tmp = repository[i];
-                    if (tmp.getPath().equals(entry)) {
-                        cp = tmp;
-                        break;
-                    }
-                }
-            }
-
-            // not found, creating new one
-            if (cp == null) {
-                cp = ClassPathEntry.getInstance(session, entry);
-            }
-
-            if (cp != null) {
-                log.debug("Adding path " + entry);
-                newRepository.add(cp);
-            } else {
-                log.debug("Cannot get a ClassPathEntry for " + entry);
-            }
-        }
-
-        // replace old repository with new one
-        ClassPathEntry[] newClassPath = new ClassPathEntry[newRepository.size()];
-        newRepository.toArray(newClassPath);
-        setRepository(newClassPath);
-
-        // clear un-found resource cache
-        cleanCache();
-    }
-
-    /**
-     * Tries to find the class in the class path from within a
-     * <code>PrivilegedAction</code>. Throws <code>ClassNotFoundException</code>
-     * if no class can be found for the name.
-     *
-     * @param name the name of the class
-     *
-     * @return the resulting class
-     *
-     * @throws ClassNotFoundException if the class could not be found
-     * @throws NullPointerException If this class loader has already been
-     *      destroyed.
-     */
-    private Class findClassPrivileged(String name) throws ClassNotFoundException {
-
-        // prepare the name of the class
-        final String path = name.replace('.', '/').concat(".class");
-        log.debug("findClassPrivileged: Try to find path " + path +
-            " for class " + name);
-
-        ClassLoaderResource res = findClassLoaderResource(path);
-        if (res != null) {
-
-             // try defining the class, error aborts
-             try {
-                 log.debug("findClassPrivileged: Loading class from " +
-                     res + ", created " + new Date(res.getLastModificationTime()));
-
-                 Class c = defineClass(name, res);
-                 if (c == null) {
-                     log.warn("defineClass returned null for class " + name);
-                     throw new ClassNotFoundException(name);
-                 }
-                 return c;
-
-             } catch (IOException ioe) {
-                 log.debug("defineClass failed", ioe);
-                 throw new ClassNotFoundException(name, ioe);
-             } catch (Throwable t) {
-                 log.debug("defineClass failed", t);
-                 throw new ClassNotFoundException(name, t);
-             }
-         }
-
-        throw new ClassNotFoundException(name);
-     }
-
-    /**
-     * Returns a {@link ClassLoaderResource} for the given <code>name</code> or
-     * <code>null</code> if not existing. If the resource has already been
-     * loaded earlier, the cached instance is returned. If the resource has
-     * not been found in an earlier call to this method, <code>null</code> is
-     * returned. Otherwise the resource is looked up in the class path. If
-     * found, the resource is cached and returned. If not found, the
-     * {@link #NOT_FOUND_RESOURCE} is cached for the name and <code>null</code>
-     * is returned.
-     *
-     * @param name The name of the resource to return.
-     *
-     * @return The named <code>ClassLoaderResource</code> if found or
-     *      <code>null</code> if not found.
-     *
-     * @throws NullPointerException If this class loader has already been
-     *      destroyed.
-     */
-    /* package */ ClassLoaderResource findClassLoaderResource(String name) {
-
-        // check for cached resources first
-        ClassLoaderResource res = (ClassLoaderResource) cache.get(name);
-        if (res == NOT_FOUND_RESOURCE) {
-            log.info("Resource '" + name + "' known to not exist in class path");
-            return null;
-        } else if (res != null) {
-            return res;
-        }
-
-        // walk the repository list and try to find the resource
-        for (int i = 0; i < repository.length; i++) {
-            final ClassPathEntry cp = repository[i];
-            log.debug("Checking " + cp);
-
-            res = cp.getResource(name);
-            if (res != null) {
-                log.debug("Found resource in " + res + ", " +
-                    "created " + new Date(res.getLastModificationTime()));
-                cache.put(name, res);
-                return res;
-            }
-
-        }
-
-        log.debug("No classpath entry contains " + name);
-        cache.put(name, NOT_FOUND_RESOURCE);
-        return null;
-    }
-
-    /**
-     * Defines a class getting the bytes for the class from the resource
-     *
-     * @param name The fully qualified class name
-     * @param res The resource to obtain the class bytes from
-     *
-     * @throws RepositoryException If a problem occurrs getting at the data.
-     * @throws IOException If a problem occurrs reading the class bytes from
-     *      the resource.
-     * @throws ClassFormatError If the class bytes read from the resource are
-     *      not a valid class.
-     */
-    private Class defineClass(String name, ClassLoaderResource res)
-            throws IOException, RepositoryException {
-
-        log.debug("defineClass(" + name + ", " + res + ")");
-
-        Class clazz = res.getLoadedClass();
-        if (clazz == null) {
-
-            /**
-             * This following code for packages is duplicate from URLClassLoader
-             * because it is private there. I would like to not be forced to
-             * do this, but I still have to find a way ... -fmeschbe
-             */
-
-            // package support
-            int i = name.lastIndexOf('.');
-            if (i != -1) {
-                String pkgname = name.substring(0, i);
-                // Check if package already loaded.
-                Package pkg = getPackage(pkgname);
-                URL url = res.getCodeSourceURL();
-                Manifest man = res.getManifest();
-                if (pkg != null) {
-                    // Package found, so check package sealing.
-                    boolean ok;
-                    if (pkg.isSealed()) {
-                        // Verify that code source URL is the same.
-                        ok = pkg.isSealed(url);
-                    } else {
-                        // Make sure we are not attempting to seal the package
-                        // at this code source URL.
-                        ok = (man == null) || !isSealed(pkgname, man);
-                    }
-                    if (!ok) {
-                        throw new SecurityException("sealing violation");
-                    }
-                } else {
-                    if (man != null) {
-                        definePackage(pkgname, man, url);
-                    } else {
-                        definePackage(pkgname, null, null, null, null, null, null, null);
-                    }
-                }
-            }
-
-            byte[] data = res.getBytes();
-            clazz = defineClass(name, data, 0, data.length);
-            res.setLoadedClass(clazz);
-        }
-
-        return clazz;
-    }
-
-    /**
-     * Returns true if the specified package name is sealed according to the
-     * given manifest
-     * <p>
-     * This code is duplicate from <code>URLClassLoader.isSealed</code> because
-     * the latter has private access and we need the method here.
-     */
-    private boolean isSealed(String name, Manifest man) {
-         String path = name.replace('.', '/').concat("/");
-         Attributes attr = man.getAttributes(path);
-         String sealed = null;
-         if (attr != null) {
-             sealed = attr.getValue(Attributes.Name.SEALED);
-         }
-         if (sealed == null) {
-             if ((attr = man.getMainAttributes()) != null) {
-                 sealed = attr.getValue(Attributes.Name.SEALED);
-             }
-         }
-         return "true".equalsIgnoreCase(sealed);
-    }
-
-    /**
-     * Returns <code>true</code> if the <code>url</code> is a <code>JCR</code>
-     * URL.
-     *
-     * @param url The URL to check whether it is a valid <code>JCR</code> URL.
-     *
-     * @return <code>true</code> if <code>url</code> is a valid <code>JCR</code>
-     *      URL.
-     *
-     * @throws NullPointerException if <code>url</code> is <code>null</code>.
-     */
-    private boolean checkURL(URL url) {
-        return URLFactory.REPOSITORY_SCHEME.equalsIgnoreCase(url.getProtocol());
-    }
-}
\ No newline at end of file
diff --git a/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/Util.java b/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/Util.java
deleted file mode 100644
index 4d73d85..0000000
--- a/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/Util.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.classloader;
-
-import javax.jcr.AccessDeniedException;
-import javax.jcr.Item;
-import javax.jcr.ItemNotFoundException;
-import javax.jcr.Node;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.Property;
-import javax.jcr.PropertyType;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.ValueFormatException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * The <code>Util</code> provides helper methods for the repository classloader
- * and its class path entry and resource classes.
- * <p>
- * This class may not be extended or instantiated, it just contains static
- * utility methods.
- *
- * @author Felix Meschberger
- * @version $Rev:$, $Date$
- */
-public class Util {
-
-    /** default logging */
-    private static final Log log = LogFactory.getLog(Util.class);
-
-    /** Private constructor to not instantiate */
-    private Util() {}
-
-    /**
-     * Resolves the given <code>item</code> to a <code>Property</code>. If the
-     * <code>item</code> is a node, the <code>getPrimaryItem</code> method is
-     * called repeatedly until a property is returned or until no more primary
-     * item is available. If the resulting property is a multivalue property,
-     * <code>null</code> is returned. Otherwise if the resulting property is
-     * a <code>REFERENCE</code> property, the node referred to is retrieved
-     * and this method is called recursively with the node. Otherwise, the
-     * resulting property is returned.
-     *
-     * @param item The <code>Item</code> to resolve to a <code>Property</code>.
-     *
-     * @return The resolved <code>Property</code> or <code>null</code> if the
-     *      resolved property is a multi-valued property.
-     *
-     * @throws ItemNotFoundException If the <code>item</code> is a node which
-     *      cannot be resolved to a property through (repeated) calls to
-     *      <code>Node.getPrimaryItem</code>.
-     * @throws ValueFormatException If the <code>item</code> resolves to a
-     *      single-valued <code>REFERENCE</code> type property which cannot
-     *      be resolved to the node referred to.
-     * @throws RepositoryException if another error occurrs accessing the
-     *      repository.
-     */
-    public static Property getProperty(Item item)
-            throws ItemNotFoundException, ValueFormatException,
-            RepositoryException {
-
-        // if the item is a node, get its primary item until either
-        // no primary item exists any more or an ItemNotFoundException is thrown
-        while (item.isNode()) {
-            item = ((Node) item).getPrimaryItem();
-        }
-
-        // we get here with a property - otherwise an exception has already
-        // been thrown
-        Property prop = (Property) item;
-        if (prop.getDefinition().isMultiple()) {
-            log.error(prop.getPath() + " is a multivalue property");
-            return null;
-        } else if (prop.getType() == PropertyType.REFERENCE) {
-            Node node = prop.getNode();
-            log.info("Property " + prop.getPath() + " refers to node " +
-                node.getPath() + "; finding primary item");
-            return getProperty(node);
-        }
-
-        return prop;
-    }
-
-    /**
-     * Returns the last modification time of the property. If the property's
-     * parent node is a <code>nt:resource</code> the <code>long</code> value
-     * of the <code>jcr:lastModified</code> property of the parent node is
-     * returned. Otherwise the current system time is returned.
-     *
-     * @param prop The property for which to return the last modification
-     *      time.
-     *
-     * @return The last modification time of the resource or the current time
-     *      if the property is not a child of an <code>nt:resource</code> node.
-     *
-     * @throws ItemNotFoundException If the parent node of the property cannot
-     *      be retrieved.
-     * @throws PathNotFoundException If the "jcr:lastModified" property of the
-     *      parent node cannot be retrieved. This exception is unlikely in a
-     *      correctly configured repository as the jcr:lastModified property
-     *      has to be present in a node of type nt:resource.
-     * @throws AccessDeniedException If (read) access to the parent node is
-     *      denied.
-     * @throws RepositoryException If any other error occurrs accessing the
-     *      repository to retrieve the last modification time.
-     */
-    public static long getLastModificationTime(Property prop)
-            throws ItemNotFoundException, PathNotFoundException,
-            AccessDeniedException, RepositoryException {
-
-        Node parent = prop.getParent();
-        if (parent.isNodeType("nt:resource")) {
-            return parent.getProperty("jcr:lastModified").getLong();
-        }
-
-        return System.currentTimeMillis();
-    }
-}
diff --git a/contrib/classloader/src/main/java/org/apache/jackrabbit/net/FileParts.java b/contrib/classloader/src/main/java/org/apache/jackrabbit/net/FileParts.java
deleted file mode 100644
index 1943006..0000000
--- a/contrib/classloader/src/main/java/org/apache/jackrabbit/net/FileParts.java
+++ /dev/null
@@ -1,313 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.net;
-
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
-import java.net.URLEncoder;
-
-import javax.jcr.Session;
-
-/**
- * The <code>FileParts</code> class provides composing and parsing functionality
- * to create and analize JCR Repository URL file components.
- * <p>
- * The file component of a JCR Repository URL has the format
- * <pre>
- *      file = [ "jcr:" [ "//" authority ] ] "/" repository "/" workspace jarpath .
- *      authority = // URL authority specification
- *      repository = // URL encoded repository name
- *      workspace = // URL encoded workspace name
- *      jarpath = path [ "!/" [ entry ] ] .
- *      path = // The absolute item path (with a leading slash)
- *      entry = // The (relative) path to the entry in an archive
- * </pre>
- * <p>
- * To facitility use of this class with JCRJar URLs, the
- * {@link #FileParts(String)} supports file specifications which contains
- * the JCR Repository URL scheme name and an optional URL authority
- * specification. This prefix in front of the real file specification is
- * silently discarded. It is not included in the string representation returned
- * by the {@link #toString()} method.
- * <p>
- * To make sure parsing is not complicated by implementation and use case
- * specific repository and workspace names, those names are URL encoded using
- * the <code>URLEncoder</code> class and <i>UTF-8</i> character encoding.
- *
- * @author Felix Meschberger
- * @version $Rev:$, $Date:$
- */
-class FileParts {
-
-    /** The decoded name of the repository */
-    private final String repository;
-
-    /** The decoded name of the workspace */
-    private final String workspace;
-
-    /** The repository item path part of the URL path */
-    private final String path;
-
-    /**
-     * The path to the entry in the archive, if the file spec contains the
-     * jar entry separator <i>!/</i>. If no entry path is specified, this is
-     * <code>null</code>. If no path is specified after the <i>!/</i> this
-     * is an empty string.
-     */
-    private final String entryPath;
-
-    /**
-     * Creates a new instance for the root node of the given session. The
-     * repository name is currently set to the fixed string "_" as there has not
-     * been established a repository naming convention yet. The name of the
-     * workspace is set to the name of the workspace to which the session is
-     * attached. The path is set to <code>"/"</code> to indicate the root node
-     * if the <code>path</code> argument is <code>null</code>.
-     *
-     * @param session The session for which to create this instance.
-     * @param path The absolute item path to initialize this instance with. If
-     *      <code>null</code> the item path is set to the <code>/</code>.
-     * @param entryPath The path to the archive entry to set on this instance.
-     *      This is expected to be a relative path without a leading slash and
-     *      may be <code>null</code>.
-     *
-     * @throws NullPointerException if <code>session</code> is
-     *      <code>null</code>.
-     */
-    FileParts(Session session, String path, String entryPath) {
-        this.repository = "_";
-        this.workspace = session.getWorkspace().getName();
-        this.path = (path == null) ? "/" : path;
-        this.entryPath = entryPath;
-    }
-
-    /**
-     * Creates an instance of this class setting the repository, workspace and
-     * path fields from the given <code>file</code> specification.
-     *
-     * @param file The specification providing the repository, workspace and
-     *      path values.
-     *
-     * @throws NullPointerException if <code>file</code> is
-     *      <code>null</code>.
-     * @throws IllegalArgumentException if <code>file</code> is not the
-     *      correct format.
-     */
-    FileParts(String file) {
-        if (!file.startsWith("/")) {
-            if (file.startsWith(URLFactory.REPOSITORY_SCHEME+":")) {
-                file = strip(file);
-            } else {
-                throw failure("Not an absolute file", file);
-            }
-        }
-
-        // find the repository name
-        int slash0 = 1;
-        int slash1 = file.indexOf('/', slash0);
-        if (slash1 < 0 || slash1-slash0 == 0) {
-            throw failure("Missing repository name", file);
-        }
-        this.repository = decode(file.substring(slash0, slash1));
-
-        // find the workspace name
-        slash0 = slash1 + 1;
-        slash1 = file.indexOf('/', slash0);
-        if (slash1 < 0 || slash1-slash0 == 0) {
-            throw failure("Missing workspace name", file);
-        }
-        this.workspace = decode(file.substring(slash0, slash1));
-
-        String fullPath = file.substring(slash1);
-        int bangSlash = JCRJarURLHandler.indexOfBangSlash(fullPath);
-        if (bangSlash < 0) {
-            this.path = fullPath;
-            this.entryPath = null;
-        } else {
-            this.path = fullPath.substring(0, bangSlash-1);
-            this.entryPath = fullPath.substring(bangSlash+1);
-        }
-    }
-
-    /**
-     * Returns the plain name of the repository.
-     */
-    String getRepository() {
-        return repository;
-    }
-
-    /**
-     * Returns the plain name of the workspace.
-     */
-    String getWorkspace() {
-        return workspace;
-    }
-
-    /**
-     * Returns the absolute repository path of the item.
-     */
-    String getPath() {
-        return path;
-    }
-
-    /**
-     * Returns the entry path of <code>null</code> if no entry exists.
-     */
-    String getEntryPath() {
-        return entryPath;
-    }
-
-    //---------- Object overwrites --------------------------------------------
-
-    /**
-     * Returns a hash code for this instance composed of the hash codes of the
-     * repository, workspace and path names.
-     */
-    public int hashCode() {
-        return getRepository().hashCode() +
-            17 * getWorkspace().hashCode() +
-            33 * getPath().hashCode();
-    }
-
-    /**
-     * Returns <code>true</code> if <code>obj</code> is the same as this or
-     * if other is a <code>FileParts</code> with the same path, workspace and
-     * repository. Otherwise <code>false</code> is returned.
-     */
-    public boolean equals(Object obj) {
-        if (obj == this) {
-            return true;
-        } else if (obj instanceof FileParts) {
-            FileParts other = (FileParts) obj;
-
-            // catch null entry path, fail if other has a defined entry path
-            if (getEntryPath() == null) {
-                if (other.getEntryPath() != null) {
-                    return false;
-                }
-            }
-
-            return getPath().equals(other.getPath()) &&
-                getWorkspace().equals(other.getWorkspace()) &&
-                getRepository().equals(other.getRepository()) &&
-                getEntryPath().equals(other.getEntryPath());
-        }
-
-        // fall back on null or other class
-        return false;
-    }
-
-    /**
-     * Returns the encoded string representation of this instance, which may
-     * later be fed to the {@link #FileParts(String)} constructor to recreate
-     * an equivalent instance.
-     */
-    public String toString() {
-        StringBuffer buf = new StringBuffer();
-        buf.append('/').append(encode(getRepository()));
-        buf.append('/').append(encode(getWorkspace()));
-        buf.append(getPath());
-
-        if (getEntryPath() != null) {
-            buf.append("!/").append(getEntryPath());
-        }
-
-        return buf.toString();
-    }
-
-    //---------- internal -----------------------------------------------------
-
-    /**
-     * @throws IllegalArgumentException If there is no path element after the
-     *      authority.
-     */
-    private String strip(String file) {
-        // cut off jcr: prefix - any other prefix, incl. double slash
-        // would cause an exception to be thrown in the constructor
-        int start = 4;
-
-        // check whether the remainder contains an authority specification
-        if (file.length() >= start+2 && file.charAt(start) == '/' &&
-                file.charAt(start+1) == '/') {
-
-            // find the slash after the authority, fail if missing
-            start = file.indexOf('/', start + 2);
-            if (start < 0) {
-                throw failure("Missing path after authority", file);
-            }
-        }
-
-        // return the file now
-        return file.substring(start);
-    }
-
-    /**
-     * Encodes the given string value using the <code>URLEncoder</code> and
-     * <i>UTF-8</i> character encoding.
-     *
-     * @param value The string value to encode.
-     *
-     * @return The encoded string value.
-     *
-     * @throws InternalError If <code>UTF-8</code> character set encoding is
-     *      not supported. As <code>UTF-8</code> is required to be implemented
-     *      on any Java platform, this error is not expected.
-     */
-    private String encode(String value) {
-        try {
-            return URLEncoder.encode(value, "UTF-8");
-        } catch (UnsupportedEncodingException e) {
-            // not expected, throw an InternalError
-            throw new InternalError("UTF-8 not supported");
-        }
-    }
-
-    /**
-     * Decodes the given string value using the <code>URLDecoder</code> and
-     * <i>UTF-8</i> character encoding.
-     *
-     * @param value The string value to decode.
-     *
-     * @return The decoded string value.
-     *
-     * @throws InternalError If <code>UTF-8</code> character set encoding is
-     *      not supported. As <code>UTF-8</code> is required to be implemented
-     *      on any Java platform, this error is not expected.
-     */
-    private String decode(String value) {
-        try {
-            return URLDecoder.decode(value, "UTF-8");
-        } catch (UnsupportedEncodingException e) {
-            // not expected, throw an InternalError
-            throw new InternalError("UTF-8 not supported");
-        }
-    }
-
-    /**
-     * Returns a <code>IllegalArgumentException</code> formatted with the
-     * given reason and causing file specification.
-     *
-     * @param reason The failure reason.
-     * @param file The original file specification leading to failure.
-     *
-     * @return A <code>IllegalArgumentException</code> with the given
-     *      reason and causing file specification.
-     */
-    private IllegalArgumentException failure(String reason, String file) {
-        return new IllegalArgumentException(reason + ": '" + file + "'");
-    }
-}
\ No newline at end of file
diff --git a/contrib/classloader/src/main/java/org/apache/jackrabbit/net/JCRJarURLConnection.java b/contrib/classloader/src/main/java/org/apache/jackrabbit/net/JCRJarURLConnection.java
deleted file mode 100644
index 80a4302..0000000
--- a/contrib/classloader/src/main/java/org/apache/jackrabbit/net/JCRJarURLConnection.java
+++ /dev/null
@@ -1,289 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.net;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.jar.JarEntry;
-import java.util.jar.JarInputStream;
-
-import javax.jcr.Property;
-import javax.jcr.RepositoryException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * The <code>JCRJarURLConnection</code> extends the
- * {@link org.apache.jackrabbit.net.JCRURLConnection} class to support accessing
- * archive files stored in a JCR Repository.
- * <p>
- * Just like the base class, this class requires the URL to resolve, either
- * directly or through primary item chain, to a repository <code>Property</code>.
- * <p>
- * Access to this connections property and archive entry content is perpared
- * with the {@link #connect()}, which after calling the base class implementation
- * to find the property tries to find the archive entry and set the connection's
- * fields according to the entry. This implementation's {@link #connect()}
- * method fails if the named entry does not exist in the archive.
- * <p>
- * The {@link #getInputStream()} method either returns an stream on the archive
- * entry or on the archive depending on whether an entry path is specified
- * in the URL or not. Like the base class implementation, this implementation
- * returns a new <code>InputStream</code> on each invocation.
- * <p>
- * If an entry path is defined on the URL, the header fields are set from the
- * archive entry:
- * <table border="0" cellspacing="0" cellpadding="3">
- *  <tr><td><code>Content-Type</code><td>Guessed from the entry name or
- *      <code>application/octet-stream</code> if the type cannot be guessed
- *      from the name</tr>
- *  <tr><td><code>Content-Encoding</code><td><code>null</code></tr>
- *  <tr><td><code>Content-Length</code><td>The size of the entry</tr>
- *  <tr><td><code>Last-Modified</code><td>The last modification time of the
- *      entry</tr>
- * </table>
- * <p>
- * If no entry path is defined on the URL, the header fields are set from the
- * property by the base class implementation with the exception of the
- * content type, which is set to <code>application/java-archive</code> by
- * the {@link #connect()} method.
- * <p>
- * <em>Note that this implementation does only support archives stored in the
- * JCR Repository, no other contained storage such as </em>file<em> or
- * </em>http<em> is supported.</em>
- * <p>
- * This class is not intended to be subclassed or instantiated by clients.
- *
- * @author Felix Meschberger
- * @version $Rev:$, $Date:$
- */
-public class JCRJarURLConnection extends JCRURLConnection {
-
-    /** default log category */
-    private static final Log log = LogFactory.getLog(JCRJarURLConnection.class);
-
-    /**
-     * The name of the MIME content type for this connection's content if
-     * no entry path is defined on the URL (value is "application/java-archive").
-     */
-    protected static final String APPLICATION_JAR = "application/java-archive";
-
-    /**
-     * Creates an instance of this class for the given <code>url</code>
-     * supported by the <code>handler</code>.
-     *
-     * @param url The URL to base the connection on.
-     * @param handler The URL handler supporting the given URL.
-     */
-    JCRJarURLConnection(URL url, JCRJarURLHandler handler) {
-        super(url, handler);
-    }
-
-    /**
-     * Returns the path to the entry contained in the archive or
-     * <code>null</code> if the URL contains no entry specification in the
-     * path.
-     */
-    String getEntryPath() {
-        return getFileParts().getEntryPath();
-    }
-
-    /**
-     * Connects to the URL setting the header fields and preparing for the
-     * {@link #getProperty()} and {@link #getInputStream()} methods.
-     * <p>
-     * After calling the base class implemenation to get the basic connection,
-     * the entry is looked for in the archive to set the content type, content
-     * length and last modification time header fields according to the named
-     * entry. If no entry is defined on the URL, only the content type header
-     * field is set to <code>application/java-archive</code>.
-     * <p>
-     * When this method successfully returns, this connection is considered
-     * connected. In case of an exception thrown, the connection is not
-     * connected.
-     *
-     * @throws IOException if an error occurrs retrieving the data property or
-     *      any of the header field value properties or if any other errors
-     *      occurrs. Any cuasing exception is set as the cause of this
-     *      exception.
-     */
-    public synchronized void connect() throws IOException {
-
-        if (!connected) {
-
-            // have the base class connect to get the jar property
-            super.connect();
-
-            // we assume the connection is now (temporarily) connected,
-            // thus calling the getters will not result in a recursive loop
-            Property property = getProperty();
-            String contentType = getContentType();
-            String contentEncoding = getContentEncoding();
-            int contentLength = getContentLength();
-            long lastModified = getLastModified();
-
-            // mark as not connected to not get false positives if the
-            // following code fails
-            connected = false;
-
-            // Get hold of the data
-            try {
-
-                JarInputStream jins = null;
-                try {
-
-                    // try to get the jar input stream, fail if no jar
-                    jins = new JarInputStream(property.getStream());
-
-                    String entryPath = getEntryPath();
-                    if (entryPath != null) {
-
-                        JarEntry entry = findEntry(jins, entryPath);
-
-                        if (entry != null) {
-
-                            contentType = guessContentTypeFromName(entryPath);
-                            if (contentType == null) {
-                                contentType = APPLICATION_OCTET;
-                            }
-
-                            contentLength = (int) entry.getSize();
-                            lastModified = entry.getTime();
-
-                        } else {
-
-                            throw failure("connect", entryPath +
-                                " not contained in jar archive", null);
-
-                        }
-
-                    } else {
-
-                        // replaces the base class defined content type
-                        contentType = APPLICATION_JAR;
-
-                    }
-
-                } finally {
-                    if (jins != null) {
-                        try {
-                            jins.close();
-                        } catch (IOException ignore) {
-                        }
-                    }
-                }
-
-                log.debug("connect: Using atom '" + property.getPath()
-                    + "' with content type '" + contentType + "' for "
-                    + String.valueOf(contentLength) + " bytes");
-
-                // set the fields
-                setContentType(contentType);
-                setContentEncoding(contentEncoding);
-                setContentLength(contentLength);
-                setLastModified(lastModified);
-
-                // mark connection open
-                connected = true;
-
-            } catch (RepositoryException re) {
-
-                throw failure("connect", re.toString(), re);
-
-            }
-        }
-    }
-
-    /**
-     * Returns an input stream that reads from this open connection. If not
-     * entry path is specified in the URL, this method returns the input stream
-     * providing access to the archive as a whole. Otherwise the input stream
-     * returned is a <code>JarInputStream</code> positioned at the start of
-     * the named entry.
-     * <p>
-     * <b>NOTES:</b>
-     * <ul>
-     * <li>Each call to this method returns a new <code>InputStream</code>.
-     * <li>Do not forget to close the return stream when not used anymore for
-     *      the system to be able to free resources.
-     * </ul>
-     * <p>
-     * Calling this method implicitly calls {@link #connect()} to ensure the
-     * connection is open.
-     *
-     * @return The <code>InputStream</code> on the archive or the entry if
-     *      specified.
-     *
-     * @throws IOException if an error occurrs opening the connection through
-     *      {@link #connect()} or creating the <code>InputStream</code> on the
-     *      repository <code>Property</code>.
-     */
-    public InputStream getInputStream() throws IOException {
-
-        // get the input stream on the archive itself - also enforces connect()
-        InputStream ins = super.getInputStream();
-
-        // access the entry in the archive if defined
-        String entryPath = getEntryPath();
-        if (entryPath != null) {
-            // open the jar input stream
-            JarInputStream jins = new JarInputStream(ins);
-
-            // position at the correct entry
-            findEntry(jins, entryPath);
-
-            // return the input stream
-            return jins;
-        }
-
-        // otherwise just return the stream on the archive
-        return ins;
-    }
-
-    //----------- internal helper to find the entry ------------------------
-
-    /**
-     * Returns the <code>JarEntry</code> for the path from the
-     * <code>JarInputStream</code> or <code>null</code> if the path cannot
-     * be found in the archive.
-     *
-     * @param zins The <code>JarInputStream</code> to search in.
-     * @param path The path of the <code>JarEntry</code> to return.
-     *
-     * @return The <code>JarEntry</code> for the path or <code>null</code>
-     *      if no such entry can be found.
-     *
-     * @throws IOException if a problem occurrs reading from the stream.
-     */
-    static JarEntry findEntry(JarInputStream zins, String path)
-        throws IOException {
-
-        JarEntry entry = zins.getNextJarEntry();
-        while (entry != null) {
-            if (path.equals(entry.getName())) {
-                return entry;
-            }
-
-            entry = zins.getNextJarEntry();
-        }
-        // invariant : nothing found in the zip matching the path
-
-        return null;
-    }
-}
\ No newline at end of file
diff --git a/contrib/classloader/src/main/java/org/apache/jackrabbit/net/JCRJarURLHandler.java b/contrib/classloader/src/main/java/org/apache/jackrabbit/net/JCRJarURLHandler.java
deleted file mode 100644
index 4477251..0000000
--- a/contrib/classloader/src/main/java/org/apache/jackrabbit/net/JCRJarURLHandler.java
+++ /dev/null
@@ -1,299 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.net;
-
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.net.URLConnection;
-
-import javax.jcr.Session;
-
-/**
- * The <code>JCRJarURLHandler</code> is the <code>URLStreamHandler</code> for
- * Java Archive URLs for archives from a JCR Repository URLs (JCRJar URL). The
- * scheme for such ULRs will be <code>jar</code> while the file part of the URL
- * has the scheme <code>jcr</code>.
- * <p>
- * JCRJar URLs have not been standardized yet and may only be created in the
- * context of an existing <code>Session</code>. Therefore this handler is not
- * globally available and JCR Repository URLs may only be created through the
- * factory methods in the {@link org.apache.jackrabbit.net.URLFactory} class.
- * <p>
- * This class is not intended to be subclassed or instantiated by clients.
- *
- * @author Felix Meschberger
- * @version $Rev:$, $Date:$
- *
- * @see org.apache.jackrabbit.net.JCRJarURLConnection
- * @see org.apache.jackrabbit.net.URLFactory
- * @see org.apache.jackrabbit.net.URLFactory#createJarURL(Session, String, String)
- */
-class JCRJarURLHandler extends JCRURLHandler {
-
-    /**
-     * Creates an instance of this handler class.
-     *
-     * @param session The <code>Session</code> supporting this handler. This
-     *      must not be <code>null</code>.
-     *
-     * @throws NullPointerException if <code>session</code> is <code>null</code>.
-     */
-    JCRJarURLHandler(Session session) {
-        super(session);
-    }
-
-    //---------- URLStreamHandler abstracts ------------------------------------
-
-    /**
-     * Gets a connection object to connect to an JCRJar URL.
-     *
-     * @param url The JCRJar URL to connect to.
-     *
-     * @return An instance of the {@link JCRJarURLConnection} class.
-     *
-     * @see JCRJarURLConnection
-     */
-    protected URLConnection openConnection(URL url) {
-        return new JCRJarURLConnection(url, this);
-    }
-
-    /**
-     * Parses the string representation of a <code>URL</code> into a
-     * <code>URL</code> object.
-     * <p>
-     * If there is any inherited context, then it has already been copied into
-     * the <code>URL</code> argument.
-     * <p>
-     * The <code>parseURL</code> method of <code>URLStreamHandler</code>
-     * parses the string representation as if it were an <code>http</code>
-     * specification. Most URL protocol families have a similar parsing. A
-     * stream protocol handler for a protocol that has a different syntax must
-     * override this routine.
-     *
-     * @param url the <code>URL</code> to receive the result of parsing the
-     *            spec.
-     * @param spec the <code>String</code> representing the URL that must be
-     *            parsed.
-     * @param start the character index at which to begin parsing. This is just
-     *            past the '<code>:</code>' (if there is one) that specifies
-     *            the determination of the protocol name.
-     * @param limit the character position to stop parsing at. This is the end
-     *            of the string or the position of the "<code>#</code>"
-     *            character, if present. All information after the sharp sign
-     *            indicates an anchor.
-     */
-    protected void parseURL(URL url, String spec, int start, int limit) {
-        // protected void parseURL(URL url, String s, int i, int j)
-
-        String file = null;
-        String ref = null;
-
-        // split the reference and file part
-        int hash = spec.indexOf('#', limit);
-        boolean emptyFile = hash == start;
-        if (hash > -1) {
-            ref = spec.substring(hash + 1, spec.length());
-            if (emptyFile) {
-                file = url.getFile();
-            }
-        }
-
-        boolean isSpecAbsolute = spec.substring(0, 4).equalsIgnoreCase("jar:");
-        spec = spec.substring(start, limit);
-
-        if (isSpecAbsolute) {
-
-            // get the file part from the absolute spec
-            file = parseAbsoluteSpec(spec);
-
-        } else if (!emptyFile) {
-
-            // build the file part from the url and relative spec
-            file = parseContextSpec(url, spec);
-
-            // split archive and entry names
-            int bangSlash = indexOfBangSlash(file);
-            String archive = file.substring(0, bangSlash);
-            String entry = file.substring(bangSlash);
-
-            // collapse /../, /./ and //
-            entry = canonizeString(entry);
-
-            file = archive + entry;
-
-        }
-
-        setURL(url, "jar", "", -1, null, null, file, null, ref);
-    }
-
-    //---------- internal -----------------------------------------------------
-
-    /**
-     * Finds the position of the bang slash (!/) in the file part of the URL.
-     */
-    static int indexOfBangSlash(String file) {
-
-        for (int i = file.length(); (i = file.lastIndexOf('!', i)) != -1; i--) {
-            if (i != file.length() - 1 && file.charAt(i + 1) == '/') {
-                return i + 1;
-            }
-        }
-
-        return -1;
-    }
-
-    /**
-     * Parses the URL spec and checks whether it contains a bang slash and
-     * whether it would get a valid URL. Returns the same value if everything is
-     * fine else a <code>NullPointerException</code> is thrown.
-     *
-     * @param spec The URL specification to check.
-     * @return The <code>spec</code> if everything is ok.
-     * @throws NullPointerException if either no bang slash is contained in the
-     *             spec or if the spec without the bang slash part would not be
-     *             a valid URL.
-     */
-    private String parseAbsoluteSpec(String spec) {
-
-        // find and check bang slash
-        int bangSlash = indexOfBangSlash(spec);
-        if (bangSlash == -1) {
-            throw new NullPointerException("no !/ in spec");
-        }
-
-        try {
-
-            String testSpec = spec.substring(0, bangSlash - 1);
-            URI uri = new URI(testSpec);
-
-            // verify the scheme is the JCR Repository Scheme
-            if (!URLFactory.REPOSITORY_SCHEME.equals(uri.getScheme())) {
-                throw new URISyntaxException(testSpec,
-                    "Unsupported Scheme " + uri.getScheme(), 0);
-            }
-
-        } catch (URISyntaxException use) {
-
-            throw new NullPointerException("invalid url: " + spec + " (" + use
-                + ")");
-
-        }
-
-        return spec;
-    }
-
-    /**
-     * Merges the specification and the file part of the URL respecting the bang
-     * slashes. If the specification starts with a slash, it is regarded as a
-     * complete path of a archive entry and replaces an existing archive entry
-     * specification in the url. Examples :<br>
-     * <table>
-     * <tr>
-     * <th align="left">file
-     * <th align="left">spec
-     * <th align="left">result
-     * <tr>
-     * <td>/some/file/path.jar!/
-     * <td>/some/entry/path
-     * <td>/some/file/path.jar!/some/entry/path
-     * <tr>
-     * <td>/some/file/path.jar!/some/default
-     * <td>/some/entry/path
-     * <td>/some/file/path.jar!/some/entry/path </table>
-     * <p>
-     * If the specification is not absolutes it replaces the last file name part
-     * if the file name does not end with a slash. Examples :<br>
-     * <table>
-     * <tr>
-     * <th align="left">file
-     * <th align="left">spec
-     * <th align="left">result
-     * <tr>
-     * <td>/some/file/path.jar!/
-     * <td>/some/entry/path
-     * <td>/some/file/path.jar!/some/entry/path
-     * <tr>
-     * <td>/some/file/path.jar!/some/default
-     * <td>/some/entry/path
-     * <td>/some/file/path.jar!/some/entry/path </table>
-     *
-     * @param url The <code>URL</code> whose file part is used
-     * @param spec The specification to merge with the file part
-     * @throws NullPointerException If the specification starts with a slash and
-     *             the URL does not contain a slash bang or if the specification
-     *             does not start with a slash and the file part of the URL does
-     *             is not an absolute file path.
-     */
-    private String parseContextSpec(URL url, String spec) {
-
-        // spec is relative to this file
-        String file = url.getFile();
-
-        // if the spec is absolute path, it is an absolute entry spec
-        if (spec.startsWith("/")) {
-
-            // assert the bang slash in the original URL
-            int bangSlash = indexOfBangSlash(file);
-            if (bangSlash == -1) {
-                throw new NullPointerException("malformed context url:" + url
-                    + ": no !/");
-            }
-
-            // remove bang slash part from the original file
-            file = file.substring(0, bangSlash);
-        }
-
-        // if the file is not a directory and spec is a relative file path
-        if (!file.endsWith("/") && !spec.startsWith("/")) {
-
-            // find the start of the file name in the url file path
-            int lastSlash = file.lastIndexOf('/');
-            if (lastSlash == -1) {
-                throw new NullPointerException("malformed context url:" + url);
-            }
-
-            // cut off the file name from the URL file path
-            file = file.substring(0, lastSlash + 1);
-        }
-
-        // concat file part and the spec now
-        return file + spec;
-    }
-
-    public String canonizeString(String s) {
-        int i = 0;
-        int k = s.length();
-        while ((i = s.indexOf("/../")) >= 0)
-            if ((k = s.lastIndexOf('/', i - 1)) >= 0)
-                s = s.substring(0, k) + s.substring(i + 3);
-            else
-                s = s.substring(i + 3);
-        while ((i = s.indexOf("/./")) >= 0)
-            s = s.substring(0, i) + s.substring(i + 2);
-        while (s.endsWith("/..")) {
-            int j = s.indexOf("/..");
-            int l;
-            if ((l = s.lastIndexOf('/', j - 1)) >= 0)
-                s = s.substring(0, l + 1);
-            else
-                s = s.substring(0, j);
-        }
-        if (s.endsWith("/.")) s = s.substring(0, s.length() - 1);
-        return s;
-    }
-}
\ No newline at end of file
diff --git a/contrib/classloader/src/main/java/org/apache/jackrabbit/net/JCRURLConnection.java b/contrib/classloader/src/main/java/org/apache/jackrabbit/net/JCRURLConnection.java
deleted file mode 100644
index dc3b503..0000000
--- a/contrib/classloader/src/main/java/org/apache/jackrabbit/net/JCRURLConnection.java
+++ /dev/null
@@ -1,775 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.net;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.jcr.Item;
-import javax.jcr.Node;
-import javax.jcr.Property;
-import javax.jcr.PropertyType;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.classloader.Util;
-
-
-/**
- * The <code>JCRURLConnection</code> is the <code>URLConnection</code>
- * implementation to access the data addressed by a JCR Repository URL.
- * <p>
- * As the primary use of a <code>URLConnection</code> and thus the
- * <code>JCRURLConnection</code> is to provide access to the content of a
- * resource identified by the URL, it is the primary task of this class to
- * identify and access a repository <code>Property</code> based on the URL. This
- * main task is executed in the {@link #connect()} method.
- * <p>
- * Basically the guideposts to access content from a JCR Repository URl are
- * the following:
- * <ul>
- * <li>The URL must ultimately resolve to a repository property to provide
- *      content.
- * <li>If the URL itself is the path to a property, that property is used to
- *      provide the content.
- * <li>If the URL is a path to a node, the primary item chain starting with
- *      this node is followed until no further primary items exist. If the
- *      final item is a property, that property is used to provide the content.
- * <li>If neither of the above methods resolve to a property, the
- *      {@link #connect()} fails and access to the content is not possible.
- * </ul>
- * <p>
- * After having connected the property is available through the
- * {@link #getProperty()} method. Other methods exist to retrieve repository
- * related information defined when creating the URL: {@link #getSession()} to
- * retrieve the session of the URL, {@link #getPath()} to retrieve the path
- * with which the URL was created and {@link #getItem()} to retrieve the item
- * with which the URL was created. The results of calling {@link #getProperty()}
- * and {@link #getItem()} will be the same if the URL directly addressed the
- * property. If the URL addressed the node whose primary item chain ultimately
- * resolved to the property, the {@link #getItem()} will return the node and
- * {@link #getProperty()} will return the resolved property.
- * <p>
- * A note on the <code>InputStream</code> available from
- * {@link #getInputStream()}: Unlike other implementations - for example
- * for <code>file:</code> or <code>http:</code> URLs - which return the same
- * stream on each call, this implementation returns a new stream on each
- * invocation.
- * <p>
- * The following header fields are implemented by this class:
- * <dl>
- * <dt><code>Content-Length</code>
- * <dd>The size of the content is filled from the <code>Property.getLength()</code>
- *      method, which returns the size in bytes of the property's value for
- *      binary values and the number of characters used for the string
- *      representation of the value for all other value types.
- *
- * <dt><code>Content-Type</code>
- * <dd>If the property is a child of a <code>nt:resource</code> node, the
- *      content type is retrieved from the <code>jcr:mimeType</code>
- *      property of the parent node. If the parent node is not a
- *      <code>nt:resource</code>, the <code>guessContentTypeFromName</code>
- *      method is called on the {@link #getPath() path}. If this does not
- *      yield a content type, it is set to <code>application/octet-stream</code>
- *      for binary properties and to <code>text/plain</code> for other types.
- *
- * <dt><code>Content-Enconding</code>
- * <dd>If the property is a child of a <code>nt:resource</code> node, the
- *      content encoding is retrieved from the <code>jcr:econding</code>
- *      property of the parent node. If the <code>jcr:encoding</code> property
- *      is not set, this header field remains undefined (aka <code>null</code>).
- *
- * <dt><code>Last-Modified</code>
- * <dd>If the property is a child of a <code>nt:resource</code> node, the
- *      last modified type is retrieved from the <code>jcr:lastModified</code>
- *      property of the parent node. If the parent node is not a
- *      <code>nt:resource</code>, the last modification time is set to zero.
- * </dl>
- * <p>
- * This class is not intended to be subclassed or instantiated by clients.
- *
- * @author Felix Meschberger
- * @version $Rev:$, $Date:$
- */
-public class JCRURLConnection extends URLConnection {
-
-    /** Default logging */
-    private static final Log log = LogFactory.getLog(JCRURLConnection.class);
-
-    /**
-     * The name of the header containing the content size (value is
-     * "content-length").
-     */
-    protected static final String CONTENT_LENGTH = "content-length";
-
-    /**
-     * The name of the header containing the MIME type of the content (value is
-     * "content-type").
-     */
-    protected static final String CONTENT_TYPE = "content-type";
-
-    /**
-     * The name of the header containing the content encoding (value is
-     * "content-encoding").
-     */
-    protected static final String CONTENT_ENCODING = "content-encoding";
-
-    /**
-     * The name of the header containing the last modification time stamp of
-     * the content (value is "last-modified").
-     */
-    protected static final String LAST_MODIFIED = "last-modified";
-
-    /**
-     * The default content type name for binary properties accessed by this
-     * connection (value is "application/octet-stream").
-     * @see #connect()
-     */
-    protected static final String APPLICATION_OCTET = "application/octet-stream";
-
-    /**
-     * The default content type name for non-binary properties accessed by this
-     * connection (value is "text/plain").
-     * @see #connect()
-     */
-    protected static final String TEXT_PLAIN = "text/plain";
-
-    /**
-     * The handler associated with the URL of this connection. This handler
-     * provides the connection with access to the repository and the item
-     * underlying the URL.
-     */
-    private final JCRURLHandler handler;
-
-    /**
-     * The {@link FileParts} encapsulating the repository name, workspace name,
-     * item path and optional archive entry path contained in the file part
-     * of the URL. This field is set on-demand by the {@link #getFileParts()}
-     * method.
-     *
-     * @see #getFileParts()
-     */
-    private FileParts fileParts;
-
-    /**
-     * The <code>Item</code> addressed by the path of this connection's URL.
-     * This field is set on-demand by the {@link #getItem()} method.
-     *
-     * @see #getItem()
-     */
-    private Item item;
-
-    /**
-     * The <code>Property</code> associated with the URLConnection. The field
-     * is only set after the connection has been successfully opened.
-     *
-     * @see #getProperty()
-     * @see #connect()
-     */
-    private Property property;
-
-    /**
-     * The (guessed) content type of the data. Currently the content type is
-     * guessed based on the path name of the page or the binary attribute of the
-     * atom.
-     * <p>
-     * Implementations are free to decide, how to define the content type. But
-     * they are required to set the type in the {@link #connect(Ticket)}method.
-     *
-     * @see #getContentType()
-     * @see #connect()
-     */
-    private String contentType;
-
-    /**
-     * The (guessed) content encoding of the data. Currently the content type is
-     * guessed based on the path name of the page or the binary attribute of the
-     * atom.
-     * <p>
-     * Implementations are free to decide, how to define the content type. But
-     * they are required to set the type in the {@link #connect(Ticket)}method.
-     *
-     * @see #getContentEncoding()
-     * @see #connect()
-     */
-    private String contentEncoding;
-
-    /**
-     * The content lentgh of the data, which is the size field of the atom
-     * status information of the base atom.
-     * <p>
-     * Implementations are free to decide, how to define the content length. But
-     * they are required to set the type in the {@link #connect(Ticket)}method.
-     *
-     * @see #getContentLength()
-     * @see #connect()
-     */
-    private int contentLength;
-
-    /**
-     * The last modification time in milliseconds since the epoch (1970/01/01)
-     * <p>
-     * Implementations are free to decide, how to define the last modification
-     * time. But they are required to set the type in the
-     * {@link #connect(Ticket)}method.
-     *
-     * @see #getLastModified()
-     * @see #connect()
-     */
-    private long lastModified;
-
-    /**
-     * Creates an instance of this class for the given <code>url</code>
-     * supported by the <code>handler</code>.
-     *
-     * @param url The URL to base the connection on.
-     * @param handler The URL handler supporting the given URL.
-     */
-    JCRURLConnection(URL url, JCRURLHandler handler) {
-        super(url);
-        this.handler = handler;
-    }
-
-    /**
-     * Returns the current session of URL.
-     * <p>
-     * Calling this method does not require this connection being connected.
-     */
-    public Session getSession() {
-        return handler.getSession();
-    }
-
-    /**
-     * Returns the path to the repository item underlying the URL of this
-     * connection.
-     * <p>
-     * Calling this method does not require this connection being connected.
-     */
-    public String getPath() {
-        return getFileParts().getPath();
-    }
-
-    /**
-     * Returns the repository item underlying the URL of this connection
-     * retrieved through the path set on the URL.
-     * <p>
-     * Calling this method does not require this connection being connected.
-     *
-     * @throws IOException If the item has to be retrieved from the repository
-     *      <code>Session</code> of this connection and an error occurrs. The
-     *      cause of the exception will refer to the exception thrown from the
-     *      repository. If the path addresses a non-existing item, the cause
-     *      will be a <code>PathNotFoundException</code>.
-     */
-    public Item getItem() throws IOException {
-        if (item == null) {
-            try {
-                item = getSession().getItem(getPath());
-            } catch (RepositoryException re) {
-                throw failure("getItem", re.toString(), re);
-            }
-        }
-
-        return item;
-    }
-
-    /**
-     * Returns the repository <code>Property</code> providing the contents of
-     * this connection.
-     * <p>
-     * Calling this method forces the connection to be opened by calling the
-     * {@link #connect()} method.
-     *
-     * @throws IOException May be thrown by the {@link #connect()} method called
-     *      by this method.
-     *
-     * @see #connect()
-     */
-    public Property getProperty() throws IOException {
-        // connect to set the property value
-        connect();
-
-        return property;
-    }
-
-    //---------- URLConnection overwrites -------------------------------------
-
-    /**
-     * Connects to the URL setting the header fields and preparing for the
-     * {@link #getProperty()} and {@link #getInputStream()} methods.
-     * <p>
-     * The following algorithm is applied:
-     * <ol>
-     * <li>The repository item is retrieved from the URL's
-     *      <code>URLHandler</code>.
-     * <li>If the item is a node, the <code>getPrimaryItem</code> method is
-     *      called on that node. If the node has no primary item, the connection
-     *      fails.
-     * <li>If the item - either from the handler or after calling
-     *      <code>getPrimaryItem</code> is still a node, this method fails
-     *      because a <code>Property</code> is required for a successfull
-     *      connection.
-     * <li>If the property found above is a multi-valued property, connection
-     *      fails, because multi-valued properties are not currently supported.
-     * <li>The content length header field is set from the property length
-     *      (<code>Property.getLength())</code>).
-     * <li>If the property's parent node is of node type <code>nt:resource</code>,
-     *      the header fields for the content type, content encoding and last
-     *      modification time are set from the <code>jcr:mimeType</code>,
-     *      <code>jcr:encoding</code>, and <code>jcr:lastModification</code>
-     *      properties. Otherwise the content encoding field is set to
-     *      <code>null</code> and the last modification time is set to zero.
-     *      The content type field is guessed from the name of the URL item.
-     *      If the content type cannot be guessed, it is set to
-     *      <code>application/octet-stream</code> if the property is of binary
-     *      type or <code>text/plain</code> otherwise.
-     * </ol>
-     * <p>
-     * When this method successfully returns, this connection is considered
-     * connected. In case of an exception thrown, the connection is not
-     * connected.
-     *
-     * @throws IOException if an error occurrs retrieving the data property or
-     *      any of the header field value properties or if any other errors
-     *      occurrs. Any cuasing exception is set as the cause of this
-     *      exception.
-     */
-    public synchronized void connect() throws IOException {
-        // todo: The ContentBus URL must also contain version information on
-        if (!connected) {
-
-            // Get hold of the data
-            try {
-                // resolve the URLs item to a property
-                Property property = Util.getProperty(getItem());
-                if (property == null) {
-                    throw failure("connect",
-                        "Multivalue property not supported", null);
-                }
-
-                // values to set later
-                String contentType;
-                String contentEncoding = null; // no defined content encoding
-                int contentLength = (int) property.getLength();
-                long lastModified;
-
-                Node parent = property.getParent();
-                if (parent.isNodeType("nt:resource")) {
-                    lastModified = parent.getProperty("jcr:lastModified").getLong();
-                    contentType = parent.getProperty("jcr:mimeType").getString();
-                    if (parent.hasProperty("jcr:encoding")) {
-                        contentEncoding =
-                            parent.getProperty("jcr:encoding").getString();
-                    }
-                } else {
-                    lastModified = 0;
-                    contentType = guessContentTypeFromName(getItem().getName());
-                    if (contentType == null) {
-                        contentType = (property.getType() == PropertyType.BINARY)
-                                            ? APPLICATION_OCTET
-                                            : TEXT_PLAIN;
-                    }
-                }
-
-                log.debug("connect: Using atom '" + property.getPath() +
-                    "' with content type '" + contentType + "' for " +
-                    String.valueOf(contentLength) + " bytes");
-
-                // set the fields
-                setProperty(property);
-                setContentType(contentType);
-                setContentEncoding(contentEncoding);
-                setContentLength(contentLength);
-                setLastModified(lastModified);
-
-                // mark connection open
-                connected = true;
-
-            } catch (RepositoryException re) {
-                throw failure("connect", re.toString(), re);
-            }
-        }
-    }
-
-    /**
-     * Returns an input stream that reads from this open connection.
-     * <p>
-     * <b>NOTES:</b>
-     * <ul>
-     * <li>Each call to this method returns a new <code>InputStream</code>.
-     * <li>Do not forget to close the return stream when not used anymore for
-     *      the system to be able to free resources.
-     * </ul>
-     * <p>
-     * Calling this method implicitly calls {@link #connect()} to ensure the
-     * connection is open.
-     *
-     * @throws IOException if an error occurrs opening the connection through
-     *      {@link #connect()} or creating the <code>InputStream</code> on the
-     *      repository <code>Property</code>.
-     *
-     * @see #connect()
-     */
-    public InputStream getInputStream() throws IOException {
-        try {
-            return getProperty().getStream();
-        } catch (RepositoryException re) {
-            throw failure("getInputStream", re.toString(), re);
-        }
-    }
-
-    /**
-     * Gets the named header field. This implementation only supports the
-     * Content-Type, Content-Encoding, Content-Length and Last-Modified header
-     * fields. All other names return <code>null</code>.
-     * <p>
-     * Calling this method implicitly calls {@link #connect()} to ensure the
-     * connection is open.
-     *
-     * @param s The name of the header field value to return.
-     *
-     * @return The corresponding value or <code>null</code> if not one of the
-     *      supported fields or the named field's value cannot be retrieved
-     *      from the data source.
-     *
-     * @see #connect()
-     */
-    public String getHeaderField(String s) {
-        try {
-            connect();
-            if (CONTENT_LENGTH.equalsIgnoreCase(s)) {
-                return String.valueOf(contentLength);
-            } else if (CONTENT_TYPE.equalsIgnoreCase(s)) {
-                return contentType;
-            } else if (LAST_MODIFIED.equalsIgnoreCase(s)) {
-                return String.valueOf(lastModified);
-            } else if (CONTENT_ENCODING.equalsIgnoreCase(s)) {
-                return contentEncoding;
-            }
-        } catch (IOException ioe) {
-            log.info("getHeaderField: Problem connecting: " + ioe.toString());
-            log.debug("dump", ioe);
-        }
-
-        return null;
-    }
-
-    /**
-     * Get the header field with the given index. As with
-     * {@link #getHeaderField(String)} only Content-Length, Content-Type,
-     * Content-Encoding, and Last-Modified are supported. All indexes other
-     * than 0, 1, 2 or 3 will return <code>null</code>.
-     * <p>
-     * Calling this method implicitly calls {@link #connect()} to ensure the
-     * connection is open.
-     *
-     * @param i The index of the header field value to return.
-     *
-     * @return The corresponding value or <code>null</code> if not one of the
-     *      supported fields or the known field's value cannot be retrieved
-     *      from the data source.
-     *
-     * @see #connect()
-     */
-    public String getHeaderField(int i) {
-        try {
-            connect();
-            if (i == 0) {
-                return String.valueOf(contentLength);
-            } else if (i == 1) {
-                return contentType;
-            } else if (i == 2) {
-                return String.valueOf(lastModified);
-            } else if (i == 3) {
-                return contentEncoding;
-            }
-        } catch (IOException ioe) {
-            log.info("getHeaderField: Problem connecting: " + ioe.toString());
-            log.debug("dump", ioe);
-        }
-
-        return null;
-    }
-
-    /**
-     * Get the name of the header field with the given index. As with
-     * {@link #getHeaderField(String)} only Content-Length, Content-Type,
-     * Content-Encoding and Last-Modified are supported. All indexes other than
-     * 0, 1, 2 or 3 will return <code>null</code>.
-     * <p>
-     * Calling this method implicitly calls {@link #connect()} to ensure the
-     * connection is open.
-     *
-     * @param i The index of the header field name to return.
-     * @return The corresponding name or <code>null</code> if not one of the
-     *         supported fields.
-     *
-     * @see #connect()
-     */
-    public String getHeaderFieldKey(int i) {
-        try {
-            connect();
-            if (i == 0) {
-                return CONTENT_LENGTH;
-            } else if (i == 1) {
-                return CONTENT_TYPE;
-            } else if (i == 2) {
-                return LAST_MODIFIED;
-            } else if (i == 3) {
-                return CONTENT_ENCODING;
-            }
-        } catch (IOException ioe) {
-            log
-                .info("getHeaderFieldKey: Problem connecting: "
-                    + ioe.toString());
-            log.debug("dump", ioe);
-        }
-        return null;
-    }
-
-    /**
-     * Returns an unmodifiable map of all header fields. Each entry is indexed
-     * with a string key naming the field. The entry's value is an unmodifiable
-     * list of the string values of the respective header field.
-     * <p>
-     * Calling this method implicitly calls {@link #connect()} to ensure the
-     * connection is open.
-     *
-     * @return An unmodifiable map of header fields and their values. The map
-     *      will be empty if an error occurrs connecting through
-     *      {@link #connect()}.
-     *
-     * @see #connect()
-     */
-    public Map getHeaderFields() {
-        Map fieldMap = new HashMap();
-
-        try {
-            connect();
-            fieldMap.put(CONTENT_LENGTH, toList(String.valueOf(contentLength)));
-            fieldMap.put(CONTENT_TYPE, toList(contentType));
-            fieldMap.put(LAST_MODIFIED, toList(String.valueOf(lastModified)));
-
-            // only include if not null))
-            if (contentEncoding != null) {
-                fieldMap.put(CONTENT_ENCODING, toList(contentEncoding));
-            }
-        } catch (IOException ioe) {
-            log.info("getHeaderFields: Problem connecting: " + ioe.toString());
-            log.debug("dump", ioe);
-        }
-
-        return Collections.unmodifiableMap(fieldMap);
-    }
-
-    /**
-     * Returns the content type of the data as a string. This is just a
-     * perfomance convenience overwrite of the base class implementation.
-     * <p>
-     * Calling this method implicitly calls {@link #connect()} to ensure the
-     * connection is open.
-     *
-     * @return The content length of the data or <code>null</code> if the
-     *      content type cannot be derived from the data source.
-     *
-     * @see #connect()
-     */
-    public String getContentType() {
-        try {
-            connect();
-            return contentType;
-        } catch (IOException ioe) {
-            log.info("getContentType: Problem connecting: " + ioe.toString());
-            log.debug("dump", ioe);
-        }
-
-        return null;
-    }
-
-    /**
-     * Returns the content encoding of the data as a string. This is just a
-     * perfomance convenience overwrite of the base class implementation.
-     * <p>
-     * Calling this method implicitly calls {@link #connect()} to ensure the
-     * connection is open.
-     *
-     * @return The content encoding of the data or <code>null</code> if the
-     *      content encoding cannot be derived from the data source.
-     *
-     * @see #connect()
-     */
-    public String getContentEncoding() {
-        try {
-            connect();
-            return contentEncoding;
-        } catch (IOException ioe) {
-            log.info("getContentEncoding: Problem connecting: " + ioe.toString());
-            log.debug("dump", ioe);
-        }
-
-        return null;
-    }
-
-    /**
-     * Returns the content length of the data as an number. This is just a
-     * perfomance convenience overwrite of the base class implementation.
-     * <p>
-     * Calling this method implicitly calls {@link #connect()} to ensure the
-     * connection is open.
-     *
-     * @return The content length of the data or -1 if the content length cannot
-     *         be derived from the data source.
-     *
-     * @see #connect()
-     */
-    public int getContentLength() {
-        try {
-            connect();
-            return contentLength;
-        } catch (IOException ioe) {
-            log.info("getContentLength: Problem connecting: " + ioe.toString());
-            log.debug("dump", ioe);
-        }
-        return -1;
-    }
-
-    /**
-     * Returns the value of the <code>last-modified</code> header field. The
-     * result is the number of milliseconds since January 1, 1970 GMT.
-     * <p>
-     * Calling this method implicitly calls {@link #connect()} to ensure the
-     * connection is open.
-     *
-     * @return the date the resource referenced by this
-     *         <code>URLConnection</code> was last modified, or -1 if not
-     *         known.
-     *
-     * @see #connect()
-     */
-    public long getLastModified() {
-        try {
-            connect();
-            return lastModified;
-        } catch (IOException ioe) {
-            log.info("getLastModified: Problem connecting: " + ioe.toString());
-            log.debug("dump", ioe);
-        }
-        return -1;
-    }
-
-    //---------- implementation helpers ----------------------------------------
-
-    /**
-     * Returns the URL handler of the URL of this connection.
-     */
-    protected JCRURLHandler getHandler() {
-        return handler;
-    }
-
-    /**
-     * Returns the {@link FileParts} object which contains the decomposed file
-     * part of this connection's URL.
-     */
-    FileParts getFileParts() {
-        if (fileParts == null) {
-            fileParts = new FileParts(getURL().getFile());
-        }
-
-        return fileParts;
-    }
-
-    /**
-     * @param contentEncoding The contentEncoding to set.
-     */
-    protected void setContentEncoding(String contentEncoding) {
-        this.contentEncoding = contentEncoding;
-    }
-
-    /**
-     * @param contentLength The contentLength to set.
-     */
-    protected void setContentLength(int contentLength) {
-        this.contentLength = contentLength;
-    }
-
-    /**
-     * @param contentType The contentType to set.
-     */
-    protected void setContentType(String contentType) {
-        this.contentType = contentType;
-    }
-
-    /**
-     * @param lastModified The lastModified to set.
-     */
-    protected void setLastModified(long lastModified) {
-        this.lastModified = lastModified;
-    }
-
-    /**
-     * @param property The property to set.
-     */
-    protected void setProperty(Property property) {
-        this.property = property;
-    }
-
-    //---------- internal -----------------------------------------------------
-
-    /**
-     * Logs the message and returns an IOException to be thrown by the caller.
-     * The log message contains the caller name, the external URL form and the
-     * message while the IOException is only based on the external URL form and
-     * the message given.
-     *
-     * @param method The method in which the error occurred. This is used for
-     *            logging.
-     * @param message The message to log and set in the exception
-     * @param cause The cause of failure. May be <code>null</code>.
-     *
-     * @return The IOException the caller may throw.
-     */
-    protected IOException failure(String method, String message, Throwable cause) {
-        log.info(method + ": URL: " + url.toExternalForm() + ", Reason: "
-            + message);
-
-        if (cause != null) {
-            log.debug("dump", cause);
-        }
-
-        IOException ioe = new IOException(url.toExternalForm() + ": " + message);
-        ioe.initCause(cause);
-        return ioe;
-    }
-
-    /**
-     * Returns an unmodifiable list containing just the given string value.
-     */
-    private List toList(String value) {
-        String[] values = { value };
-        List valueList = Arrays.asList(values);
-        return Collections.unmodifiableList(valueList);
-    }
-}
\ No newline at end of file
diff --git a/contrib/classloader/src/main/java/org/apache/jackrabbit/net/JCRURLHandler.java b/contrib/classloader/src/main/java/org/apache/jackrabbit/net/JCRURLHandler.java
deleted file mode 100644
index c045bb8..0000000
--- a/contrib/classloader/src/main/java/org/apache/jackrabbit/net/JCRURLHandler.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.net;
-
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.URLStreamHandler;
-
-import javax.jcr.Session;
-
-/**
- * The <code>JCRURLHandler</code> is the <code>URLStreamHandler</code> for
- * JCR Repository URLs identified by the scheme <code>jcr</code>.
- * <p>
- * JCR Repository URLs have not been standardized yet and may only be created
- * in the context of an existing <code>Session</code>. Therefore this handler
- * is not globally available and JCR Repository URLs may only be created through
- * the factory methods in the {@link org.apache.jackrabbit.net.URLFactory}
- * class.
- * <p>
- * This class is not intended to be subclassed or instantiated by clients.
- *
- * @author Felix Meschberger
- * @version $Rev:$, $Date:$
- *
- * @see org.apache.jackrabbit.net.JCRURLConnection
- * @see org.apache.jackrabbit.net.URLFactory
- * @see org.apache.jackrabbit.net.URLFactory#createURL(Session, String)
- */
-class JCRURLHandler extends URLStreamHandler {
-
-    /**
-     * The session used to create this handler, which is also used to open
-     * the connection object.
-     *
-     * @see #getSession()
-     */
-    private final Session session;
-
-    /**
-     * Creates a new instance of the <code>JCRURLHandler</code> with the
-     * given session.
-     *
-     * @param session The <code>Session</code> supporting this handler. This
-     *      must not be <code>null</code>.
-     *
-     * @throws NullPointerException if <code>session</code> is <code>null</code>.
-     */
-    JCRURLHandler(Session session) {
-        if (session == null) {
-            throw new NullPointerException("session");
-        }
-
-        this.session = session;
-    }
-
-    /**
-     * Returns the session supporting this handler.
-     */
-    Session getSession() {
-        return session;
-    }
-
-    //---------- URLStreamHandler abstracts ------------------------------------
-
-    /**
-     * Gets a connection object to connect to an JCR Repository URL.
-     *
-     * @param url The JCR Repository URL to connect to.
-     *
-     * @return An instance of the {@link JCRURLConnection} class.
-     *
-     * @see JCRURLConnection
-     */
-    protected URLConnection openConnection(URL url) {
-        return new JCRURLConnection(url, this);
-    }
-
-    /**
-     * Checks the new <code>authority</code> and <code>path</code> before
-     * actually setting the values on the url calling the base class
-     * implementation.
-     * <p>
-     * We check the authority to not have been modified from the original URL,
-     * as the authority is dependent on the repository <code>Session</code> on
-     * which this handler is based and which was used to create the original
-     * URL. Likewise the repository and workspace name parts of the path must
-     * not have changed.
-     *
-     * @param u the URL to modify.
-     * @param protocol the protocol name.
-     * @param host the remote host value for the URL.
-     * @param port the port on the remote machine.
-     * @param authority the authority part for the URL.
-     * @param userInfo the userInfo part of the URL.
-     * @param path the path component of the URL.
-     * @param query the query part for the URL.
-     * @param ref the reference.
-     *
-     * @throws IllegalArgumentException if the authority or the repository name
-     *             or workspace name parts of the path has changed.
-     */
-    protected void setURL(URL u, String protocol, String host, int port,
-        String authority, String userInfo, String path, String query, String ref) {
-
-        // check for authority
-        if (u.getAuthority() != authority) {
-            if (u.getAuthority() == null) {
-                if (authority != null) {
-                    throw new IllegalArgumentException("Authority " +
-                        authority + " not supported by this handler");
-                }
-            } else if (!u.getAuthority().equals(authority)) {
-                throw new IllegalArgumentException("Authority " +
-                    authority + " not supported by this handler");
-            }
-        }
-
-        // check for repository and/or workspace modifications
-        FileParts newParts = new FileParts(path);
-        if (!"_".equals(newParts.getRepository())) {
-            throw new IllegalArgumentException("Repository " +
-                newParts.getRepository() + " not supported by this handler");
-        }
-        if (!session.getWorkspace().getName().equals(newParts.getWorkspace())) {
-            throw new IllegalArgumentException("Workspace " +
-                newParts.getWorkspace() + " not supported by this handler");
-        }
-
-        // finally set the new values on the URL
-        super.setURL(u, protocol, host, port, authority, userInfo, path, query,
-            ref);
-    }
-}
\ No newline at end of file
diff --git a/contrib/classloader/src/main/java/org/apache/jackrabbit/net/URLFactory.java b/contrib/classloader/src/main/java/org/apache/jackrabbit/net/URLFactory.java
deleted file mode 100644
index 1edc7be..0000000
--- a/contrib/classloader/src/main/java/org/apache/jackrabbit/net/URLFactory.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.net;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-
-import javax.jcr.Session;
-
-/**
- * The <code>URLFactory</code> class provides factory methods for creating
- * JCR Repository and JCRJar URLs.
- * <p>
- * This class is not intended to be subclassed or instantiated by clients.
- *
- * @author Felix Meschberger
- * @version $Rev:$, $Date:$
- */
-public final class URLFactory {
-
-    /**
-     * The scheme for JCR Repository URLs (value is "jcr").
-     */
-    public static final String REPOSITORY_SCHEME = "jcr";
-
-    /**
-     * The scheme for JCRJar URLs (value is "jar").
-     */
-    public static final String REPOSITORY_JAR_SCHEME = "jar";
-
-    /** Private default constructor, not to be instantiated */
-    private URLFactory() {
-    }
-
-    /**
-     * Creates a new JCR Repository URL for the given session and item path.
-     *
-     * @param session The repository session providing access to the item.
-     * @param path The absolute path to the item. This must be an absolute
-     *      path with a leading slash character. If this is <code>null</code>
-     *      the root node path - <code>/</code> - is assumed.
-     *
-     * @return The JCR Repository URL
-     *
-     * @throws MalformedURLException If an error occurrs creating the
-     *      <code>URL</code> instance.
-     */
-    public static URL createURL(Session session, String path)
-        throws MalformedURLException {
-
-        return new URL(REPOSITORY_SCHEME, "", -1,
-            new FileParts(session, path, null).toString(),
-            new JCRURLHandler(session));
-    }
-
-    /**
-     * Creates a new JCRJar URL for the given session, archive and entry.
-     *
-     * @param session The repository session providing access to the archive.
-     * @param path The absolute path to the archive. This must either be the
-     *      property containing the archive or an item which resolves to such
-     *      a property through its primary item chain. This must be an absolute
-     *      path with a leading slash character. If this is <code>null</code>
-     *      the root node path - <code>/</code> - is assumed.
-     * @param entry The entry within the archive. If <code>null</code>, the URL
-     *      provides access to the archive itself.
-     *
-     * @return The JCRJar URL
-     *
-     * @throws MalformedURLException If an error occurrs creating the
-     *      <code>URL</code> instance.
-     */
-    public static URL createJarURL(Session session, String path, String entry)
-        throws MalformedURLException {
-
-        JCRJarURLHandler handler = new JCRJarURLHandler(session);
-        String file = createURL(session, path).toExternalForm();
-
-        // append entry spec if not null
-        if (entry != null) {
-            file += "!/" + entry;
-        }
-
-        return new URL(REPOSITORY_JAR_SCHEME, "", -1, file, handler);
-    }
-}
diff --git a/contrib/classloader/src/main/resources/org/apache/jackrabbit/classloader/type.cnd b/contrib/classloader/src/main/resources/org/apache/jackrabbit/classloader/type.cnd
deleted file mode 100644
index 182efe9..0000000
--- a/contrib/classloader/src/main/resources/org/apache/jackrabbit/classloader/type.cnd
+++ /dev/null
@@ -1,41 +0,0 @@
-/*

- * The "type.cnd" file contains the (mixin) node type definition which is

- * required by the ExpandingArchiveClassPathEntry class, which supports

- * on-demand unpacking of JAR/ZIP archives for enhanced performances of class

- * path access.

- *

- * NOTE: This file is read through a reader with encoding "ISO-8859-1".

- *

- * @author Felix Meschberger

- * @version $Rev:$, $Date:$

- * @see org.apache.jackrabbit.classloader.ExpandingArchiveClassPathEntry

- * @see org.apache.jackrabbit.classloader.NodeTypeSupport

- */

-

-// The "rep" namespace is expected to be present in the repository.

-// For Jackrabbit based repositories, this is true, for other repositories, we

-// present the namespace declaration here.

-// This declaration is inline with the Jackrabbit internal namespace declaration

-// for the "rep" namespace.

-<rep = 'internal'>

-<nt = 'http://www.jcp.org/jcr/nt/1.0'>

-

-// The node containing the JAR/ZIP archive is tagged with this mixin node

-// type to singal, that the archive has been unpacked into the subtree

-// rooted at the "rep:jarContents" child node.

-[rep:jarFile] mixin

-

-// The "rep:jarExpanded" property is set to the timestamp of the date/time at

-// which the JAR/ZIP archive has been expanded.

-- rep:jarExpanded (date)

-	mandatory copy

-

-// The "rep:jarContents" is the root node of the subtree into which the archive

-// is unpacked. There is no explicit type requirement for the type of this

-// node, except, that it must be allowed nodes of type "nt:file" and "nt:folder"

-// below. Unpacking the archive in the ExpandingArchiveClassPathEntry class

-// will create the "rep:jarContents" node as an nt:folder node and create files

-// and folders contained in the archive as "nt:file" and "nt:folder" nodes,

-// respectively.

-+ rep:jarContents (nt:base) = nt:folder

-	mandatory copy
\ No newline at end of file
diff --git a/contrib/classloader/src/test/java/org/apache/jackrabbit/classloader/ClassLoaderTestBase.java b/contrib/classloader/src/test/java/org/apache/jackrabbit/classloader/ClassLoaderTestBase.java
deleted file mode 100644
index c51ea07..0000000
--- a/contrib/classloader/src/test/java/org/apache/jackrabbit/classloader/ClassLoaderTestBase.java
+++ /dev/null
@@ -1,480 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.classloader;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.HashSet;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Properties;
-import java.util.Set;
-import java.util.StringTokenizer;
-
-import javax.jcr.Credentials;
-import javax.jcr.Item;
-import javax.jcr.Node;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.PropertyType;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.SimpleCredentials;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-
-import junit.framework.TestCase;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.core.RepositoryImpl;
-import org.apache.jackrabbit.core.config.RepositoryConfig;
-import org.apache.jackrabbit.core.jndi.provider.DummyInitialContextFactory;
-
-import com.sun.corba.se.ActivationIDL.Repository;
-import com.sun.org.omg.CORBA.ExcDescriptionSeqHelper;
-
-/**
- * The <code>ClassLoaderTestBase</code> TODO
- *
- * @author fmeschbe
- * @version $Rev:$, $Date$
- */
-public class ClassLoaderTestBase extends TestCase {
-
-    /** Logger for test cases */
-    protected static final Log log =
-        LogFactory.getLog("org.apache.jackrabbit.classloader.test");
-
-    protected static final String WORKSPACE = "default";
-    protected static final String USER = "admin";
-
-    protected static final String PROVIDER_URL = "ClassLoader";
-    protected static final String REPOSITORY_NAME = "ClassLoaderRepository";
-
-    protected RepositoryImpl repository;
-    protected Session session;
-
-    private Set createdItems = new HashSet();
-
-    public ClassLoaderTestBase() {
-        super();
-    }
-
-    public ClassLoaderTestBase(String name) {
-        super(name);
-    }
-
-    protected void setUp() throws Exception {
-        super.setUp();
-
-        if (!"repositoryStart".equals(getName())) {
-            Context ctx = getInitialContext();
-            repository = (RepositoryImpl) ctx.lookup(REPOSITORY_NAME);
-
-            Credentials creds = new SimpleCredentials(USER, USER.toCharArray());
-            session = repository.login(creds, WORKSPACE);
-        }
-    }
-
-    public void repositoryStart() throws Exception {
-        InputStream config = getClass().getResourceAsStream("/repository.xml");
-        String home = new File("cltest").getAbsolutePath();
-        RepositoryConfig rc = RepositoryConfig.create(config, home);
-        RepositoryImpl repository = RepositoryImpl.create(rc);
-
-        try {
-            Context ctx = getInitialContext();
-            ctx.bind(REPOSITORY_NAME, repository);
-        } catch (NamingException ne) {
-            repository.shutdown();
-            throw ne;
-        }
-    }
-
-    public void repositoryStop() throws Exception {
-        // this is special, logout here and clean repository
-        disconnect();
-
-        if (repository != null) {
-            repository.shutdown();
-            repository = null;
-        }
-
-        Context ctx = getInitialContext();
-        ctx.unbind(REPOSITORY_NAME);
-    }
-
-    protected void tearDown() throws Exception {
-        disconnect();
-        repository = null;
-        super.tearDown();
-    }
-
-    private Context getInitialContext() throws NamingException {
-        Hashtable env = new Hashtable();
-        env.put(Context.INITIAL_CONTEXT_FACTORY,
-            DummyInitialContextFactory.class.getName());
-        env.put(Context.PROVIDER_URL, PROVIDER_URL);
-
-        return new InitialContext(env);
-    }
-
-    private void disconnect() {
-        if (session != null) {
-            clearRepository(session);
-            session.logout();
-            session = null;
-        }
-    }
-
-    //---------- RepositoryLoader ----------------------------------------------
-
-    protected void loadRepository(Session session, InputStream ins) {
-        if (ins == null) {
-            ins = getClass().getResourceAsStream("/preload.properties");
-            if (ins == null) {
-                log.warn("Cannot find preload properties /preload.properties");
-                return;
-            }
-        }
-
-        List keys = new ArrayList();
-        Properties props = new Properties();
-        BufferedReader reader = null;
-        try {
-            reader = new BufferedReader(new InputStreamReader(ins));
-            while (true) {
-                String line = reader.readLine();
-                if (line == null) {
-                    break;
-                }
-
-                // cut off line comment
-                int comment = line.indexOf('#');
-                if (comment >= 0) {
-                    line = line.substring(0, comment);
-                }
-
-                // trim leading and trailing whitespace
-                line = line.trim();
-
-                // ignore line of empty
-                if (line.length() == 0) {
-                    continue;
-                }
-
-                int sep = line.indexOf('=');
-                if (sep < 0) {
-                    continue;
-                }
-
-                String key = line.substring(0, sep).trim();
-
-                StringBuffer buf = new StringBuffer(line.substring(sep+1).trim());
-
-                while (line.endsWith("\\")) {
-                    // cut off last back slash
-                    buf.setLength(buf.length()-1);
-
-                    line = reader.readLine();
-                    if (line == null) {
-                        break;
-                    }
-
-                    buf.append(line);
-                }
-
-                key = loadConvert(key);
-                String value = loadConvert(buf.toString());
-
-                keys.add(key);
-                props.setProperty(key, value);
-            }
-        } catch (IOException ioe) {
-            // ignore
-        } finally {
-            if (reader != null) {
-                try {
-                    reader.close();
-                } catch (IOException ignore) {}
-            }
-
-            try {
-                ins.close();
-            } catch (IOException ignore) {}
-        }
-
-        for (Iterator ki=keys.iterator(); ki.hasNext(); ) {
-            String path = (String) ki.next();
-            String config = props.getProperty(path);
-            StringTokenizer tokener = new StringTokenizer(config, ",");
-            if (!tokener.hasMoreTokens()) {
-                continue;
-            }
-
-            Node parent = null;
-            try {
-                parent = getParent(session, path);
-            } catch (RepositoryException re) {
-                log.warn("Cannot get parent of " + path, re);
-            }
-
-            if (parent == null) {
-                continue;
-            }
-
-            try {
-                String type = tokener.nextToken();
-                if ("n".equalsIgnoreCase(type)) {
-                    loadNode(parent, getName(path), tokener);
-                    createdItems.add(path);
-                } else if ("p".equalsIgnoreCase(type)) {
-                    loadProperty(parent, getName(path), tokener);
-                }
-            } catch (RepositoryException re) {
-                log.warn("Cannot create item " + path, re);
-            }
-        }
-
-        try {
-            if (session.hasPendingChanges()) {
-                session.save();
-            }
-        } catch (RepositoryException re) {
-            log.warn("Cannot save session", re);
-        } finally {
-            try {
-                if (session.hasPendingChanges()) {
-                    session.refresh(false);
-                }
-            } catch (RepositoryException re) {
-                log.warn("Cannot even refresh the session");
-            }
-        }
-    }
-
-    protected void clearRepository(Session session) {
-        for (Iterator ii=createdItems.iterator(); ii.hasNext(); ) {
-            String path = (String) ii.next();
-            try {
-                if (!session.itemExists(path)) {
-                    continue;
-                }
-
-                session.getItem(path).remove();
-            } catch (RepositoryException re) {
-                log.info("Cannot remove Item " + path + ": " + re);
-            }
-        }
-
-        try {
-            session.save();
-        } catch (RepositoryException re) {
-            log.warn("Cannot save removals", re);
-        }
-
-        createdItems.clear();
-    }
-
-    private void loadNode(Node parent, String name,
-            StringTokenizer config) throws RepositoryException {
-
-        // node type
-        String primaryType;
-        if (config.hasMoreTokens()) {
-            primaryType = config.nextToken();
-        } else {
-            primaryType = "nt:unstructured";
-        }
-
-        Node node = parent.addNode(name, primaryType);
-
-        // content URL
-        if (config.hasMoreTokens()) {
-            String urlString = config.nextToken();
-            try {
-                URL url;
-                if (urlString.startsWith("classpath:")) {
-                    urlString = urlString.substring("classpath:".length());
-                    url = getClass().getResource(urlString);
-                } else {
-                    url = new URL(urlString);
-                }
-                URLConnection connection = url.openConnection();
-                makeFileNode(node, connection);
-            } catch (IOException ioe) {
-                System.err.println(ioe);
-            }
-        }
-    }
-
-    private void loadProperty(Node parent, String name,
-            StringTokenizer config) throws RepositoryException {
-        String typeName;
-        if (config.hasMoreTokens()) {
-            typeName = config.nextToken();
-        } else {
-            typeName = "";
-        }
-        int type;
-        try {
-            type = PropertyType.valueFromName(typeName);
-        } catch (IllegalArgumentException iae) {
-            type = PropertyType.STRING;
-        }
-
-        String stringValue = ""; // default value
-        if (config.hasMoreTokens()) {
-            stringValue = config.nextToken();
-        }
-
-        /* Property prop = */ parent.setProperty(name, stringValue, type);
-    }
-
-    static void makeFileNode(Node node, URLConnection content)
-            throws RepositoryException {
-
-        Node contentNode = node.addNode("jcr:content", "nt:resource");
-        InputStream ins = null;
-        try {
-            ins = content.getInputStream();
-            contentNode.setProperty("jcr:data", ins);
-        } catch (IOException ioe) {
-            // ignore, but redefine content data
-            contentNode.setProperty("jcr:data", "mockdata", PropertyType.BINARY);
-        } finally {
-            if (ins != null) {
-                try {
-                    ins.close();
-                } catch (IOException ioe) {}
-            }
-        }
-
-        Calendar cal = Calendar.getInstance();
-        cal.setTimeInMillis(content.getLastModified());
-        contentNode.setProperty("jcr:lastModified", cal);
-
-        String mimeType = content.getContentType();
-        if (mimeType == null || mimeType.toLowerCase().indexOf("unknown") >= 0) {
-            mimeType = URLConnection.guessContentTypeFromName(node.getName());
-        }
-        if (mimeType == null) {
-            mimeType = "application/octet-stream";
-        }
-        contentNode.setProperty("jcr:mimeType", mimeType);
-
-        String encoding = content.getContentEncoding();
-        if (encoding != null) {
-            contentNode.setProperty("jcr:encoding", encoding);
-        }
-    }
-
-    static Node getParent(Session session, String path)
-            throws RepositoryException {
-
-        int lastSlash = path.lastIndexOf('/');
-        if (lastSlash < 0) {
-            return null;
-        }
-
-        String parentPath = path.substring(0, lastSlash);
-        if (parentPath.length() == 0) {
-            return session.getRootNode();
-        }
-
-        try {
-            Item item = session.getItem(parentPath);
-            if (item.isNode()) {
-                return (Node) item;
-            }
-        } catch (PathNotFoundException pnfe) {
-
-            // create the intermediate node as an unstructured node
-            Node parent = getParent(session, parentPath);
-            if (parent != null) {
-                lastSlash = parentPath.lastIndexOf('/');
-                if (lastSlash < 0) {
-                    return null;
-                }
-                String name = parentPath.substring(lastSlash+1);
-
-                return parent.addNode(name, "nt:folder");
-            }
-        }
-
-        return null;
-    }
-
-    private String getName(String path) {
-        return path.substring(path.lastIndexOf('/')+1);
-    }
-
-    private String loadConvert(String theString) {
-        char aChar;
-        int len = theString.length();
-        StringBuffer outBuffer = new StringBuffer(len);
-
-        for (int x=0; x<len; ) {
-            aChar = theString.charAt(x++);
-            if (aChar == '\\') {
-                aChar = theString.charAt(x++);
-                if (aChar == 'u') {
-                    // Read the xxxx
-                    int value=0;
-            for (int i=0; i<4; i++) {
-                aChar = theString.charAt(x++);
-                switch (aChar) {
-                  case '0': case '1': case '2': case '3': case '4':
-                  case '5': case '6': case '7': case '8': case '9':
-                     value = (value << 4) + aChar - '0';
-                 break;
-              case 'a': case 'b': case 'c':
-                          case 'd': case 'e': case 'f':
-                 value = (value << 4) + 10 + aChar - 'a';
-                 break;
-              case 'A': case 'B': case 'C':
-                          case 'D': case 'E': case 'F':
-                 value = (value << 4) + 10 + aChar - 'A';
-                 break;
-              default:
-                              throw new IllegalArgumentException(
-                                           "Malformed \\uxxxx encoding.");
-                        }
-                    }
-                    outBuffer.append((char)value);
-                } else {
-                    if (aChar == 't') aChar = '\t';
-                    else if (aChar == 'r') aChar = '\r';
-                    else if (aChar == 'n') aChar = '\n';
-                    else if (aChar == 'f') aChar = '\f';
-                    outBuffer.append(aChar);
-                }
-            } else
-                outBuffer.append(aChar);
-        }
-        return outBuffer.toString();
-    }
-}
diff --git a/contrib/classloader/src/test/java/org/apache/jackrabbit/classloader/DynamicRepositoryClassLoaderTest.java b/contrib/classloader/src/test/java/org/apache/jackrabbit/classloader/DynamicRepositoryClassLoaderTest.java
deleted file mode 100644
index f769401..0000000
--- a/contrib/classloader/src/test/java/org/apache/jackrabbit/classloader/DynamicRepositoryClassLoaderTest.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.classloader;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.Enumeration;
-
-import org.apache.log4j.Logger;
-
-import sun.tools.jar.resources.jar_fr;
-
-/**
- * The <code>DynamicRepositoryClassLoaderTest</code> class
- *
- * @author Felix Meschberger
- */
-public class DynamicRepositoryClassLoaderTest extends ClassLoaderTestBase {
-
-    private static final String CLASSES_FOLDER = "/node1/classes";
-    private static final String JAR_FILE = "/node1/mock.jar";
-    private static final String CLASS_FILE = "org/apache/jackrabbit/classloader/Util.class";
-    private static final String JAR_FILE_ENTRY = "mock/aDir/anotherFile.txt";
-    private static final String NON_EXISTING_JAR_FILE_ENTRY = "mock/aDir/missingFile.txt";
-
-    private static final String[] handles = { CLASSES_FOLDER, JAR_FILE };
-
-    private DynamicRepositoryClassLoader loader;
-
-    protected void setUp() throws Exception {
-        super.setUp();
-
-        loadRepository(session, null);
-
-        loader = new DynamicRepositoryClassLoader(session, handles, null);
-    }
-
-    protected void tearDown() throws Exception {
-        if (loader != null) {
-            loader.destroy();
-            loader = null;
-        }
-
-        super.tearDown();
-    }
-
-    public void testGetURLs() {
-        URL[] urls = loader.getURLs();
-
-        /*
-         * Expected URLs
-         *   urls[0] = jcr:/_/default/node1/classes/
-         *   urls[1] = jar:jcr:/_/default/node1/mock.jar
-         */
-
-        assertNotNull("Class loader URLs", urls);
-        assertEquals("Number of class path entries", handles.length, urls.length);
-        assertEquals("URL " + CLASSES_FOLDER, "jcr:/_/" + WORKSPACE + CLASSES_FOLDER + "/", urls[0].toString());
-        assertEquals("URL " + JAR_FILE, "jar:jcr:/_/" + WORKSPACE + JAR_FILE, urls[1].toString());
-    }
-
-    public void testClassFile() {
-        URL resource = loader.getResource(CLASS_FILE);
-        assertNotNull("Resource " + CLASS_FILE, resource);
-    }
-
-    public void testJarEntry() {
-        URL resource = loader.getResource(JAR_FILE_ENTRY);
-        assertNotNull("Resource " + JAR_FILE_ENTRY, resource);
-
-        resource = loader.getResource(NON_EXISTING_JAR_FILE_ENTRY);
-        assertNull("Resource " + NON_EXISTING_JAR_FILE_ENTRY + " not expected", resource);
-    }
-
-    public void testResources() throws IOException {
-        Enumeration res = loader.getResources(CLASS_FILE);
-        assertTrue("At least one resource " + CLASS_FILE, res.hasMoreElements());
-
-        URL url = (URL) res.nextElement();
-        assertNotNull(url);
-
-        assertFalse("Only expecint one resource " + CLASS_FILE, res.hasMoreElements());
-    }
-}
diff --git a/contrib/classloader/src/test/java/org/apache/jackrabbit/classloader/ExpandingArchiveClassPathEntryTest.java b/contrib/classloader/src/test/java/org/apache/jackrabbit/classloader/ExpandingArchiveClassPathEntryTest.java
deleted file mode 100644
index e592eaa..0000000
--- a/contrib/classloader/src/test/java/org/apache/jackrabbit/classloader/ExpandingArchiveClassPathEntryTest.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.classloader;
-
-import java.io.IOException;
-import java.net.URL;
-import java.util.Date;
-
-import javax.jcr.Node;
-import javax.jcr.Property;
-import javax.jcr.RepositoryException;
-import javax.jcr.nodetype.NoSuchNodeTypeException;
-
-import org.apache.jackrabbit.util.Text;
-
-public class ExpandingArchiveClassPathEntryTest extends ClassLoaderTestBase {
-
-    private static final String NODE_TYPE = "rep:jarFile";
-
-    private static final String ROOT = "/test";
-    private static final String JAR_PATH = ROOT + "/mock.jar";
-
-    protected void setUp() throws Exception {
-        super.setUp();
-
-        if (session.itemExists(ROOT)) {
-            log.info("Removing old test root entry");
-            session.getItem(ROOT).remove();
-            session.save();
-        }
-    }
-
-    protected void tearDown() throws Exception {
-        if (session.itemExists(ROOT)) {
-            session.getItem(ROOT).remove();
-            session.save();
-        }
-
-        super.tearDown();
-    }
-
-    public void testCanExpand() throws RepositoryException {
-        // check for the node type - may or may not exist
-        try {
-            session.getWorkspace().getNodeTypeManager().getNodeType(NODE_TYPE);
-            log.info("Node type " + NODE_TYPE + " already registered");
-        } catch (NoSuchNodeTypeException nsoe) {
-            // expected behaviour
-            log.info("Node type " + NODE_TYPE + " not registered yet");
-        }
-
-        boolean canExpand = ExpandingArchiveClassPathEntry.canExpandArchives(session);
-        assertTrue("Expecting archives to be expandable", canExpand);
-
-        // check for the node type - must exist
-        session.getWorkspace().getNodeTypeManager().getNodeType(NODE_TYPE);
-        log.info("Node type " + NODE_TYPE + " already registered");
-    }
-
-    public void testExpand() throws IOException, RepositoryException {
-        URL url = getClass().getResource("/mock.jar");
-
-        Node parent = getParent(session, JAR_PATH);
-        Node jar = parent.addNode(Text.getName(JAR_PATH), "nt:file");
-        makeFileNode(jar, url.openConnection());
-        session.save();
-
-        Property prop = Util.getProperty(session.getItem(JAR_PATH));
-
-        ExpandingArchiveClassPathEntry pe =
-            new ExpandingArchiveClassPathEntry(prop, JAR_PATH);
-
-        ClassLoaderResource res = pe.getResource("mock/aDir/anotherFile.txt");
-        assertNotNull("anotherFile.txt expected to exist", res);
-
-        url = res.getURL();
-        assertNotNull("anotherFile's URL missing", url);
-
-        String data = new String(res.getBytes());
-        log.info("URL : " + url);
-        log.info("Path: " + res.getPath());
-        log.info("Prop: " + res.getProperty().getPath());
-        log.info("Data: '" + data + "'");
-        log.info("Size: " + res.getContentLength() + " (bytes: " + res.getBytes().length + ")");
-        log.info("Time: " + new Date(res.getLastModificationTime()));
-    }
-}
diff --git a/contrib/classloader/src/test/java/org/apache/jackrabbit/classloader/PatternPathTest.java b/contrib/classloader/src/test/java/org/apache/jackrabbit/classloader/PatternPathTest.java
deleted file mode 100644
index a226b8d..0000000
--- a/contrib/classloader/src/test/java/org/apache/jackrabbit/classloader/PatternPathTest.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.classloader;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import javax.jcr.Credentials;
-import javax.jcr.Node;
-import javax.jcr.NodeIterator;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.SimpleCredentials;
-
-/**
- * The <code>PatternPathTest</code> class
- *
- * @author Felix Meschberger
- */
-public class PatternPathTest extends ClassLoaderTestBase {
-
-    private static final String DUMMY = "/dummy/classes";
-    private static final String[] patterns = {
-            "/apps|libs/*/classes",
-            "/*/classes", null, "", DUMMY, "/", "*", "|",
-            "/apps/developers/fmeschbe/lib/*.doc" };
-    private static final Set included;
-    private static final Set excluded;
-
-    static {
-        included = new HashSet();
-
-        // matches *
-        included.add("/apps");
-        included.add("/libs");
-        included.add("/jcr:system");       // Repository child node
-        included.add("/jcr:primaryType");  // Repository property
-
-        // matches "/"
-        included.add("/");
-
-        // matches: "/apps|libs/*/classes"
-        included.add("/apps/CFC/classes");
-        included.add("/apps/Forms/classes");
-        included.add("/apps/playground/classes");
-        included.add("/libs/CFC/classes");
-        included.add("/libs/Forms/classes");
-
-        // matches "/*/classes"
-        included.add(DUMMY);
-
-        // matches "/apps/developers/fmeschbe/lib/*.doc"
-        included.add("/apps/developers/fmeschbe/lib/test1.doc");
-        included.add("/apps/developers/fmeschbe/lib/other.doc");
-
-        excluded = new HashSet();
-        excluded.add("/apps/developers/fmeschbe/classes");
-        excluded.add("/libs/developers/fmeschbe/classes");
-
-        excluded.add("/apps/developers/fmeschbe/lib/readme.txt");
-    }
-
-    protected void setUp() throws Exception {
-        super.setUp();
-
-        InputStream ins = getClass().getResourceAsStream("PatternPathTest.preload.properties");
-        if (ins != null) {
-            try {
-                loadRepository(session, ins);
-            } finally {
-                try {
-                    ins.close();
-                } catch (IOException ignore) {}
-            }
-        }
-    }
-
-    protected void tearDown() throws Exception {
-        if (session != null) {
-            clearRepository(session);
-            session.logout();
-            session = null;
-        }
-
-        super.tearDown();
-    }
-
-    public void testCreation() {
-        PatternPath ppl = new PatternPath(session, patterns);
-
-        // check completeness
-        Set pplSet = new HashSet(Arrays.asList(ppl.getPath()));
-        for (int i=0; i < patterns.length; i++) {
-            String pattern = patterns[i];
-            if (pattern == null || pattern.length() == 0) {
-                assertFalse("Empty Entry must not be conained", pplSet.contains(pattern));
-            } else {
-                assertTrue("Non Empty Entry must be contained", pplSet.contains(pattern));
-            }
-        }
-    }
-
-    public void testExpandedPaths() throws RepositoryException {
-        PatternPath ppl = new PatternPath(session, patterns);
-
-        // expand the path
-        List paths = ppl.getExpandedPaths();
-
-        // check whether all expanded entries are expected
-        Set expected = new HashSet(included);
-        assertEquals("Number of path entries", expected.size(), paths.size());
-        for (Iterator pi=paths.iterator(); pi.hasNext(); ) {
-            String entry = (String) pi.next();
-            assertTrue("Unexpected path entry " + entry, expected.remove(entry));
-        }
-
-        // check whether the expected inclusions have all been in the expansion
-        assertTrue("Not all inclusions: " + expected, expected.isEmpty());
-
-        // check that no exlusions are included
-        for (Iterator pi=paths.iterator(); pi.hasNext(); ) {
-            String entry = (String) pi.next();
-            assertFalse("Path entry must be excluded" + entry, excluded.contains(entry));
-        }
-    }
-
-    public void testMatchPath() {
-        PatternPath ppl = new PatternPath(session, patterns);
-
-        // paths expected to match
-        for (Iterator ii=included.iterator(); ii.hasNext(); ) {
-            String path = (String) ii.next();
-            assertTrue("Expect Match: " + path, ppl.matchPath(path));
-        }
-
-        // paths expected to not match
-        for (Iterator ei=excluded.iterator(); ei.hasNext(); ) {
-            String path = (String) ei.next();
-            assertFalse("Unexpect Match: " + path, ppl.matchPath(path));
-        }
-    }
-}
diff --git a/contrib/classloader/src/test/java/org/apache/jackrabbit/classloader/TestAll.java b/contrib/classloader/src/test/java/org/apache/jackrabbit/classloader/TestAll.java
deleted file mode 100644
index 092a86d..0000000
--- a/contrib/classloader/src/test/java/org/apache/jackrabbit/classloader/TestAll.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.classloader;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-public class TestAll {
-
-    public static Test suite() {
-        TestSuite suite = new TestSuite("Test for Jackrabbit Class Loader");
-        //$JUnit-BEGIN$
-        suite.addTest(new ClassLoaderTestBase("repositoryStart"));
-        suite.addTestSuite(PatternPathTest.class);
-        suite.addTestSuite(ExpandingArchiveClassPathEntryTest.class);
-        suite.addTestSuite(DynamicRepositoryClassLoaderTest.class);
-        suite.addTest(new ClassLoaderTestBase("repositoryStop"));
-        //$JUnit-END$
-        return suite;
-    }
-}
diff --git a/contrib/classloader/src/test/resources/log4j.properties b/contrib/classloader/src/test/resources/log4j.properties
deleted file mode 100644
index 9abbe76..0000000
--- a/contrib/classloader/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-# Set root logger level to DEBUG and its only appender to A1.
-log4j.rootLogger=INFO, file
-#log4j.rootLogger=DEBUG, stdout, file
-#log4j.rootLogger=ERROR, stdout, file
-
-log4j.logger.org.apache.jackrabbit.classloader.test=DEBUG
-
-# 'stdout' is set to be a ConsoleAppender.
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-
-# 'stdout' uses PatternLayout
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%d{dd.MM.yyyy HH:mm:ss} *%-5p* [%t] %c{1}: %m (%F, line %L)\n
-
-# 'file' is set to be a FileAppender.
-log4j.appender.file=org.apache.log4j.FileAppender
-log4j.appender.file.File=jcr.log
-# log4j.appender.file.Append=false
-
-# 'file' uses PatternLayout.
-log4j.appender.file.layout=org.apache.log4j.PatternLayout
-log4j.appender.file.layout.ConversionPattern=%d{dd.MM.yyyy HH:mm:ss} *%-5p* [%t] %c{1}: %m (%F, line %L)\n
diff --git a/contrib/classloader/src/test/resources/mock.jar b/contrib/classloader/src/test/resources/mock.jar
deleted file mode 100644
index da5823b..0000000
--- a/contrib/classloader/src/test/resources/mock.jar
+++ /dev/null
Binary files differ
diff --git a/contrib/classloader/src/test/resources/org/apache/jackrabbit/classloader/PatternPathTest.preload.properties b/contrib/classloader/src/test/resources/org/apache/jackrabbit/classloader/PatternPathTest.preload.properties
deleted file mode 100644
index ac02b3a..0000000
--- a/contrib/classloader/src/test/resources/org/apache/jackrabbit/classloader/PatternPathTest.preload.properties
+++ /dev/null
@@ -1,60 +0,0 @@
-#
-# Properties file to preload the MockRepository with content.
-# Each session created by the MockRepository upon calling login
-# reads this file to define a structure of content.
-#
-# Each property in this file defines a single item. The name
-# of the property is the absolute path to the item defined.
-# Order of the definitions in this file is relevant in that
-# intermediate nodes are automatically defined as
-# nt:unstructured nodes and may not be redefined later.
-#
-# The value of each property is a series of comma-separated
-# fields. The first field must either be "n" to indicate a
-# Node or "p" to indicate a Property. Any other values results
-# in the property being ignored for item creation. The remaining
-# fields depend on whether a Node or Property is defined.
-#
-# For nodes the fields are:
-#   1  -  "n" to indicate the definition of a Node
-#   2  -  The name of the node type, may be any string not
-#         not containing a comma. The default value is
-#         "nt:unstructured"
-#   3  -  The name of the primary item. This may be missing
-#         in which case there is no primary item or a well
-#         known default value is used. For nt:file typed
-#         nodes, the default is "jcr:content" for nt:resource
-#         typed nodes, the default is "jcr:data"
-#
-# For Properties the fields are:
-#   1  -  "p" to indicate the definition of a Property
-#   2  -  The name of the property type. This must be one
-#         of the type names defined in the PropertyType
-#         class. If empty or or unknown, "String" is used
-#         as the default.
-#   3  -  The value of the property to the defined. The
-#         value must be acceptable for the
-#         ValueFactory.createValue(int type, String value)
-#         method. If empty or missing, an empty string is
-#         used as the property value, which may not be
-#         acceptable for all property types.
-#
-# Property values (last field in the property definition) may
-# span multiple lines. Each line must be terminated with the
-# backslash character indicating the continuation of the line on
-# the next line of file.
-
-# various class path entries
-/apps/CFC/classes = n,nt:folder
-/apps/Forms/classes = n,nt:folder
-/apps/playground/classes = n,nt:folder
-
-/apps/developers/fmeschbe/classes = n,nt:folder
-
-/apps/developers/fmeschbe/lib/readme.txt = n,nt:file,classpath:/readme.txt
-/apps/developers/fmeschbe/lib/test1.doc = n,nt:file,classpath:/test1.txt
-/apps/developers/fmeschbe/lib/other.doc = n,nt:file,classpath:/other.txt
-
-/libs/CFC/classes = n,nt:folder
-/libs/Forms/classes = n,nt:folder
-/libs/developers/fmeschbe/classes = n,nt:folder
diff --git a/contrib/classloader/src/test/resources/other.txt b/contrib/classloader/src/test/resources/other.txt
deleted file mode 100644
index d772657..0000000
--- a/contrib/classloader/src/test/resources/other.txt
+++ /dev/null
@@ -1 +0,0 @@
-Some Test for other.doc
\ No newline at end of file
diff --git a/contrib/classloader/src/test/resources/preload.properties b/contrib/classloader/src/test/resources/preload.properties
deleted file mode 100644
index 10d3974..0000000
--- a/contrib/classloader/src/test/resources/preload.properties
+++ /dev/null
@@ -1,79 +0,0 @@
-#
-# Properties file to preload the MockRepository with content.
-# Each session created by the MockRepository upon calling login
-# reads this file to define a structure of content.
-#
-# Each property in this file defines a single item. The name
-# of the property is the absolute path to the item defined.
-# Order of the definitions in this file is relevant in that
-# intermediate nodes are automatically defined as
-# nt:unstructured nodes and may not be redefined later.
-#
-# The value of each property is a series of comma-separated
-# fields. The first field must either be "n" to indicate a
-# Node or "p" to indicate a Property. Any other values results
-# in the property being ignored for item creation. The remaining
-# fields depend on whether a Node or Property is defined.
-#
-# For nodes the fields are:
-#   1  -  "n" to indicate the definition of a Node
-#   2  -  The name of the node type, may be any string not
-#         not containing a comma. The default value is
-#         "nt:unstructured"
-#   3  -  The name of the primary item. This may be missing
-#         in which case there is no primary item or a well
-#         known default value is used. For nt:file typed
-#         nodes, the default is "jcr:content" for nt:resource
-#         typed nodes, the default is "jcr:data"
-#
-# For Properties the fields are:
-#   1  -  "p" to indicate the definition of a Property
-#   2  -  The name of the property type. This must be one
-#         of the type names defined in the PropertyType
-#         class. If empty or or unknown, "String" is used
-#         as the default.
-#   3  -  The value of the property to the defined. The
-#         value must be acceptable for the
-#         ValueFactory.createValue(int type, String value)
-#         method. If empty or missing, an empty string is
-#         used as the property value, which may not be
-#         acceptable for all property types.
-#
-# Property values (last field in the property definition) may
-# span multiple lines. Each line must be terminated with the
-# backslash character indicating the continuation of the line on
-# the next line of file.
-
-/node1 = n,nt:folder
-/node2 = n,nt:folder
-/node3 = n,nt:folder
-
-/node1/file1 = n,nt:file
-/node1/file1/jcr:content = n,nt:resource
-/node1/file1/jcr:content/jcr:data = p,Binary,This is the contents of file1\
-This line continues\
-and even more
-/node1/file1/jcr:content/jcr:lastModified = p,Date,2005-04-22T12:35:27.000Z
-/node1/file1/jcr:content/jcr:mimeType = p,String,text/plain
-
-/node1/file2 = n,nt:file
-/node1/file2/jcr:content = n,nt:resource
-/node1/file2/jcr:content/jcr:lastModified = p,Date,1966-12-26T22:15:00.000Z
-/node1/file2/jcr:content/jcr:mimeType = p,String,text/plain
-/node1/file2/jcr:content/jcr:data = p,Binary,This is the contents of file1\
-This line continues\
-and even more
-
-/node1/file3 = n,nt:file
-/node1/file3/jcr:content = n,nt:resource
-/node1/file3/jcr:content/jcr:lastModified = p,Date,1966-12-26T22:15:00.000Z
-/node1/file3/jcr:content/jcr:mimeType = p,String,text/plain
-/node1/file3/jcr:content/jcr:data = p,Binary,This is the contents of file1\n\
-This line continues\n\
-and even more\
-
-/node1/file4 = n,nt:file,classpath:/preload.properties
-/node1/ReadMe.txt = n,nt:file,file:///s:/src/test/ReadMe.txt
-/node1/mock.jar = n,nt:file,classpath:/mock.jar
-
-/node1/classes/org/apache/jackrabbit/classloader/Util.class = n,nt:file,classpath:/org/apache/jackrabbit/classloader/Util.class
diff --git a/contrib/classloader/src/test/resources/readme.txt b/contrib/classloader/src/test/resources/readme.txt
deleted file mode 100644
index 751938e..0000000
--- a/contrib/classloader/src/test/resources/readme.txt
+++ /dev/null
@@ -1 +0,0 @@
-Some ReadMe Text
\ No newline at end of file
diff --git a/contrib/classloader/src/test/resources/repository.xml b/contrib/classloader/src/test/resources/repository.xml
deleted file mode 100644
index 290bc6d..0000000
--- a/contrib/classloader/src/test/resources/repository.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<Repository>
-    <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
-        <param name="path" value="${rep.home}/repository"/>
-    </FileSystem>
-
-    <Security appName="Jackrabbit">
-        <AccessManager class="org.apache.jackrabbit.core.security.SimpleAccessManager" />
-        <LoginModule class="org.apache.jackrabbit.core.security.SimpleLoginModule">
-           <param name="anonymousId" value="anonymous"/>
-        </LoginModule>
-    </Security>
-
-    <Workspaces rootPath="${rep.home}/workspaces" defaultWorkspace="default"/>
-    <Workspace name="${wsp.name}">
-        <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
-            <param name="path" value="${wsp.home}"/>
-        </FileSystem>
-        <PersistenceManager class="org.apache.jackrabbit.core.state.obj.ObjectPersistenceManager"/>
-        <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
-            <param name="path" value="${wsp.home}/index"/>
-        </SearchIndex>
-    </Workspace>
-
-    <Versioning rootPath="${rep.home}/version">
-        <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
-            <param name="path" value="${rep.home}/version"/>
-        </FileSystem>
-        <PersistenceManager class="org.apache.jackrabbit.core.state.obj.ObjectPersistenceManager"/>
-    </Versioning>
-
-    <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
-        <param name="path" value="${rep.home}/repository/index"/>
-    </SearchIndex>
-</Repository>
diff --git a/contrib/classloader/src/test/resources/test1.txt b/contrib/classloader/src/test/resources/test1.txt
deleted file mode 100644
index 4390b8e..0000000
--- a/contrib/classloader/src/test/resources/test1.txt
+++ /dev/null
@@ -1 +0,0 @@
-Some Test for test1.doc
\ No newline at end of file
diff --git a/contrib/examples/README.txt b/contrib/examples/README.txt
deleted file mode 100644
index 0194421..0000000
--- a/contrib/examples/README.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-README - JCR examples

----------------------

-

-Requirements

-------------

-

-This project assumes that you have already successfully compiled and 

-installed the parent project Jackrabbit into your maven repository.

-If this is not the case, go back to the root project and launch

-

-  maven jar:install

-

-which will build and copy Jackrabbit into ~/.maven/repository/jackrabbit/jars

diff --git a/contrib/examples/maven.xml b/contrib/examples/maven.xml
deleted file mode 100644
index f3e8039..0000000
--- a/contrib/examples/maven.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<!--
-   Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                       as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 default="run" xmlns:j="jelly:core" xmlns:ant="jelly:ant">
-
-  <goal name="run" prereqs="java:compile">
-    <ant:mkdir dir="${maven.build.dir}/repo"/>
-    <ant:copy todir="${maven.build.dir}/repo">
-      <ant:fileset dir="${maven.src.dir}/repo"/>
-    </ant:copy>
-    <ant:java classname="org.apache.jackrabbit.examples.Main" fork="true">
-      <ant:jvmarg value="-Djava.security.auth.login.config==${maven.build.dir}/repo/jaas.config"/>
-      <ant:classpath>
-        <ant:path refid="maven.dependency.classpath"/>
-        <ant:pathelement path="${maven.build.dest}"/>
-      </ant:classpath>
-    </ant:java>
-  </goal>
-
-</project>
diff --git a/contrib/examples/project.properties b/contrib/examples/project.properties
deleted file mode 100644
index 596a572..0000000
--- a/contrib/examples/project.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-maven.repo.remote = http://www.ibiblio.org/maven/,http://www.day.com/maven/
-
-maven.jar.mainclass=org.apache.jackrabbit.examples.Main
diff --git a/contrib/examples/project.xml b/contrib/examples/project.xml
deleted file mode 100644
index 484a51d..0000000
--- a/contrib/examples/project.xml
+++ /dev/null
@@ -1,108 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
-   Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                       as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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>
-  <groupId>org.apache.jackrabbit</groupId>
-  <artifactId>jackrabbit-examples</artifactId>
-  <name>Jackrabbit Examples</name>
-  <currentVersion>1.0-SNAPSHOT</currentVersion>
-  <organization>
-    <name>The Apache Software Foundation</name>
-    <url>http://incubator.apache.org/projects/jackrabbit.html</url>
-    <logo>http://incubator.apache.org/images/apache-incubator-logo.png</logo>
-  </organization>
-  <inceptionYear>2005</inceptionYear>
-  <package>org.apache.jackrabbit.examples*</package>
-  <logo>/images/jackrabbitlogo.gif</logo>
-  <description>
-    The Jackrabbit Examples package contains example code for illustrating
-    both general JCR API usage and specific Jackrabbit features.
-  </description>
-  <shortDescription>Example code for JCR and Jackrabbit</shortDescription>
-  <repository>
-    <connection>scm:svn:http://svn.apache.org/repos/asf/incubator/jackrabbit/trunk/contrib/examples</connection>
-    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/incubator/jackrabbit/trunk/contrib/examples</developerConnection>
-    <url>http://svn.apache.org/viewcvs</url>
-  </repository>
-  <licenses>
-    <license>
-      <name>The Apache Software License, Version 2.0</name>
-      <url>/LICENSE.txt</url>
-      <distribution>repo</distribution>
-    </license>
-  </licenses>
-
-  <dependencies>
-    <!-- Compile dependencies -->
-    <dependency>
-      <groupId>jsr170</groupId>
-      <artifactId>jcr</artifactId>
-      <version>1.0</version>
-      <url>http://jcp.org/en/jsr/detail?id=170</url>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.jackrabbit</groupId>
-      <artifactId>jackrabbit</artifactId>
-      <version>1.0-SNAPSHOT</version>
-    </dependency>
-
-    <!-- Runtime dependencies needed by Jackrabbit -->
-    <dependency>
-      <groupId>concurrent</groupId>
-      <artifactId>concurrent</artifactId>
-      <version>1.3.4</version>
-    </dependency>
-    <dependency>
-      <groupId>commons-collections</groupId>
-      <artifactId>commons-collections</artifactId>
-      <version>3.1</version>
-    </dependency>
-    <dependency>
-      <groupId>geronimo-spec</groupId>
-      <artifactId>geronimo-spec-jta</artifactId>
-      <version>1.0-M1</version>
-    </dependency>
-    <dependency>
-      <groupId>log4j</groupId>
-      <artifactId>log4j</artifactId>
-      <version>1.2.8</version>
-    </dependency>
-    <dependency>
-      <groupId>lucene</groupId>
-      <artifactId>lucene</artifactId>
-      <version>1.4.3</version>
-    </dependency>
-    <dependency>
-      <groupId>xerces</groupId>
-      <artifactId>xercesImpl</artifactId>
-      <version>2.6.2</version>
-    </dependency>
-    <dependency>
-      <groupId>xerces</groupId>
-      <artifactId>xmlParserAPIs</artifactId>
-      <version>2.0.2</version>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <sourceDirectory>src/java</sourceDirectory>
-  </build>
-
-</project>
diff --git a/contrib/examples/src/java/org/apache/jackrabbit/examples/FSImport.java b/contrib/examples/src/java/org/apache/jackrabbit/examples/FSImport.java
deleted file mode 100644
index 8efd68c..0000000
--- a/contrib/examples/src/java/org/apache/jackrabbit/examples/FSImport.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.examples;
-
-import org.apache.jackrabbit.core.jndi.RegistryHelper;
-
-import javax.jcr.*;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import java.io.FileInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.util.Hashtable;
-import java.util.Calendar;
-
-import sun.net.www.MimeTable;
-
-/**
- * The First Steps example class.
- */
-public class FSImport {
-
-    /**
-     * Run the Filesystem Import example.
-     *
-     * @param args command line arguments
-     */
-    public static void main(String[] args) {
-        try {
-            Repository repository = getRepository();
-            SimpleCredentials creds = new SimpleCredentials("username", "password".toCharArray());
-            Session session = repository.login(creds);
-            Node root = session.getRootNode();
-
-            if (args.length>0) {
-                File startingpoint=new File(args[0]);
-                importFolder (root.addNode(startingpoint.getName(), "nt:folder"), startingpoint);
-                session.save();
-                dump(root.getNode(startingpoint.getName()));
-            } else {
-                System.err.println("Please specify a starting point for the file system import into the repository.");
-            }
-
-
-        } catch (Exception e) {
-            System.err.println(e);
-        }
-    }
-
-    /**
-     * Creates a Repository instance to be used by the example class.
-     *
-     * @return repository instance
-     * @throws Exception on errors
-     */
-    private static Repository getRepository() throws Exception {
-        String configFile = "repotest/repository.xml";
-        String repHomeDir = "repotest";
-
-        Hashtable env = new Hashtable();
-        env.put(Context.INITIAL_CONTEXT_FACTORY,
-                "org.apache.jackrabbit.core.jndi.provider.DummyInitialContextFactory");
-        env.put(Context.PROVIDER_URL, "localhost");
-        InitialContext ctx = new InitialContext(env);
-
-        RegistryHelper.registerRepository(ctx, "repo", configFile, repHomeDir, true);
-        return (Repository) ctx.lookup("repo");
-    }
-
-    /**
-     * Imports a File.
-     *
-     * @param parentnode Parent Repository Node
-     * @param file File to be imported
-     * @throws RepositoryException on repository errors, IOException on io errors
-     */
-
-    public static void importFile(Node parentnode, File file) throws RepositoryException, IOException {
-
-        MimeTable mt = MimeTable.getDefaultTable();
-        String mimeType = mt.getContentTypeFor(file.getName());
-        if (mimeType==null) mimeType="application/octet-stream";
-
-        Node fileNode = parentnode.addNode(file.getName(), "nt:file");
-        Node resNode = fileNode.addNode("jcr:content", "nt:resource");
-        resNode.setProperty("jcr:mimeType", mimeType);
-        resNode.setProperty("jcr:encoding", "");
-        resNode.setProperty("jcr:data", new FileInputStream(file));
-        Calendar lastModified = Calendar.getInstance();
-        lastModified.setTimeInMillis(file.lastModified());
-        resNode.setProperty("jcr:lastModified", lastModified);
-        System.out.println(fileNode.getPath());
-   }
-
-
-    /**
-     * Import a Folder.
-     *
-     * @param parentnode Parent Repository Node
-     * @param directory Directory to be traversed
-     * @throws RepositoryException on repository errors, IOException on io errors
-     */
-
-    private static void importFolder(Node parentnode, File directory) throws RepositoryException, IOException  {
-        File[] direntries = directory.listFiles();
-        System.out.println(parentnode.getPath());
-        for (int i=0; i<direntries.length; i++) {
-            File direntry = direntries[i];
-            if (direntry.isDirectory()) {
-                Node childnode = parentnode.addNode(direntry.getName(),"nt:folder");
-                importFolder(childnode, direntry);
-            } else {
-                importFile(parentnode, direntry);
-            }
-        }
-    }
-
-    /**
-     * Dumps the contents of the given node to standard output.
-     *
-     * @param node the node to be dumped
-     * @throws RepositoryException on repository errors
-     */
-    public static void dump(Node node) throws RepositoryException {
-        System.out.println(node.getPath());
-
-        PropertyIterator properties = node.getProperties();
-        while (properties.hasNext()) {
-            Property property = properties.nextProperty();
-            System.out.print(property.getPath() + "=");
-            if (property.getDefinition().isMultiple()) {
-                Value[] values = property.getValues();
-                for (int i = 0; i < values.length; i++) {
-                    if (i > 0) {
-                        System.out.println(",");
-                    }
-                    System.out.println(values[i].getString());
-                }
-            } else {
-                if (property.getType()==PropertyType.BINARY) {
-                    System.out.print("<binary>");
-                }  else {
-                    System.out.print(property.getString());
-                }
-
-            }
-            System.out.println();
-        }
-
-        NodeIterator nodes = node.getNodes();
-        while (nodes.hasNext()) {
-            Node child = nodes.nextNode();
-            dump(child);
-        }
-    }
-}
diff --git a/contrib/examples/src/java/org/apache/jackrabbit/examples/FirstSteps.java b/contrib/examples/src/java/org/apache/jackrabbit/examples/FirstSteps.java
deleted file mode 100644
index 210a712..0000000
--- a/contrib/examples/src/java/org/apache/jackrabbit/examples/FirstSteps.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.examples;
-
-import java.io.InputStream;
-
-import javax.jcr.ImportUUIDBehavior;
-import javax.jcr.Node;
-import javax.jcr.NodeIterator;
-import javax.jcr.Property;
-import javax.jcr.PropertyIterator;
-import javax.jcr.Repository;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.SimpleCredentials;
-import javax.jcr.Value;
-
-/**
- * The First Steps example class.
- */
-public class FirstSteps {
-
-    private final Repository repository;
-
-    public FirstSteps(Repository repository) {
-        this.repository = repository;
-    }
-
-    /**
-     * Run the First Steps example.
-     */
-    public void run() {
-        try {
-            SimpleCredentials creds =
-                new SimpleCredentials("username", "password".toCharArray());
-            Session session = repository.login(creds);
-            Node root = session.getRootNode();
-
-            System.out.println(root.getPrimaryNodeType().getName());
-
-            if (!root.hasNode("testnode")) {
-                System.out.println("creating testnode");
-                Node node = root.addNode("testnode", "nt:unstructured");
-                node.setProperty("testprop", session.getValueFactory().createValue("Hello, World."));
-                session.save();
-            }
-
-            if (!root.hasNode("importxml")) {
-                System.out.println("importing xml");
-                Node node = root.addNode("importxml", "nt:unstructured");
-                InputStream xml =
-                    getClass().getClassLoader().getResourceAsStream(
-                            "org/apache/jackrabbit/examples/firststeps.xml");
-                session.importXML(
-                        "/importxml", xml, ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW);
-                session.save();
-            }
-
-            dump(root);
-        } catch (Exception e) {
-            System.err.println(e);
-        }
-    }
-
-    /**
-     * Dumps the contents of the given node to standard output.
-     *
-     * @param node the node to be dumped
-     * @throws RepositoryException on repository errors
-     */
-    public static void dump(Node node) throws RepositoryException {
-        System.out.println(node.getPath());
-
-        PropertyIterator properties = node.getProperties();
-        while (properties.hasNext()) {
-            Property property = properties.nextProperty();
-            System.out.print(property.getPath() + "=");
-            if (property.getDefinition().isMultiple()) {
-                Value[] values = property.getValues();
-                for (int i = 0; i < values.length; i++) {
-                    if (i > 0) {
-                        System.out.println(",");
-                    }
-                    System.out.println(values[i].getString());
-                }
-            } else {
-                System.out.print(property.getString());
-            }
-            System.out.println();
-        }
-
-        NodeIterator nodes = node.getNodes();
-        while (nodes.hasNext()) {
-            Node child = nodes.nextNode();
-            dump(child);
-        }
-    }
-
-}
diff --git a/contrib/examples/src/java/org/apache/jackrabbit/examples/Main.java b/contrib/examples/src/java/org/apache/jackrabbit/examples/Main.java
deleted file mode 100644
index 11a15b4..0000000
--- a/contrib/examples/src/java/org/apache/jackrabbit/examples/Main.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.examples;
-
-import java.util.Hashtable;
-
-import javax.jcr.Repository;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-
-import org.apache.jackrabbit.core.jndi.RegistryHelper;
-
-/**
- * TODO
- */
-public class Main {
-
-    /**
-     * Creates a Repository instance to be used by the example class.
-     *
-     * @return repository instance
-     * @throws Exception on errors
-     */
-    private static Repository getRepository() throws Exception {
-        String configFile = "target/repo/repository.xml";
-        String repHomeDir = "target/repo";
-
-        Hashtable env = new Hashtable();
-        env.put(Context.INITIAL_CONTEXT_FACTORY,
-                "org.apache.jackrabbit.core.jndi.provider.DummyInitialContextFactory");
-        env.put(Context.PROVIDER_URL, "localhost");
-        InitialContext ctx = new InitialContext(env);
-
-        RegistryHelper.registerRepository(ctx, "repo", configFile, repHomeDir, true);
-        return (Repository) ctx.lookup("repo");
-    }
-
-    public static void main(String[] args) {
-        try {
-            new FirstSteps(getRepository()).run();
-        } catch (Throwable e) {
-            e.printStackTrace();
-        }
-    }
-
-}
diff --git a/contrib/examples/src/java/org/apache/jackrabbit/examples/firststeps.xml b/contrib/examples/src/java/org/apache/jackrabbit/examples/firststeps.xml
deleted file mode 100644
index f156bb6..0000000
--- a/contrib/examples/src/java/org/apache/jackrabbit/examples/firststeps.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml"
-            xmlns:mathml="http://www.w3.org/1998/Math/MathML">
-  <xhtml:head><xhtml:title>Three Namespaces</xhtml:title></xhtml:head>
-  <xhtml:body>
-    <xhtml:h1 align="center">An Ellipse and a Rectangle</xhtml:h1>
-    <svg:svg xmlns:svg="http://www.w3.org/2000/svg" 
-             width="12cm" height="10cm">
-      <svg:ellipse rx="110" ry="130" />
-      <svg:rect x="4cm" y="1cm" width="3cm" height="6cm" />
-    </svg:svg>
-    <xhtml:p>The equation for ellipses</xhtml:p>
-<mathml:math>
-  <mathml:apply>
-    <mathml:eq/>
-    <mathml:cn> 1 </mathml:cn>
-    <mathml:apply>
-      <mathml:plus/>
-      <mathml:apply>
-        <mathml:divide/>
-        <mathml:apply>
-          <mathml:power/>
-          <mathml:ci> x </mathml:ci>
-          <mathml:cn> 2 </mathml:cn>
-        </mathml:apply>
-        <mathml:apply>
-          <mathml:power/>
-          <mathml:ci> a </mathml:ci>
-          <mathml:cn> 2 </mathml:cn>
-        </mathml:apply>
-      </mathml:apply>
-      <mathml:apply>
-        <mathml:divide/>
-        <mathml:apply>
-          <mathml:power/>
-          <mathml:ci> y </mathml:ci>
-          <mathml:cn> 2 </mathml:cn>
-        </mathml:apply>
-        <mathml:apply>
-          <mathml:power/>
-          <mathml:ci> b </mathml:ci>
-          <mathml:cn> 2 </mathml:cn>
-        </mathml:apply>        
-      </mathml:apply>
-    </mathml:apply>
- </mathml:apply>
-</mathml:math>
-    <xhtml:hr/>
-    <xhtml:p>Last Modified January 10, 2002</xhtml:p>    
-  </xhtml:body>
-</xhtml:html>
diff --git a/contrib/examples/src/repo/jaas.config b/contrib/examples/src/repo/jaas.config
deleted file mode 100644
index 8ea7a44..0000000
--- a/contrib/examples/src/repo/jaas.config
+++ /dev/null
@@ -1,3 +0,0 @@
-Jackrabbit {
-org.apache.jackrabbit.core.security.SimpleLoginModule required anonymousId="anonymous";
-};
diff --git a/contrib/examples/src/repo/repository.xml b/contrib/examples/src/repo/repository.xml
deleted file mode 100644
index c34cbe6..0000000
--- a/contrib/examples/src/repo/repository.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<Repository>
-    <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
-        <param name="path" value="${rep.home}/repository"/>
-    </FileSystem>
-    <Security appName="Jackrabbit">
-        <AccessManager class="org.apache.jackrabbit.core.security.SimpleAccessManager"/>
-    </Security>
-    <Workspaces rootPath="${rep.home}/workspaces" defaultWorkspace="default" />
-    <Workspace name="${wsp.name}">
-        <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
-            <param name="path" value="${wsp.home}"/>
-        </FileSystem>
-        <PersistenceManager class="org.apache.jackrabbit.core.state.xml.XMLPersistenceManager" />
-        <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
-            <param name="path" value="${wsp.home}/index"/>
-        </SearchIndex>
-    </Workspace>
-    <Versioning rootPath="${rep.home}/versions">
-        <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
-            <param name="path" value="${rep.home}/versions"/>
-        </FileSystem>
-        <PersistenceManager class="org.apache.jackrabbit.core.state.xml.XMLPersistenceManager" />
-    </Versioning>
-    <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
-        <param name="path" value="${rep.home}/repository/index"/>
-    </SearchIndex>
-</Repository>
diff --git a/contrib/extension-framework/HEADER.txt b/contrib/extension-framework/HEADER.txt
deleted file mode 100644
index 1c669de..0000000
--- a/contrib/extension-framework/HEADER.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
\ No newline at end of file
diff --git a/contrib/extension-framework/LICENSE.txt b/contrib/extension-framework/LICENSE.txt
deleted file mode 100644
index d645695..0000000
--- a/contrib/extension-framework/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/contrib/extension-framework/project.properties b/contrib/extension-framework/project.properties
deleted file mode 100644
index 183a1a9..0000000
--- a/contrib/extension-framework/project.properties
+++ /dev/null
@@ -1,108 +0,0 @@
-#  Copyright 2003-2005 The Apache Software Foundation or its licensors,
-#                      as applicable
-#
-#  Licensed under the Apache License, Version 2.0 (the "License");
-#  you may not use this file except in compliance with the License.
-#  You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-#  distributed under the License is distributed on an "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#  See the License for the specific language governing permissions and
-#  limitations under the License.
-
-######################################################################
-# Apache Central Repository
-######################################################################
-maven.repo.central=www.apache.org
-maven.repo.central.directory=/www/www.apache.org/dist/java-repository
-maven.remote.group=apcvs
-maven.changelog.factory = org.apache.maven.svnlib.SvnChangeLogFactory
-
-######################################################################
-# JUnit Testing
-######################################################################
-maven.test.failure = false
-maven.junit.fork=true
-maven.junit.dir=${maven.build.dir}
-#maven.junit.sysproperties=org.xml.sax.driver java.security.auth.login.config
-maven.junit.sysproperties=org.xml.sax.driver
-org.xml.sax.driver=org.apache.xerces.parsers.SAXParser
-#java.security.auth.login.config=applications/test/jaas.config
-
-
-#If you wish to skip tests when doing builds, uncomment
-#maven.test.skip = true
-
-######################################################################
-# Checkstyle
-######################################################################
-maven.checkstyle.properties= checkstyle.xml
-maven.linkcheck.enable=false
-
-######################################################################
-# JavaDoc
-#
-# javadoc urls can be added here, multiple urls are appended using a comma
-#
-# maven.javadoc.links = http://foo/bar/api,\
-#                       http://flim/flam/api/
-######################################################################
-maven.javadoc.links=http://java.sun.com/j2se/1.4.2/docs/api/,http://www.day.com/maven/jsr170/javadocs/jcr-0.16.4.1/
-maven.javadoc.author=false
-maven.javadoc.version=false
-
-######################################################################
-# Other opts
-######################################################################
-# uncomment the next line to work in offline mode (no jar download & no linkcheck)
-#maven.mode.online=
-
-maven.compile.debug=on
-maven.compile.deprecation=off
-maven.compile.optimize=off
-maven.compile.source=1.4
-maven.compile.target=1.4
-
-maven.jarResources.basedir=src/java
-maven.jar.excludes=**/package.html
-
-# Location of the generated query language parsers. Needed for
-# the Maven Eclipse plugin to automatically locate the generated
-# source files. Note that this value matches the hardcoded path
-# in the Maven JavaCC plugin. Therefore, do not change this value!
-maven.gen.src=${maven.build.dir}/generated-src/main
-
-# specifying additional remote repository for downloading dependencies
-# not available at www.ibiblio.org/maven/
-maven.repo.remote = http://www.ibiblio.org/maven/,http://www.day.com/maven/
-
-######################################################################
-# Site L&F
-######################################################################
-# maven.xdoc.jsl=
-maven.xdoc.date=
-maven.xdoc.poweredby.image=maven-feather.png
-maven.xdoc.version=${pom.currentVersion}
-maven.xdoc.developmentProcessUrl=http://incubator.apache.org/projects/jackrabbit.html
-maven.docs.src=${basedir}/src/site/xdoc
-maven.changelog.range=60
-maven.changelog.factory=org.apache.maven.svnlib.SvnChangeLogFactory
-maven.multiproject.overviewPage.title=Jackrabbit components
-
-# ------------------------------------------------------------------------
-# M A V E N  J A R  O V E R R I D E
-# ------------------------------------------------------------------------
-#maven.jar.override = on
-#maven.jar.jcr = ${basedir}/lib/jcr.jar
-
-######################################################################
-# Site Deploy (into ../jackrabbit-site for checkout on incubator.apache.org)
-######################################################################
-maven.site.deploy.method=fs
-
-# IDE settings
-maven.eclipse.resources.addtoclasspath=true
-
diff --git a/contrib/extension-framework/project.xml b/contrib/extension-framework/project.xml
deleted file mode 100644
index 0b3cc7d..0000000
--- a/contrib/extension-framework/project.xml
+++ /dev/null
@@ -1,147 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<!--
-   Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                       as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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>1</pomVersion>

-    <groupId>org.apache.jackrabbit</groupId>

-    <currentVersion>1.0-SNAPSHOT</currentVersion>

-    <organization>

-        <name>The Apache Software Foundation</name>

-        <url>http://incubator.apache.org/projects/jackrabbit.html</url>

-        <logo>http://incubator.apache.org/images/apache-incubator-logo.png</logo>

-    </organization>

-    <inceptionYear>2005</inceptionYear>

-    <package>org.apache.jackrabbit.extension</package>

-    <description>The Jackrabbit Extension Framework is a simple framework providing functionality to easily extend applications&#xD;

-in a plug-in style.</description>

-    <shortDescription>Extension Framework for JCR Repositories</shortDescription>

-    <repository />

-    <developers>

-        <developer>

-            <name>Felix Meschberger</name>

-            <id>1</id>

-            <email>fmeschbe at apache dot org</email>

-            <organization>Day Software</organization>

-            <timezone>+1</timezone>

-        </developer>

-    </developers>

-    <licenses>

-        <license>

-            <name>The Apache Software License, Version 2.0</name>

-            <url>/LICENSE.txt</url>

-            <distribution>repo</distribution>

-        </license>

-    </licenses>

-    <reports>

-        <report>maven-javadoc-plugin</report>

-        <report>maven-jdepend-plugin</report>

-        <report>maven-license-plugin</report>

-    </reports>

-    <artifactId>extension-framework</artifactId>

-    <name>Jackrabbit Extension Framework</name>

-    <dependencies>

-        <dependency>

-            <groupId>org.apache.jackrabbit</groupId>

-            <artifactId>classloader</artifactId>

-            <version>1.0-SNAPSHOT</version>

-            <type>jar</type>

-        </dependency>

-        <dependency>

-            <groupId>org.apache.jackrabbit</groupId>

-            <artifactId>jackrabbit</artifactId>

-            <version>1.0-SNAPSHOT</version>

-            <type>jar</type>

-        </dependency>

-        <dependency>

-            <groupId>org.apache.jackrabbit</groupId>

-            <artifactId>nt-ns-util</artifactId>

-            <version>1.0-SNAPSHOT</version>

-            <type>jar</type>

-        </dependency>

-        <dependency>

-            <groupId>jsr170</groupId>

-            <artifactId>jcr</artifactId>

-            <version>1.0</version>

-            <type>jar</type>

-        </dependency>

-        <dependency>

-            <groupId>commons-logging</groupId>

-            <artifactId>commons-logging</artifactId>

-            <version>1.0</version>

-            <type>jar</type>

-        </dependency>

-        <dependency>

-            <groupId>commons-configuration</groupId>

-            <artifactId>commons-configuration</artifactId>

-            <version>1.1</version>

-            <type>jar</type>

-        </dependency>

-        <dependency>

-            <groupId>commons-lang</groupId>

-            <artifactId>commons-lang</artifactId>

-            <version>2.1</version>

-            <type>jar</type>

-        </dependency>

-        <!-- Unit Testing -->

-        <dependency>

-            <groupId>log4j</groupId>

-            <artifactId>log4j</artifactId>

-            <version>1.2.8</version>

-            <type>jar</type>

-        </dependency>

-        <dependency>

-            <groupId>commons-collections</groupId>

-            <artifactId>commons-collections</artifactId>

-            <version>3.1</version>

-            <type>jar</type>

-        </dependency>

-        <dependency>

-            <groupId>concurrent</groupId>

-            <artifactId>concurrent</artifactId>

-            <version>1.3.4</version>

-            <type>jar</type>

-        </dependency>

-        <dependency>

-            <groupId>lucene</groupId>

-            <artifactId>lucene</artifactId>

-            <version>1.4.3</version>

-            <type>jar</type>

-        </dependency>

-    </dependencies>

-    <build>

-        <sourceDirectory>src/main/java</sourceDirectory>

-        <resources>

-            <resource>

-                <directory>src/main/resources</directory>

-                <filtering>false</filtering>

-            </resource>

-        </resources>

-        <unitTestSourceDirectory>src/test/java</unitTestSourceDirectory>

-        <unitTest>

-            <includes>

-                <include>**/*TestAll.java</include>

-            </includes>

-            <resources>

-                <resource>

-                    <directory>src/test/resources</directory>

-                    <filtering>false</filtering>

-                </resource>

-            </resources>

-        </unitTest>

-    </build>

-</project>

-

diff --git a/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/ExtensionDescriptor.java b/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/ExtensionDescriptor.java
deleted file mode 100644
index 67f4a4e..0000000
--- a/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/ExtensionDescriptor.java
+++ /dev/null
@@ -1,718 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.extension;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-import javax.jcr.Value;
-
-import org.apache.commons.configuration.Configuration;
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.extension.configuration.ItemConfiguration;
-import org.apache.jackrabbit.extension.configuration.RepositoryConfiguration;
-
-/**
- * The <code>ExtensionDescriptor</code> class implements a descriptor for an
- * extension defined in a repository node with mixin node type
- * <code>rep:extension</code>.
- * <p>
- * Two instances of this class are considered equal if they are the same
- * instance or if they are of the same extension type and if their extension
- * names are equal.
- * <p>
- * This class implements the <code>Comparable</code> interface defining an order
- * amongst two instances of this class according to the extension type
- * identification and the extension name. See {@link #compareTo(Object)}.
- *
- * @author Felix Meschberger
- * @version $Rev:$, $Date$
- *
- * @see org.apache.jackrabbit.extension.ExtensionType
- * @see org.apache.jackrabbit.extension.ExtensionManager
- */
-public class ExtensionDescriptor implements Comparable {
-
-    /** default log */
-    private static final Log log = LogFactory.getLog(ExtensionDescriptor.class);
-
-    /**
-     * The name of the property containing the extension type identification
-     * (value is "rep:id").
-     * This is a mandatory property of an extension node.
-     */
-    public static final String PROP_REP_ID = "rep:id";
-
-    /**
-     * The name of the property containing the extension name (value is
-     * "rep:name").
-     * This is a mandatory property of an extension node.
-     */
-    public static final String PROP_REP_NAME = "rep:name";
-
-    /**
-     * The name of the property containing the fully qualified name of a class
-     * implementing the extension (value is "rep:class").
-     * This is an optional property of the extension node.
-     */
-    public static final String PROP_REP_CLASS = "rep:class";
-
-    /**
-     * The name of the multivalue property containing the class path providing
-     * the extension class(es) (value is "rep:classpath").
-     * This is an optional property of the extension node.
-     */
-    public static final String PROP_REP_CLASSPATH = "rep:classpath";
-
-    /**
-     * The name of the property containing the fully qualified name of a class
-     * implementing the <code>org.apache.commons.configuration.Configuration</code>
-     * interface (value is "rep:configurationClass").
-     * This is an optional property of the extension node.
-     */
-    public static final String PROP_REP_CONFIGURATION_CLASS =
-        "rep:configurationClass";
-
-    /**
-     * The name of the child node containing the configuration for this
-     * extension (value is "rep:configuration").
-     * This is an optional child node of the extension node.
-     */
-    public static final String NODE_REP_CONFIGURATION = "rep:configuration";
-
-    /**
-     * The {@link ExtensionType} to which this extension belongs.
-     * @see #getExtensionType
-     */
-    private final ExtensionType type;
-
-    /**
-     * The <code>Node</code> from which this descriptor has been loaded.
-     * @see #getNode()
-     */
-    private final Node node;
-
-    /**
-     * The extension type identification read from the {@link #PROP_REP_ID}
-     * property of the node describing the extension.
-     * @see #getId()
-     */
-    private final String id;
-
-    /**
-     * The extension name read from the {@link #PROP_REP_NAME} property of the
-     * node describing the extension.
-     * @see #getName()()
-     */
-    private final String name;
-
-    /**
-     * The fully qualified name of the class implementing the extension or
-     * <code>null</code> if none is defined. The value of this field is read
-     * from the {@link #PROP_REP_CLASS} property of the node describing the
-     * extension.
-     * @see #getClassName()
-     */
-    private final String className;
-
-    /**
-     * The classpath to configure on the extension type's class loader to load
-     * and use this extension or <code>null</code> if none is defined. The value
-     * of this field is read from the {@link #PROP_REP_CLASSPATH} property of
-     * the node describing the extension.
-     * @see #getClassPath()
-     */
-    private final String[] classPath;
-
-    /**
-     * The fully qualified name of the class implementing the Apache Jakarta
-     * Commons <code>Configuration</code> interface or <code>null</code> if
-     * none is defined. The value of this field is read from the
-     * {@link #PROP_REP_CONFIGURATION_CLASS} property of the node describing the
-     * extension.
-     * @see #getConfigurationClassName()
-     * @see #getConfiguration()
-     * @see #getConfigurationNode()
-     */
-    private final String configurationClassName;
-
-    /**
-     * The absolute path of the {@link #node} from which this descriptor has
-     * been loaded.
-     * @see #getNodePath();
-     */
-    private String nodePath;
-
-    /**
-     * The extension instance created for this descriptor by the
-     * {@link #getExtension()} method or <code>null</code> if none has been
-     * created yet.
-     * @see #getExtension()
-     */
-    private Object extension;
-
-    /**
-     * The configuration object created for this descriptor by the
-     * {@link #getConfiguration()} method or <code>null</code> if none has been
-     * created yet.
-     * @see #getConfiguration()
-     */
-    private Configuration configuration;
-
-    /**
-     * Creates an instance of this class loading the definition from the given
-     * <code>extensionNode</code>.
-     * <p>
-     * This method does not check whether the node is of the correct type but
-     * merely accesses the properties required to exist and tries to access
-     * optional properties. If an error occurrs accessing the properties,
-     * an <code>ExtensionException</code> is thrown with the cause set.
-     *
-     * @param type The {@link ExtensionType} having loaded this extension
-     *      object.
-     * @param extensionNode The <code>Node</code> containing the extension
-     *      description.
-     *
-     * @throws ExtensionException If an error occurrs reading the extension
-     *      description from the node.
-     */
-    /* package */ ExtensionDescriptor(ExtensionType type, Node extensionNode)
-            throws ExtensionException {
-
-        this.type = type;
-        node = extensionNode;
-
-        try {
-            // required data
-            id = getPropertyOrNull(extensionNode, PROP_REP_ID);
-            name = getPropertyOrNull(extensionNode, PROP_REP_NAME);
-            if (id == null || name == null) {
-                throw new ExtensionException("Missing id or name property");
-            }
-
-            // optional class, classpath and configuration class
-            className = getPropertyOrNull(extensionNode, PROP_REP_CLASS);
-            classPath = getPropertiesOrNull(extensionNode, PROP_REP_CLASSPATH);
-            configurationClassName =
-               getPropertyOrNull(extensionNode, PROP_REP_CONFIGURATION_CLASS);
-        } catch (RepositoryException re) {
-            throw new ExtensionException("Cannot load extension", re);
-        }
-    }
-
-    /**
-     * Returns the {@link ExtensionType} which has loaded this extension.
-     */
-    private ExtensionType getExtensionType() {
-        return type;
-    }
-
-    /**
-     * Returns the <code>Node</code> from which this extension has been loaded.
-     * Any modification to the node returned will only be active the next
-     * time an instance of this class is created from the node.
-     */
-    public final Node getNode() {
-        return node;
-    }
-
-    /**
-     * Returns the absolute path of the <code>Node</code> from which this
-     * extension has been loaded.
-     */
-    public final String getNodePath() {
-        if (nodePath == null) {
-            try {
-                nodePath = getNode().getPath();
-            } catch (RepositoryException re) {
-                log.warn("Cannot get the path of the extension node", re);
-                nodePath = getNode().toString();
-            }
-        }
-
-        return nodePath;
-    }
-
-    /**
-     * Returns the identification of the extension type implemented by this
-     * extension.
-     */
-    public final String getId() {
-        return id;
-    }
-
-    /**
-     * Returns the name of this extension.
-     */
-    public final String getName() {
-        return name;
-    }
-
-    /**
-     * Returns the fully qualified name of the class implementing this extension
-     * or <code>null</code> if none is configured in the extension descriptor
-     * node.
-     */
-    public final String getClassName() {
-        return className;
-    }
-
-    /**
-     * Returns the extension class path or <code>null</code> if none has been
-     * configured in the extension descriptor. Note that an empty array is
-     * never returned by this method.
-     */
-    public final String[] getClassPath() {
-        return classPath;
-    }
-
-    /**
-     * Returns the fully qualified name of the extensions configuration class
-     * or <code>null</code> if none is configured in the extension's node.
-     * @see #getConfiguration()
-     * @see #getConfigurationNode()
-     */
-    public final String getConfigurationClassName() {
-        return configurationClassName;
-    }
-
-    //---------- Instantiation support ----------------------------------------
-
-    /**
-     * Returns the class loader to be used to load the extension object and the
-     * configuration for the extension described by this descriptor.
-     */
-    public ClassLoader getExtensionLoader() {
-        return getExtensionType().getClassLoader(this);
-    }
-
-    /**
-     * Creates an instance of the extension class defined by this descriptor.
-     * <p>
-     * If the descriptor contains a classpath specification, the class loader of
-     * the extension type to which the extension belongs, is configured with the
-     * additional classpath.
-     * <p>
-     * The extension class must provide either of two constructors for it to be
-     * instantiated by this method:
-     * <ol>
-     * <li>If a public constructor taking an instance of
-     * {@link ExtensionDescriptor} is available, that constructor is used to
-     * create the extension instance.</il>
-     * <li>Otherwise if a public default constructor taking no paramaters at
-     * all is available, that constructor is used to create the extension
-     * instance. In this case it is the responsibility of the application to
-     * provide the extension instance with more information if required.</li>
-     * </ol>
-     * <p>
-     * If neither constructor is available in the class, this method fails with
-     * an {@link ExtensionException}.
-     * <p>
-     * If the class provides a public method taking a single parameter of
-     * type <code>ExtensionDescriptor</code>, that method is called with this
-     * instance as the parameter value. This allows for parameterless default
-     * constructors in the extension classes while still getting the extension
-     * descriptor.
-     * <p>
-     * If no class has been defined for this extension, an
-     * <code>IllegalArgumentException</code> is thrown.
-     *
-     * @return The instance created for this extension.
-     *
-     * @throws IllegalArgumentException if no extension class specification is
-     *      available in this extension descriptor.
-     * @throws ExtensionException if the extension class has no suitable
-     *      constructor or if an error occurrs loading or instantiating the
-     *      class.
-     */
-    public Object getExtension() throws ExtensionException {
-
-        // immediately return the extension, if it is already defined
-        if (extension != null) {
-            return extension;
-        }
-        // otherwise, we have to instantiate
-
-        // fail if there is no class name in the descriptor
-        if (getClassName() == null) {
-            throw new IllegalArgumentException("Descriptor has no class definition");
-        }
-
-        try {
-            log.debug("Loading class " + getClassName());
-            Class clazz = getExtensionLoader().loadClass(getClassName());
-            Object extension = instantiate(clazz);
-            setDescriptor(extension);
-            return extension;
-
-        } catch (Exception e) {
-            throw new ExtensionException("Cannot instantiate extension " +
-                getClassName(), e);
-        }
-    }
-
-    /**
-     * Returns the node containing the configuration of this extension. If the
-     * extension's node has a child node <code>rep:configuration</code>, that
-     * child node is returned, otherwise the extension's node is returned.
-     *
-     * @return The configuration node of this extension.
-     */
-    public Node getConfigurationNode() {
-        Node node = getNode();
-
-        try {
-            if (node.hasNode(NODE_REP_CONFIGURATION)) {
-                return node.getNode(NODE_REP_CONFIGURATION);
-            }
-        } catch (RepositoryException re) {
-            log.warn("Cannot check or access configuration node " +
-                NODE_REP_CONFIGURATION + ". Using extension node", re);
-        }
-
-        return node;
-    }
-
-    /**
-     * Returns the <code>Configuration</code> object used to configure this
-     * extension.
-     * <p>
-     * If the extension descriptor does not contain the fully qualified name of
-     * a configuration class, this method returns an instance of the
-     * {@link ItemConfiguration} class loaded from the extension's node.
-     * <p>
-     * Otherwise the named class is loaded through the extensions class loader
-     * (see {@link #getExtensionLoader()}) and instantiated. A class to be used
-     * like this must implement the <code>Configuration</code> interface and
-     * provide a public default constructor. If any of the requirements is not
-     * met by the configured class, this method throws an exception.
-     * <p>
-     * If the configured class implements the {@link RepositoryConfiguration}
-     * interface, the configuration is configured with the extension's node
-     * and loaded.
-     * <p>
-     * The main use of this method is for the extension class itself to
-     * configure itself. Another use may be for an administrative application
-     * to update configuration and optionally store it back.
-     *
-     * @return The <code>Configuration</code> object used to configured this
-     *      extension.
-     *
-     * @throws ExtensionException If the configuration class has no public
-     *      default constructor or if the configuration class is not an
-     *      implementation of the <code>Configuration</code> interface or if an
-     *      error occurrs loading or instantiating the configuration class.
-     */
-    public Configuration getConfiguration() throws ExtensionException {
-        // immediately return the configuration, if it is already defined
-        if (configuration != null) {
-            return configuration;
-        }
-        // otherwise, we have to instantiate
-
-        // use a default configuration if no specific class defined
-        if (getConfigurationClassName() == null) {
-            log.debug("No configurationClass setting, using ItemConfiguration");
-            try {
-                return new ItemConfiguration(getConfigurationNode());
-            } catch (ConfigurationException ce) {
-                throw new ExtensionException(
-                    "Cannot load ItemConfiguration from " + getNodePath());
-            }
-        }
-
-        try {
-            log.debug("Loading class " + getConfigurationClassName());
-            Class clazz =
-                getExtensionLoader().loadClass(getConfigurationClassName());
-
-            // create an instance using the one taking an extension descriptor
-            // if available otherwise use the default constructor
-            log.debug("Creating configuration object instance");
-            Object configObject = clazz.newInstance();
-            if (!(configObject instanceof Configuration)) {
-                throw new ExtensionException("Configuration class " +
-                    getClassName() +
-                    " does not implement Configuration interface");
-            }
-
-            // load the repository configuration from the extension node
-            if (configObject instanceof RepositoryConfiguration) {
-                RepositoryConfiguration repoConfig =
-                    (RepositoryConfiguration) configObject;
-                repoConfig.setNode(getConfigurationNode());
-                repoConfig.load();
-            }
-
-            configuration = (Configuration) configObject;
-            return configuration;
-
-        } catch (Exception e) {
-            throw new ExtensionException("Cannot instantiate extension " +
-                getClassName(), e);
-        }
-    }
-
-    //---------- Comparable interface -----------------------------------------
-
-    /**
-     * Compares this object with the specified object for order.  Returns a
-     * negative integer, zero, or a positive integer as this object is less
-     * than, equal to, or greater than the specified object.
-
-     * @param obj the Object to be compared, which must be an instance of this
-     *      class.
-     *
-     * @return a negative integer, zero, or a positive integer as this
-     *      descriptor is less than, equal to, or greater than the specified
-     *      descriptor.
-     *
-     * @throws NullPointerException if <code>obj</code> is <code>null</code>.
-     * @throws ClassCastException if <code>obj</code> is not an
-     *      <code>ExtensionDescriptor</code>.
-     */
-    public int compareTo(Object obj) {
-        // throws documented ClassCastException
-        ExtensionDescriptor other = (ExtensionDescriptor) obj;
-
-        // check the order amongst the id and return if not equal
-        int idOrder = id.compareTo(other.id);
-        if (idOrder != 0) {
-            return idOrder;
-        }
-
-        // id's are the same, so return order amongst names
-        return name.compareTo(other.name);
-    }
-
-    //---------- Object overwrite ---------------------------------------------
-
-    /**
-     * Returns a combined hash code of the {@link #getId() type identification}
-     * and the {@link #getName() name} of this extension as this extension's
-     * hash code.
-     */
-    public int hashCode() {
-        return id.hashCode() + 17 * name.hashCode();
-    }
-
-    /**
-     * Returns <code>true</code> if <code>obj</code> is the same as this or
-     * if it is a <code>ExtensionDescriptor</code> whose type identification
-     * and name equals the type identification and name of this extension.
-     */
-    public boolean equals(Object obj) {
-        if (obj == this) {
-            return true;
-        } else if (obj instanceof ExtensionDescriptor) {
-            ExtensionDescriptor other = (ExtensionDescriptor) obj;
-            return id.equals(other.id) && name.equals(other.name);
-        } else {
-            return false;
-        }
-    }
-
-    /**
-     * Returns a string representation of this extension descriptor which
-     * contains the extension type identification and the extension name.
-     */
-    public String toString() {
-        return "Extension " + id + ":" + name;
-    }
-
-    //---------- innternal ----------------------------------------------------
-
-    /**
-     * Returns the value of the {@link #PROP_REP_NAME} property of the
-     * <code>extensionNode</code> or <code>null</code> if no such property
-     * exists.
-     *
-     * @param extensionNode The <code>Node</code> whose extension name property
-     *      value is to bereturned.
-     *
-     * @throws RepositoryException if an error occurrs accessing the extension
-     *      name property.
-     */
-    /* package */ static String getExtensionName(Node extensionNode)
-            throws RepositoryException {
-        return getPropertyOrNull(extensionNode, PROP_REP_NAME);
-    }
-
-    /**
-     * Returns the string value of the named (single-value) property of the
-     * node or <code>null</code> if the the property does not exists or its
-     * value is empty.
-     *
-     * @param node The <code>Node</code> containing the named property.
-     * @param property The name of the property to reutrn.
-     *
-     * @return The property's string value or <code>null</code> if the property
-     *      does not exist or is empty.
-     *
-     * @throws RepositoryException If an error occurrs accesing the node or
-     *      property.
-     */
-    private static String getPropertyOrNull(Node node, String property)
-            throws RepositoryException {
-        if (node.hasProperty(property)) {
-            String value = node.getProperty(property).getString();
-            return (value == null || value.length() == 0) ? null : value;
-        }
-
-        return null;
-    }
-
-    /**
-     * Returns the string values of the named (multi-valued) property of the
-     * node or <code>null</code> if the the property does not exists or its
-     * value is empty.
-     *
-     * @param node The <code>Node</code> containing the named property.
-     * @param property The name of the property to reutrn.
-     *
-     * @return A string array containing the string representations of the
-     *      property's values or <code>null</code> if the property does not
-     *      exist or is empty.
-     *
-     * @throws RepositoryException If an error occurrs accesing the node or
-     *      property.
-     */
-    private static String[] getPropertiesOrNull(Node node, String property)
-            throws RepositoryException {
-
-        if (node.hasProperty(property)) {
-            Value[] clsPath = node.getProperty(property).getValues();
-            if (clsPath != null && clsPath.length >= 0) {
-                List pathList = new ArrayList();
-                for (int i=0; i < clsPath.length; i++) {
-                    String pathEntry = clsPath[i].getString().trim();
-
-                    // ignore empty or existing path entry
-                    if (pathEntry.length() == 0 ||
-                            pathList.contains(pathEntry)) {
-                        continue;
-                    }
-
-                    // new class path entry, add
-                    pathList.add(pathEntry);
-                }
-
-                if (pathList.size() > 0) {
-                    return (String[]) pathList.toArray(new String[pathList.size()]);
-                }
-            }
-        }
-
-        return null;
-    }
-
-    /**
-     * Creates an instance of the given <code>clazz</code>. If the class has
-     * a public constructor taking a single parameter of type
-     * <code>ExtensionDescriptor</code> that constructor is used to create the
-     * instance. Otherwise the public default constructor is used if available.
-     * If none of both is available or if an error occurrs creating the instance
-     * a <code>ExtensionException</code> is thrown.
-     *
-     * @param clazz The <code>Class</code> to instantiate.
-     *
-     * @return The instance created.
-     *
-     * @throws ExtensionException If an error occurrs instantiating the class.
-     *      If instantiation failed due to an exception while calling the
-     *      constructor, the causing exception is available as the cause of
-     *      the exception.
-     */
-    private Object instantiate(Class clazz) throws ExtensionException {
-        // find constructors (taking descriptor and default)
-        Constructor defaultConstr = null;
-        Constructor descrConstr = null;
-        Constructor[] constructors = clazz.getConstructors();
-        for (int i=0; i < constructors.length; i++) {
-            Class parms[] = constructors[i].getParameterTypes();
-            if (parms.length == 0) {
-                defaultConstr = constructors[i];
-            } else if (parms.length == 1 && parms[i].equals(getClass())) {
-                descrConstr = constructors[i];
-            }
-        }
-
-        try {
-            // create an instance using the one taking an extension descriptor
-            // if available otherwise use the default constructor
-            if (descrConstr != null) {
-                log.debug("Creating instance with descriptor " + this);
-                return descrConstr.newInstance(new Object[]{ this });
-            } else if (defaultConstr != null) {
-                log.debug("Creating default instance without descriptor");
-                return defaultConstr.newInstance(null);
-            } else {
-                throw new ExtensionException("No suitable constructor found " +
-                        "to instantiate " +  getClassName());
-            }
-        } catch (InstantiationException ie) {
-            throw new ExtensionException(
-                "Cannot instantiate " + getClassName(), ie);
-        } catch (IllegalAccessException iae) {
-            throw new ExtensionException("Cannot access constructor of "
-                + getClassName(), iae);
-        } catch (InvocationTargetException ite) {
-            throw new ExtensionException("Error while instantiating "
-                + getClassName(), ite);
-        }
-    }
-
-    /**
-     * Calls a method taking a single parameter of type
-     * <code>ExtensionDescriptor</code> to provide the extension descriptor to
-     * the extension loaded.
-     * <p>
-     * If an error occurrs calling a method found, an WARN message is logged and
-     * other methods according to the required signature are looked for. If no
-     * suitable method can be found, an INFO method is logged and the extension
-     * could not be provided with the extension descriptor.
-     *
-     * @param extension The extension to provide witch the extension descriptor.
-     */
-    private void setDescriptor(Object extension) {
-        Method[] methods = extension.getClass().getMethods();
-        for (int i=0; i < methods.length; i++) {
-            Class[] parTypes = methods[i].getParameterTypes();
-            if (parTypes.length == 1 && parTypes[0].equals(getClass())) {
-                try {
-                    methods[i].invoke(extension, new Object[]{ this });
-                    return;
-                } catch (Exception ite) {
-                    log.warn("setDescriptor: Calling " +
-                        extension.getClass().getName() + "." +
-                        methods[i].getName() + " failed", ite);
-                }
-            }
-        }
-
-        log.info("setDescriptor: No setter method for ExtensionDescriptor " +
-                "found in class " + extension.getClass().getName() +
-                " of extension " + getId() + ":" + getName());
-    }
-}
diff --git a/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/ExtensionException.java b/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/ExtensionException.java
deleted file mode 100644
index c057f01..0000000
--- a/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/ExtensionException.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.extension;
-
-/**
- * The <code>ExtensionException</code> class defines an exception which may be
- * thrown in the Jackrabbit Extension Framework.
- *
- * @author Felix Meschberger
- * @version $Rev:$, $Date$
- */
-public class ExtensionException extends Exception {
-
-    /**
-     * serialization identification
-     */
-    private static final long serialVersionUID = 535080559025771531L;
-
-    /**
-     * Creates an instance of this exception with a message.
-     *
-     * @param message The message describing the problem.
-     */
-    public ExtensionException(String message) {
-        super(message);
-    }
-
-    /**
-     * Creates an instance of this exception with causing <code>Throwable</code>.
-     *
-     * @param cause The <code>Throwable</code> causing the problem.
-     */
-    public ExtensionException(Throwable cause) {
-        super(cause);
-    }
-
-    /**
-     * Creates an instance of this exception with a message and a causing
-     * <code>Throwable</code>.
-     *
-     * @param message The message describing the problem.
-     * @param cause The <code>Throwable</code> causing the problem.
-     */
-    public ExtensionException(String message, Throwable cause) {
-        super(message, cause);
-    }
-}
diff --git a/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/ExtensionIterator.java b/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/ExtensionIterator.java
deleted file mode 100644
index ac7c57a..0000000
--- a/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/ExtensionIterator.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.extension;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-import javax.jcr.Node;
-import javax.jcr.NodeIterator;
-import javax.jcr.RepositoryException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * The <code>ExtensionIterator</code> class implements the iterator
- * over instances of the {@link ExtensionDescriptor}s.
- *
- * @author Felix Meschberger
- * @version $Rev:$, $Date$
- */
-public class ExtensionIterator implements Iterator {
-
-    /** Default log */
-    private static final Log log = LogFactory.getLog(ExtensionIterator.class);
-
-    /**
-     * The type of the extension descriptors returned.
-     */
-    private final ExtensionType type;
-
-    /**
-     * The underlying iterator of nodes containing the extension descriptors.
-     */
-    private final NodeIterator nodes;
-
-    /**
-     * The preloaded next <code>EventDescriptor</code>. If <code>null</code>
-     * no more descriptors are available in this iterator.
-     */
-    private ExtensionDescriptor next;
-
-    /**
-     * Creates an instance for the given underlying iterator of nodes.
-     *
-     * @param nodes The underlying <code>NodeIterator</code>.
-     */
-    /* package */ ExtensionIterator(ExtensionType type, NodeIterator nodes) {
-        this.type = type;
-        this.nodes = nodes;
-        seek();
-    }
-
-    /**
-     * Returns <code>true</code> if there is at least one more extension
-     * descriptor available in this iterator.
-     */
-    public boolean hasNext() {
-        return next != null;
-    }
-
-    /**
-     * Returns the next available extension descriptor.
-     *
-     * @throws NoSuchElementException If no more extension descriptors are
-     *      available.
-     */
-    public Object next() {
-        return nextExtension();
-    }
-
-    /**
-     * Returns the next available extension descriptor.
-     *
-     * @throws NoSuchElementException If no more extension descriptors are
-     *      available.
-     */
-    public ExtensionDescriptor nextExtension() {
-        if (next == null) {
-            throw new NoSuchElementException("No more Descriptors");
-        }
-
-        ExtensionDescriptor toReturn = next;
-        seek();
-        return toReturn;
-    }
-
-    /**
-     * Throws <code>UnsupportedOpertationException</code> because this
-     * method is not supported by this implementation.
-     */
-    public void remove() {
-        throw new UnsupportedOperationException("remove");
-    }
-
-    /**
-     * Preload the next <code>ExtensionDescriptor</code> from the next node
-     * in the underlying node iterator.
-     * <p>
-     * If an error occurrs instantiating an extension descriptor for any
-     * node in the iterator, the node is ignored and the next node is
-     * used. This is repeated until either no more nodes are available in
-     * the underlying iterator or an extension descriptor can sucessfully
-     * be created.
-     */
-    private void seek() {
-        while (nodes.hasNext()) {
-            try {
-                Node extNode = nodes.nextNode();
-                String name = ExtensionDescriptor.getExtensionName(extNode);
-                next = type.getOrCreateExtension(name, extNode);
-                return;
-            } catch (RepositoryException re) {
-                log.warn("Cannot get the extension name", re);
-            } catch (ExtensionException ee) {
-                log.warn("Cannot create extensions descriptor", ee);
-            }
-        }
-
-        // fallback if no more nodes
-        next = null;
-    }
-}
\ No newline at end of file
diff --git a/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/ExtensionManager.java b/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/ExtensionManager.java
deleted file mode 100644
index 6fbf3a0..0000000
--- a/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/ExtensionManager.java
+++ /dev/null
@@ -1,315 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.extension;
-
-import java.util.Iterator;
-import java.util.Map;
-import java.util.TreeMap;
-
-import javax.jcr.NodeIterator;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.Workspace;
-import javax.jcr.nodetype.NoSuchNodeTypeException;
-import javax.jcr.query.Query;
-import javax.jcr.query.QueryManager;
-import javax.jcr.query.QueryResult;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.classloader.RepositoryClassLoader;
-
-/**
- * The <code>ExtensionManager</code> class provides the core functionality
- * of the Jackrabbit Extension Framework by methods for finding extensions.
- * <p>
- * Instances of this class are created with a <code>Session</code> to the
- * repository. Consequently all access to the repository is confined to the
- * workspace to which the session is attached. That is, only extensions located
- * in the session's workspace are found.
- * <p>
- * Additionally the class provides functionality to define the extension node
- * types on demand.
- *
- * @author Felix Meschberger
- * @version $Rev:$, $Date$
- */
-public final class ExtensionManager {
-
-    /** default logger */
-    private static final Log log = LogFactory.getLog(ExtensionManager.class);
-
-    /**
-     * The name of the repository node type defining the properties making up
-     * an extension description (value is "rep:extension").
-     */
-    public static final String NODE_EXTENSION_TYPE = "rep:extension";
-
-    /**
-     * The session providing access to the repository for loading extensions.
-     */
-    private final Session session;
-
-    /**
-     * The application's class loader as provided to the constructor.
-     */
-    private final ClassLoader applicationLoader;
-
-    /**
-     * The map of extension types by the extension type identifiers.
-     */
-    private Map extensionTypes;
-
-    /**
-     * Creates an instance of this manager accessing the repository through the
-     * given <code>session</code>.
-     * <p>
-     * This also confines the extensions available to this manager to the
-     * extensions available through the workspace accessed by the
-     * <code>session</code>.
-     * <p>
-     * If the <code>applicationLoader</code> parameter is <code>null</code>
-     * either the current thread's context class loader is used or if that one
-     * is <code>null</code>, too, the class loader of this class is used.
-     * It is recommended, that the caller of the constructor provides a
-     * non-<code>null</code> class loader to prevent unexpected class loading
-     * issues.
-     * <p>
-     * To make sure extensions may actually be correctly handled, the
-     * {@link #checkNodeType(Session)} method is called.
-     *
-     * @param session The <code>Session</code> to search for and load extensions.
-     * @param applicationLoader The <code>ClassLoader</code> used as the parent
-     *      for the repository class loaders.
-     *
-     * @throws NullPointerException If <code>session</code> is <code>null</code>.
-     */
-    public ExtensionManager(Session session, ClassLoader applicationLoader)
-            throws ExtensionException {
-
-        // check session
-        if (session == null) {
-            throw new NullPointerException("session");
-        }
-
-        // make sure the extension system node type is available
-        checkNodeType(session);
-
-        // make sure the application class loader is non-null
-        // - first try current thread context loader
-        // - otherwise use this class's class loader
-        if (applicationLoader == null) {
-            applicationLoader = Thread.currentThread().getContextClassLoader();
-        }
-        if (applicationLoader == null) {
-            applicationLoader = getClass().getClassLoader();
-        }
-
-        // assign fields
-        this.session = session;
-        this.applicationLoader = applicationLoader;
-    }
-
-    /**
-     * Searches in the workspace of this instance's <code>Session</code> for
-     * extensions of type <code>id</code> returning an <code>Iterator</code>
-     * of {@link ExtensionDescriptor} instances. If <code>root</code> is
-     * non-<code>null</code> the search for extensions only takes place in the
-     * indicated subtree.
-     * <p>
-     * <b>NOTE</B>: This method may return more than one extension with the same
-     * name for a given <code>id</code>. This is the only place in the Jackrabbit
-     * Extension Framework which handles duplicate extension names. The rest
-     * relies on extensions to have unique <code>id</code>/name pairs.
-     * <p>
-     * Calling this method multiple times with the same <code>id</code> will
-     * return the same {@link ExtensionDescriptor} instances. Previously
-     * available instances will not returned though if their extension node
-     * has been removed in the meantime. Such instances will still be available
-     * through {@link #getExtension(String, String, String)} but will not be
-     * available on next system restart.
-     *
-     * @param id The extension type identification describing the extensions to
-     *      be found.
-     * @param root The root node below which the extensions are looked for. This
-     *      path is taken as an absolute path regardless of whether it begins
-     *      with a slash or not. If <code>null</code> or empty, the search
-     *      takes place in the complete workspace.
-     *
-     * @return An <code>Iterator</code> of {@link ExtensionDescriptor} instances
-     *      describing the extensions found.
-     *
-     * @throws IllegalArgumentException If <code>id</code> is empty or
-     *      <code>null</code>.
-     * @throws ExtensionException If an error occurrs looking for extensions.
-     */
-    public Iterator getExtensions(String id, String root)
-            throws ExtensionException {
-
-        // delegate finding/loading to the extension type
-        return getExtensionType(id).getExtensions(root);
-    }
-
-    /**
-     * Searches in the workspace of this instance's <code>Session</code> for
-     * an extension with the given <code>name</code> of type <code>id</code>.
-     * If <code>root</code> is non-<code>null</code> the search for extensions
-     * only takes place in the indicated subtree.
-     * <p>
-     * This method fails with an exception if more than one extension with the
-     * same name of the same type is found in the workspace. Not finding the
-     * requested extension also yields an exception.
-     * <p>
-     * Two consecutive calls to this method with the same arguments, namely
-     * the same <code>id</code> and <code>name</code> will return the same
-     * {@link ExtensionDescriptor} instance.
-     *
-     * @param id The extension type identification describing the extensions to
-     *      be found.
-     * @param name The name of the extension of the indicated type to be found.
-     * @param root The root node below which the extensions are looked for. This
-     *      path is taken as an absolute path regardless of whether it begins
-     *      with a slash or not. If <code>null</code> or empty, the search
-     *      takes place in the complete workspace.
-     *
-     * @return The named {@link ExtensionDescriptor} instances.
-     *
-     * @throws IllegalArgumentException If <code>id</code> or <code>name</code>
-     *      is empty or <code>null</code>.
-     * @throws ExtensionException If no or more than one extensions with the
-     *      same name and type can be found or if another error occurrs looking
-     *      for extensions.
-     */
-    public ExtensionDescriptor getExtension(String id, String name, String root)
-            throws ExtensionException {
-
-        // delegate finding/loading to the extension type
-        return getExtensionType(id).getExtension(name, root);
-    }
-
-    //---------- Extension type helper methods --------------------------------
-
-    /**
-     * Creates a new instance of the <code>RepositoryClassLoader</code> class
-     * with an empty path accessing the repository through the session of this
-     * manager instance.
-     * <p>
-     * Note, that each call to this method returns a new RepositoryClassLoader
-     * instance.
-     */
-    /* package */ RepositoryClassLoader createClassLoader() {
-        return new RepositoryClassLoader(session, new String[0],
-            applicationLoader);
-    }
-
-    /**
-     * Executes the given XPath query on this mnanager's session and returns
-     * a <code>NodeIterator</code> over the nodes matching the query.
-     *
-     * @param xpath The XPath query to execute
-     *
-     * @return The <code>NodeIterator</code> on the nodes matching the query.
-     *
-     * @throws ExtensionException If an error occurrs executing the query.
-     *      The underlying exception is available as the cause of the exception.
-     */
-    /* package */ NodeIterator findNodes(String xpath) throws ExtensionException {
-        try {
-            // look for the extension nodes
-            QueryManager qm = session.getWorkspace().getQueryManager();
-            Query query = qm.createQuery(xpath, Query.XPATH);
-            QueryResult res = query.execute();
-
-            // check whether we found at least one node
-            return res.getNodes();
-        } catch (RepositoryException re) {
-            throw new ExtensionException("Problem executing query '" +
-                xpath + "'", re);
-        }
-    }
-
-    //---------- internal helper ----------------------------------------------
-
-    /**
-     * Returns an {@link ExtensionType} instance for the given name.
-     *
-     * @throws IllegalArgumentException if <code>id</code> is <code>null</code>
-     *      or an empty string.
-     */
-    /* package */ ExtensionType getExtensionType(String id) {
-        if (id == null || id.length() == 0) {
-            throw new IllegalArgumentException("Extension type identifier " +
-                    "must not be null or empty string");
-        }
-
-        if (extensionTypes == null) {
-            extensionTypes = new TreeMap();
-        }
-
-        ExtensionType type = (ExtensionType) extensionTypes.get(id);
-        if (type == null) {
-            type = new ExtensionType(this, id);
-            extensionTypes.put(id, type);
-        }
-
-        return type;
-    }
-
-    /**
-     * Makes sure the <code>rep:extension</code> node type is registered with
-     * the <code>session</code>'s repository.
-     * <p>
-     * If the required extension descriptor node type is not defined in the
-     * repository yet, it is tried to be registered. If an error occurrs
-     * registering the node type a message is logged and an
-     * <code>ExtensionException</code> is thrown.
-     *
-     * @param session The <code>Session</code> used to access the repository
-     *      to test and optionally register the node.
-     *
-     * @throws ExtensionException If an error occurrs checking ro defining the
-     *      node type.
-     */
-    public static void checkNodeType(Session session) throws ExtensionException {
-        // quick check for the node type, succeed if defined
-        try {
-            session.getWorkspace().getNodeTypeManager().getNodeType(NODE_EXTENSION_TYPE);
-            log.debug("Required node type exists, can expand archives");
-            return;
-        } catch (NoSuchNodeTypeException nst) {
-            log.debug("Required node types does not exist, try to define");
-        } catch (RepositoryException re) {
-            log.debug("Cannot check for required node type, cannot expand " +
-                    "archives", re);
-            throw new ExtensionException("Cannot check for required node type", re);
-        }
-
-        try {
-            Workspace workspace = session.getWorkspace();
-            if (!NodeTypeSupport.registerNodeType(workspace)) {
-                throw new ExtensionException("Registering required node type failed");
-            }
-        } catch (ExtensionException ee) {
-            throw ee;
-        } catch (Throwable t) {
-            // Prevent anything from hapening if node type registration fails
-            // due to missing libraries or other errors
-            log.debug("Error registering node type", t);
-            throw new ExtensionException("Cannot register required node type", t);
-        }
-    }
-}
diff --git a/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/ExtensionType.java b/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/ExtensionType.java
deleted file mode 100644
index df4657f..0000000
--- a/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/ExtensionType.java
+++ /dev/null
@@ -1,394 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.extension;
-
-import java.net.URL;
-import java.text.MessageFormat;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-
-import javax.jcr.Node;
-import javax.jcr.NodeIterator;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.classloader.RepositoryClassLoader;
-
-/**
- * The <code>ExtensionType</code> class represents a collection of extensions
- * sharing the same Extension Type Identification. Instances of this class
- * maintain the extension types class loader and the set of extenions of the
- * same type which have been loaded through this instance.
- * <p>
- * The equality of instances of this class is defined by the equality of the
- * Extension Type Identifier. If two instances have same extension type
- * identifier, they are considered equal.
- *
- * @author Felix Meschberger
- * @version $Rev:$, $Date$
- *
- * @see org.apache.jackrabbit.extension.ExtensionManager
- * @see org.apache.jackrabbit.extension.ExtensionDescriptor
- */
-public class ExtensionType {
-
-    /** default log */
-    private static final Log log = LogFactory.getLog(ExtensionType.class);
-
-    /**
-     * Pattern used to create an XPath query to look for extensions of a certain
-     * type. The parameters in the patterns are the root path below which to
-     * search (<i>{0}</i>) and the extension type identificatio (<i>{1}</i>).
-     *
-     * @see #findExtensions(String, String)
-     */
-    private static final MessageFormat EXTENSION_QUERY_PATTERN =
-        new MessageFormat("{0}//element(*, " + ExtensionManager.NODE_EXTENSION_TYPE + ")[@rep:id = ''{1}'']");
-
-    /**
-     * Pattern used to create an XPath query to look for a specific extension
-     * by its name and type type. The parameters in the patterns are the root
-     * path below which to search (<i>{0}</i>), the extension type
-     * identification (<i>{1}</i>) and the extension name (<i>{1}</i>).
-     *
-     * @see #findExtension(String, String, String)
-     */
-    private static final MessageFormat EXTENSION_QUERY_PATTERN2 =
-        new MessageFormat("{0}//element(*, " + ExtensionManager.NODE_EXTENSION_TYPE + ")[@rep:id = ''{1}'' and @rep:name = ''{2}'']");
-
-    /**
-     * The {@link ExtensionManager} responsible for accessing this instance.
-     */
-    private final ExtensionManager manager;
-
-    /**
-     * The Extension Type Identification of this extension type instance. No
-     * two instances of this class with the same manager share their id.
-     */
-    private final String id;
-
-    /**
-     * The set of extensions loaded with this extension type, indexed by their
-     * names.
-     */
-    private final Map extensions;
-
-    /**
-     * The <code>RepositoryClassLoader</code> used for extensions of this type.
-     * This field is set on demand by the
-     * {@link #getClassLoader(ExtensionDescriptor)} method.
-     */
-    private RepositoryClassLoader loader;
-
-    /**
-     * Creates a new extension type instance in the {@link ExtensionManager}
-     * with the given extension type identification.
-     *
-     * @param manager The {@link ExtensionManager} managing this extension
-     *      type and its extensions.
-     * @param id The Extension Type Identification of this instance.
-     */
-    /* package */ ExtensionType(ExtensionManager manager, String id) {
-        this.manager = manager;
-        this.id = id;
-        this.extensions = new TreeMap();
-    }
-
-    /**
-     * Returns the Extension Type Identification of this extension type.
-     */
-    public String getId() {
-        return id;
-    }
-
-    /**
-     * Searches in the workspace of this instance's <code>Session</code> for
-     * extensions of this type returning an <code>Iterator</code> of
-     * {@link ExtensionDescriptor} instances. If <code>root</code> is non-<code>null</code>
-     * the search for extensions only takes place in the indicated subtree.
-     * <p>
-     * <b>NOTE</B>: This method may return more than one extension with the
-     * same name for this type. This is the only place in the Jackrabbit
-     * Extension Framework which handles duplicate extension names. The rest
-     * relies on extensions to have unique <code>id/name</code> pairs.
-     * <p>
-     * Calling this method multiple times will return the same
-     * {@link ExtensionDescriptor} instances. Previously available instances
-     * will not be returned though if their extension node has been removed in
-     * the meantime. Such instances will still be available through
-     * {@link #getExtension(String, String)} but will not be available on next
-     * system restart.
-     *
-     * @param root The root node below which the extensions are looked for. This
-     *            path is taken as an absolute path regardless of whether it
-     *            begins with a slash or not. If <code>null</code> or empty,
-     *            the search takes place in the complete workspace.
-     *
-     * @return An {@link ExtensionIterator} providing the extensions of this
-     *      type.
-     *
-     * @throws ExtensionException If an error occurrs looking for extensions.
-     */
-    public ExtensionIterator getExtensions(String root) throws ExtensionException {
-
-        // make sure root is not null and has no leading slash
-        if (root == null) {
-            root = "";
-        } else if (root.length() >= 1 && root.charAt(0) == '/') {
-            root = root.substring(1);
-        }
-
-        // build the query string from the query pattern
-        String queryXPath;
-        synchronized (EXTENSION_QUERY_PATTERN) {
-            queryXPath = EXTENSION_QUERY_PATTERN.format(new Object[]{ root, id });
-        }
-
-        log.debug("Looking for extensions of type " + id + " below /" + root);
-
-        NodeIterator nodes = manager.findNodes(queryXPath);
-        return new ExtensionIterator(this, nodes);
-    }
-
-    /**
-     * Searches in the workspace of this instance's <code>Session</code> for
-     * an extension with the given <code>name</code> of type <code>id</code>.
-     * If <code>root</code> is non-<code>null</code> the search for extensions
-     * only takes place in the indicated subtree.
-     * <p>
-     * This method fails with an exception if more than one extension with the
-     * same name of the same type is found in the workspace. Not finding the
-     * requested extension also yields an exception.
-     * <p>
-     * Two consecutive calls to this method with the same arguments, namely
-     * the same <code>id</code> and <code>name</code> will return the same
-     * {@link ExtensionDescriptor} instance.
-     *
-     * @param name The name of the extension of the indicated type to be found.
-     * @param root The root node below which the extensions are looked for. This
-     *      path is taken as an absolute path regardless of whether it begins
-     *      with a slash or not. If <code>null</code> or empty, the search
-     *      takes place in the complete workspace.
-     *
-     * @return The named {@link ExtensionDescriptor} instances.
-     *
-     * @throws IllegalArgumentException If <code>name</code> is empty or
-     *      <code>null</code>.
-     * @throws ExtensionException If no or more than one extensions with the
-     *      same name and type can be found or if another error occurrs looking
-     *      for extensions.
-     */
-    public ExtensionDescriptor getExtension(String name, String root)
-            throws ExtensionException {
-
-        // check name
-        if (name == null || name.length() == 0) {
-            throw new IllegalArgumentException("Extension name must not be" +
-                    " null or empty string");
-        }
-
-        // check whether we already loaded the extension
-        ExtensionDescriptor ed = getOrCreateExtension(name, null);
-        if (ed != null) {
-            return ed;
-        }
-
-        // make sure root is not null and has no leading slash
-        if (root == null) {
-            root = "";
-        } else if (root.length() >= 1 && root.charAt(0) == '/') {
-            root = root.substring(1);
-        }
-
-        // build the query string from the query pattern
-        String queryXPath;
-        synchronized (EXTENSION_QUERY_PATTERN2) {
-            queryXPath = EXTENSION_QUERY_PATTERN2.format(new Object[]{ root, id, name});
-        }
-
-        log.debug("Looking for extension " + id + "/" + name + " below /" + root);
-
-        NodeIterator nodes = manager.findNodes(queryXPath);
-        if (!nodes.hasNext()) {
-            throw new ExtensionException("Extension " + id + "/" + name +
-                " not found");
-        }
-
-        Node extNode = nodes.nextNode();
-        if (nodes.hasNext()) {
-            throw new ExtensionException("More than one extension " +
-                id + "/" + name + " found");
-        }
-
-        // load the descriptor and return
-        return createExtension(name, extNode);
-    }
-
-    /**
-     * Returns a repository class loader for the given extension. If the
-     * extension contains a class path definition, that class path is added to
-     * the class loader before returning.
-     *
-     * @param extension The {@link ExtensionDescriptor} for which to return
-     *      the class loader.
-     *
-     * @return The <code>ClassLoader</code> used to load the extension and
-     *      extension configuration class.
-     *
-     * @see ExtensionDescriptor#getExtensionLoader()
-     * @see ExtensionDescriptor#getExtension()
-     */
-    /* package */ ClassLoader getClassLoader(ExtensionDescriptor extension) {
-
-        if (loader == null) {
-            // not created yet, so we create
-            loader = manager.createClassLoader();
-        }
-
-        // make sure the class path for the class path is already defined
-        fixClassPath(loader, extension);
-
-        // return the class loader now
-        return loader;
-    }
-
-    /**
-     * Makes sure, the class path defined in the <code>extension</code> is
-     * known to the <code>loader</code>.
-     *
-     * @param loader The repository class loader whose current class path is
-     *      ensured to contain the extension's class path.
-     * @param extension The extension providing additions to the repository
-     *      class loader's class path.
-     */
-    private static void fixClassPath(RepositoryClassLoader loader,
-        ExtensionDescriptor extension) {
-
-        if (extension.getClassPath() == null) {
-            return;
-        }
-
-        URL[] urls = loader.getURLs();
-        Set paths = new HashSet();
-        for (int i=0; i < urls.length; i++) {
-            paths.add(urls[i].getPath());
-        }
-
-        String[] classPath = extension.getClassPath();
-        for (int i=0; i < classPath.length; i++) {
-            if (!paths.contains(classPath[i])) {
-                loader.addHandle(classPath[i]);
-            }
-        }
-    }
-
-    //---------- Object overwrite ---------------------------------------------
-
-    /**
-     * Returns the hash code of this types extension type identification.
-     */
-    public int hashCode() {
-        return id.hashCode();
-    }
-
-    /**
-     * Returns <code>true</code> if <code>obj</code> is <code>this</code> or
-     * if it is an <code>ExtensionType</code> with the same extension type
-     * identification as <code>this</code>.
-     */
-    public boolean equals(Object obj) {
-        if (obj == this) {
-            return true;
-        } else if (obj instanceof ExtensionType) {
-            return id.equals(((ExtensionType) obj).getId());
-        } else {
-            return false;
-        }
-    }
-
-    /**
-     * Returns a string representation of this instance including the extension
-     * type identification.
-     */
-    public String toString() {
-        return "Extension type " + getId();
-    }
-
-    //--------- internal helper -----------------------------------------------
-
-    /**
-     * Returns an {@link ExtensionDescriptor} for the name extension optionally
-     * loaded from the <code>extNode</code>. If this type has already loaded
-     * an extension with the given name, that extension descriptor is returned.
-     * Otherwise a new extension descriptor is created from the extension node
-     * and internally cached before being returned.
-     *
-     * @param name The name of the extension for which to return the descriptor.
-     * @param extNode The <code>Node</code> containing the extension definition
-     *      to be loaded if this instance has not loaded the named extension
-     *      yet. This may be <code>null</code> to prevent loading an extension
-     *      descriptor if the named extension has not been loaded yet.
-     *
-     * @return The name {@link ExtensionDescriptor} or <code>null</code> if this
-     *      instance has not loaded the named extension yet and
-     *      <code>extNode</code> is <code>null</code>.
-     *
-     * @throws ExtensionException If an error occurrs loading the extension
-     *      descriptor from the <code>extNode</code>.
-     */
-    /* package */ ExtensionDescriptor getOrCreateExtension(String name, Node extNode)
-            throws ExtensionException {
-
-        // check whether we already loaded the extension
-        ExtensionDescriptor ed = (ExtensionDescriptor) extensions.get(name);
-        if (ed != null) {
-            return ed;
-        }
-
-        if (extNode != null) {
-            return createExtension(name, extNode);
-        }
-
-        // fallback to nothing
-        return null;
-    }
-
-    /**
-     * Creates and locally registers an {@link ExtensionDescriptor} instance
-     * with the given <code>name</code> reading the descriptor from the
-     * <code>extNode</code>.
-     *
-     * @param name The name of the extension to create. This is the name used to
-     *            register the extension as.
-     * @param extNode The <code>Node</code> from which the extension is
-     *            loaded.
-     *
-     * @return The newly created and registered {@link ExtensionDescriptor}.
-     *
-     * @throws ExtensionException If an error occurrs loading the
-     *      {@link ExtensionDescriptor} from the <code>extNode</code>.
-     */
-    private ExtensionDescriptor createExtension(String name, Node extNode)
-            throws ExtensionException {
-        ExtensionDescriptor ed = new ExtensionDescriptor(this, extNode);
-        extensions.put(name, ed);
-        return ed;
-    }
-}
diff --git a/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/NodeTypeSupport.java b/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/NodeTypeSupport.java
deleted file mode 100644
index 91a4792..0000000
--- a/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/NodeTypeSupport.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.extension;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.UnsupportedEncodingException;
-import java.util.List;
-
-import javax.jcr.RepositoryException;
-import javax.jcr.Workspace;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.core.nodetype.InvalidNodeTypeDefException;
-import org.apache.jackrabbit.core.nodetype.NodeTypeManagerImpl;
-import org.apache.jackrabbit.core.nodetype.NodeTypeRegistry;
-import org.apache.jackrabbit.core.nodetype.compact.CompactNodeTypeDefReader;
-import org.apache.jackrabbit.core.nodetype.compact.ParseException;
-
-/**
- * The <code>NodeTypeSupport</code> contains a single utility method
- * {@link #registerNodeType(Workspace)} to register the required mixin node
- * type <code>rep:jarFile</code> with the repository.
- * <p>
- * If the class loader is not used on a Jackrabbit based repository, loading
- * this class or calling the {@link #registerNodeType(Workspace)} methods may
- * fail with link errors.
- *
- * @author Felix Meschberger
- * @version $Rev:$, $Date$
- */
-/* package */ class NodeTypeSupport {
-
-    /** Default log */
-    private static final Log log = LogFactory.getLog(NodeTypeSupport.class);
-
-    /**
-     * The name of the class path resource containing the node type definition
-     * file used by the {@link #registerNodeType(Workspace)} method to register
-     * the required mixin node type (value is "type.cnd").
-     */
-    private static final String TYPE_FILE = "type.cnd";
-
-    /**
-     * The encoding used to read the node type definition file (value is
-     * "ISO-8859-1").
-     */
-    private static final String ENCODING = "ISO-8859-1";
-
-    /**
-     * Registers the required node type (<code>rep:jarFile</code>) with the
-     * node type manager available from the given <code>workspace</code>.
-     * <p>
-     * The <code>NodeTypeManager</code> returned by the <code>workspace</code>
-     * is expected to be of type
-     * <code>org.apache.jackrabbit.core.nodetype.NodeTypeManagerImpl</code> for
-     * the node type registration to succeed.
-     * <p>
-     * This method is not synchronized. It is up to the calling method to
-     * prevent paralell execution.
-     *
-     * @param workspace The <code>Workspace</code> providing the node type
-     *      manager through which the node type is to be registered.
-     *
-     * @return <code>true</code> if this class can be used to handle archive
-     *      class path entries. See above for a description of the test used.
-     */
-    /* package */ static boolean registerNodeType(Workspace workspace) {
-
-        // Access the node type definition file, "fail" if not available
-        InputStream ins = NodeTypeSupport.class.getResourceAsStream(TYPE_FILE);
-        if (ins == null) {
-            log.error("Node type definition file " + TYPE_FILE +
-                " not in class path. Cannot define required node type");
-            return false;
-        }
-
-        // Wrap the stream with a reader
-        InputStreamReader reader = null;
-        try {
-            reader = new InputStreamReader(ins, ENCODING);
-        } catch (UnsupportedEncodingException uee) {
-            log.warn("Required Encoding " + ENCODING + " not supported, " +
-                    "using platform default encoding", uee);
-
-            reader = new InputStreamReader(ins);
-        }
-
-        try {
-            // Create a CompactNodeTypeDefReader
-            CompactNodeTypeDefReader cndReader =
-                new CompactNodeTypeDefReader(reader, TYPE_FILE);
-
-            // Get the List of NodeTypeDef objects
-            List ntdList = cndReader.getNodeTypeDefs();
-
-            // Get the NodeTypeManager from the Workspace.
-            // Note that it must be cast from the generic JCR NodeTypeManager
-            // to the Jackrabbit-specific implementation.
-            NodeTypeManagerImpl ntmgr =
-                (NodeTypeManagerImpl) workspace.getNodeTypeManager();
-
-            // Acquire the NodeTypeRegistry
-            NodeTypeRegistry ntreg = ntmgr.getNodeTypeRegistry();
-
-            // register the node types from the file in a batch
-            ntreg.registerNodeTypes(ntdList);
-
-            // get here and succeed
-            return true;
-
-        } catch (ParseException pe) {
-            log.error("Unexpected failure to parse compact node defintion " + TYPE_FILE, pe);
-
-        } catch (InvalidNodeTypeDefException ie) {
-            log.error("Cannot define required node type", ie);
-
-        } catch (RepositoryException re) {
-            log.error("General problem accessing the repository", re);
-
-        } catch (ClassCastException cce) {
-            log.error("Unexpected object type encountered", cce);
-
-        } finally {
-            // make sure the reader is closed - expect to be non-null here !
-            try {
-                reader.close();
-            } catch (IOException ioe) {
-                // ignore
-            }
-        }
-
-        // fall back to failure
-        return false;
-    }
-}
diff --git a/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/configuration/ConfigurationIODelegate.java b/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/configuration/ConfigurationIODelegate.java
deleted file mode 100644
index 4000100..0000000
--- a/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/configuration/ConfigurationIODelegate.java
+++ /dev/null
@@ -1,295 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.extension.configuration;
-
-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 javax.jcr.Item;
-import javax.jcr.Node;
-import javax.jcr.Property;
-import javax.jcr.PropertyType;
-import javax.jcr.RepositoryException;
-
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.configuration.FileConfiguration;
-
-/**
- * The <code>ConfigurationIODelegate</code> class provides common IO
- * functionality for the
- * {@link org.apache.jackrabbit.extension.configuration.PropertiesNodeConfiguration} and
- * {@link org.apache.jackrabbit.extension.configuration.XMLNodeConfiguration} classes to
- * access configuration Repository Properties to load and save configuration
- * data. In fact, this class may be used to extend any
- * <code>FileConfiguration</code> implementation with support for loading and
- * saveing from/to a JCR repository, not just the above mentioned.
- *
- * @author Felix Meschberger
- * @version $Rev:$, $Date$
- */
-public class ConfigurationIODelegate {
-
-    /**
-     * The <code>FileConfiguration</code> object used to write the
-     * configuration.
-     */
-    private final FileConfiguration config;
-
-    /**
-     * The <code>Node</code> from which the configuration is loaded.
-     */
-    private Node jcrNode;
-
-    /**
-     * The default character encoding when serializing strings from/to files
-     * (value is "UTF-8").
-     */
-    /* package */ static final String ENCODING = "UTF-8";
-
-    /**
-     * Creates a new instance delegating actual writing of the data to the
-     * underlying repository to the given <code>FileConfiguration</code>.
-     *
-     * @param config The <code>FileConfiguration</code> used for
-     *      (de-)serializing the configuration data.
-     */
-    /* package */ ConfigurationIODelegate(FileConfiguration config) {
-        this.config = config;
-    }
-
-    /**
-     * Returns the repository <code>Node</code> from which the configuration is
-     * loaded resp. to which it is stored.
-     */
-    /* package */ Node getNode() {
-        return jcrNode;
-    }
-
-    /**
-     * Sets the repository <code>Node</code> from which the configuration is
-     * loaded resp. to whch it is stored.
-     */
-    /* package */ void setNode(Node node) {
-        this.jcrNode = node;
-    }
-
-    /**
-     * Calls the {@link #load(Node)} method if a repository <code>Node</code>
-     * has been set on this delegate. Otherwise calls the <code>load()</code>
-     * method of the <code>FileConfiguration</code> object which has been
-     * given to this instance at construction time.
-     *
-     * @throws ConfigurationException If an error occurrs loading the
-     *      configuration.
-     */
-    public void load() throws ConfigurationException {
-        if (jcrNode != null) {
-            load(jcrNode);
-        } else {
-            config.load();
-        }
-    }
-
-    /**
-     * Accesses the configuration property of the given repository
-     * <code>Node</code> to open an <code>InputStream</code> and calls the
-     * <code>FileConfiguration</code>'s <code>load(InputStream)</code> method
-     * to actually load the configuration.
-     *
-     * @param node The configuration <code>Node</code> from which the
-     *      configuration is to be read.
-     *
-     * @throws ConfigurationException If an error occurrs accessing the
-     *      repository or loading the configuration.
-     */
-    public void load(Node node) throws ConfigurationException {
-        InputStream ins = null;
-        try {
-            Property configProp = getConfigurationProperty(node);
-            ins = configProp.getStream();
-
-            config.load(ins);
-
-        } catch (RepositoryException re) {
-            throw new ConfigurationException(re);
-        } finally {
-            tryClose(ins);
-        }
-    }
-
-    /**
-     * Calls the {@link #save(Node)} method if a repository <code>Node</code>
-     * has been set on this delegate. Otherwise calls the <code>save()</code>
-     * method of the <code>FileConfiguration</code> object which has been
-     * given to this instance at construction time.
-     *
-     * @throws ConfigurationException If an error occurrs saving the
-     *      configuration.
-     */
-    public void save() throws ConfigurationException {
-        if (jcrNode != null) {
-            save(jcrNode);
-        } else {
-            config.save();
-        }
-    }
-
-    /**
-     * Calls the <code>save(OutputStream)</code> method of the
-     * <code>FileConfiguration</code> to store the configuration data into a
-     * temporary file, which is then fed into the configuration property
-     * retrieved from the given <code>Node</code>.
-     *
-     * @param node The configuration <code>Node</code> to which the
-     *      configuration is to be saved.
-     *
-     * @throws ConfigurationException If an error occurrs accessing the
-     *      repository or saving the configuration.
-     */
-    public void save(javax.jcr.Node node) throws ConfigurationException {
-        // write the configuration to a temporary file
-        OutputStream out = null;
-        File tmp = null;
-        boolean success = false;
-        try {
-            tmp = File.createTempFile("srvcfg", ".tmp");
-            out = new FileOutputStream(tmp);
-            config.save(out);
-            success = true;
-        } catch (IOException ioe) {
-            throw new ConfigurationException(ioe);
-        } finally {
-            tryClose(out);
-
-            // delete the temp file, if saving failed (--> success == false)
-            if (!success && tmp != null) {
-                tmp.delete();
-            }
-        }
-
-        InputStream ins = null;
-        try {
-            ins = new FileInputStream(tmp);
-            Property configProp = getConfigurationProperty(node);
-
-            // create version before update ???
-            boolean doCheckIn = false;
-            if (configProp.getParent().isNodeType("mix:versionable") &&
-                    !configProp.getParent().isCheckedOut()) {
-                configProp.getParent().checkout();
-                doCheckIn = true;
-            }
-
-            configProp.setValue(ins);
-            configProp.save();
-
-            if (doCheckIn) {
-                configProp.getParent().checkin();
-            }
-
-        } catch (IOException ioe) {
-            throw new ConfigurationException(ioe);
-        } catch (RepositoryException re) {
-            throw new ConfigurationException(re);
-        } finally {
-            tryClose(ins);
-            tmp.delete();
-        }
-    }
-
-    /**
-     * Returns the property containing configuration data in the given
-     * <code>configurationNode</code>. The property to use is found following
-     * the the node's primary item trail: While the primary item is a node,
-     * the node's primary item is accessed. If it is a property which is not a
-     * reference, the property is returned. If the property is a reference,
-     * the reference is resolved and this step is repeated.
-     * <p>
-     * If no configuration property can be found this method throws a
-     * <code>RepositoryException</code>.
-     *
-     * @param configurationNode The <code>Node</code> containing property to
-     *      access at the end of the primary item trail.
-     *
-     * @return The property containing the configuration.
-     *
-     * @throws RepositoryException If an error occurrs accessing the node or if
-     *      no configuration property can be found.
-     */
-    /* package */ static Property getConfigurationProperty(
-            Node configurationNode) throws RepositoryException {
-
-        // find the primary item now
-        for (;;) {
-            Item item = configurationNode.getPrimaryItem();
-            if (!item.isNode()) {
-                Property prop = (Property) item;
-
-                // if the property is not a reference return it
-                if (prop.getType() != PropertyType.REFERENCE) {
-                    return prop;
-                }
-
-                // otherwise get the referred to node and continue finding
-                // the primary item
-                item = prop.getNode();
-            }
-
-            configurationNode = (Node) item;
-        }
-    }
-
-    /**
-     * Closes the <code>InputStream</code> <code>in</code> if not
-     * <code>null</code> and ignores a potential <code>IOException</code> thrown
-     * from closing the stream.
-     *
-     * @param in The <code>InputStream</code> to close. This may be
-     *          <code>null</code>.
-     */
-    public static void tryClose(InputStream in) {
-        if (in != null) {
-            try {
-                in.close();
-            } catch (IOException ioe) {
-                // ignored by intent
-            }
-        }
-    }
-
-    /**
-     * Closes the <code>OutputStream</code> <code>out</code> if not
-     * <code>null</code> and ignores a potential <code>IOException</code> thrown
-     * from closing the stream.
-     *
-     * @param out The <code>OutputStream</code> to close. This may be
-     *          <code>null</code>.
-     */
-    public static void tryClose(OutputStream out) {
-        if (out != null) {
-            try {
-                out.close();
-            } catch (IOException ioe) {
-                // ignored by intent
-            }
-        }
-    }
-}
diff --git a/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/configuration/ItemConfiguration.java b/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/configuration/ItemConfiguration.java
deleted file mode 100644
index 3bb5f7b..0000000
--- a/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/configuration/ItemConfiguration.java
+++ /dev/null
@@ -1,821 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.extension.configuration;
-
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import javax.jcr.NodeIterator;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.Property;
-import javax.jcr.PropertyIterator;
-import javax.jcr.PropertyType;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.Value;
-import javax.jcr.ValueFactory;
-
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.configuration.ConfigurationKey;
-import org.apache.commons.configuration.HierarchicalConfiguration;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.extension.ExtensionDescriptor;
-
-/**
- * The <code>ItemConfiguration</code> extends the
- * <code>HierarchicalConfiguration</code> class providing support to load the
- * configuration from a repository. It represents the repository subtree from
- * which the configuration is loaded as a configuration tree of configuration
- * nodes and attributes.
- * <p>
- * The configuration is rooted at a user supplied repository node which must be
- * defined such, that properties and child nodes of any type and name may be
- * added. The best way to achieve this is to define the node as of type
- * <code>nt:unstructured</code>.
- * <p>
- * <b>Note on names</b>
- * <p>
- * This implementation uses the repository item names as (basis of) the names of
- * the hierarchy configuration nodes. As such there exists a restriction on
- * those names: The <code>HierarchicalConfiguration</code> extended by this
- * class uses dots (<code>.</code>) as hierarchy level separators. Therefore
- * any configuration node's name with a dot in it will likely lead to unsuable
- * configuration.
- * <p>
- * <i>Therefore it is strongly recommended to not use dots in repository element
- * names to be used by this configuration class.</i>
- * <p id="dataTypeConversion">
- * <b>Data Type Conversion</b>
- * <p>
- * This implementation tries its best to preserve the configuration data type
- * when loading or saving the configuration data. Because the mapping between
- * Java data types supported by the configuration objects and the data types
- * supported by the repository, a mapping has to be applied, which may lead to a
- * certain but acceptable loss of accuracy.
- * <p>
- * When loading values from the repository, the following type conversion
- * applies: <table>
- * <tr>
- * <th>JCR Type
- * <th>Java Type</tr>
- * <tr>
- * <td>Boolean
- * <td>Boolean</tr>
- * <tr>
- * <td>Date
- * <td>Calendar</tr>
- * <tr>
- * <td>Double
- * <td>Double</tr>
- * <tr>
- * <td>Long
- * <td>Long</tr>
- * <tr>
- * <td>Binary, Name, Path, Reference, String, Undefined
- * <td>String</tr>
- * </table>
- * <p>
- * When saveing configuaration data to the repository, the following type
- * conversion applies: <table>
- * <tr>
- * <th>Java Type
- * <th>JCR Type</tr>
- * <tr>
- * <td>String
- * <td>String</tr>
- * <tr>
- * <td>Boolean
- * <td>Boolean</tr>
- * <tr>
- * <td>Calendar
- * <td>Date</tr>
- * <tr>
- * <td>Double or Float
- * <td>Double</tr>
- * <tr>
- * <td>Number except Double and Float
- * <td>Long</tr>
- * <tr>
- * <td>Other types, incl. <code>null</code>
- * <td>String</tr>
- * </table>
- *
- * @author Felix Meschberger
- * @version $Rev:$, $Date$
- */
-public class ItemConfiguration extends HierarchicalConfiguration implements
-        RepositoryConfiguration {
-
-    /** default log */
-    private static final Log log = LogFactory.getLog(ExtensionDescriptor.class);
-
-    /**
-     * The name of the property providing the configuration value of a
-     * configuration node.
-     */
-    private static final String NODE_CONTENT_PROPERTY = "__DEFAULT__";
-
-    /**
-     * The <code>Node</code> to which this configuration is attached. The
-     * configuration data itself is loaded and saved from/to the
-     * <code>configuration</code> child node of this node.
-     *
-     * @see #load(javax.jcr.Node)
-     * @see #save(javax.jcr.Node)
-     */
-    private javax.jcr.Node jcrNode;
-
-    /**
-     * The backlog of absolute paths of items which backed removed configuration
-     * data. This set is worked through to remove the items when the
-     * configuration is saved.
-     *
-     * @see #save(javax.jcr.Node)
-     * @see ItemNode#removeReference()
-     */
-    private Set deleteBackLog;
-
-    /**
-     * Creates an empty configuration not hooked to any node.
-     */
-    public ItemConfiguration() {
-        super();
-    }
-
-    /**
-     * Creates a configuration attached to the given <code>node</code> and
-     * load the configuration data from the <code>configuration</code> child
-     * node.
-     * <p>
-     * If <code>node</code> is <code>null</code>, this constructor has the same
-     * effect as the default constructor ({@link #ItemConfiguration()} in that
-     * this configuration is not attached to a <code>Node</code> and
-     * configuration is not loaded.
-     *
-     * @param node The <code>Node</code> containing the configuration data.
-     *
-     * @throws ConfigurationException If an error occurrs loading the
-     *      configuration data.
-     */
-    public ItemConfiguration(javax.jcr.Node node) throws ConfigurationException {
-        super();
-
-        setNode(node);
-        load();
-    }
-
-    /**
-     * Returns the <code>Node</code> to which this configuration is attached.
-     * If this configuration is not attached to a node, this method returns
-     * <code>null</code>.
-     */
-    public javax.jcr.Node getNode() {
-        return jcrNode;
-    }
-
-    /**
-     * Attaches this configuration to the given node to provide
-     * ({@link #load(javax.jcr.Node)}) or take ({@link #save(javax.jcr.Node)})
-     * configuration data. To detach this configuration from the repository,
-     * set <code>node</code> to <code>null</code>.
-     *
-     * @param node The <code>Node</code> to which this configuration is
-     *            attached or <code>null</code> to detach the configuration.
-     */
-    public void setNode(javax.jcr.Node node) {
-        // if the new node is different from the old node, remove the current
-        // configuration's references
-        if (isDifferent(node)) {
-            removeReferences(getRoot());
-        }
-
-        // set the new node
-        this.jcrNode = node;
-    }
-
-    /**
-     * Creates an instance of the <code>ItemNode</code> class with an empty
-     * reference.
-     * <p>
-     * As noted in the class comment, the name should not contain a dot,
-     * otherwise the <code>HierarchicalConfiguration</code> class will have
-     * problems resolving the configuration.
-     *
-     * @param name The name of the new configuratio node.
-     */
-    protected Node createNode(String name) {
-        return new ItemNode(name, null);
-    }
-
-    /**
-     * Loads the configuration data from the <code>Node</code> to which this
-     * configuration is attached. If this configuration is not attached to
-     * a <code>Node</code>, this method has no effect.
-     * <p>
-     * If configuration data is already present in this configuration, the data
-     * is extended by the data loaded from the <code>Node</code>. To prevent
-     * such additions, clear this configuration before loading new data.
-     *
-     * @throws ConfigurationException If an error occurrs loading the
-     *      configuration data.
-     *
-     * @see #load(javax.jcr.Node)
-     */
-    public void load() throws ConfigurationException {
-        if (jcrNode != null) {
-            load(jcrNode);
-        }
-    }
-
-    /**
-     * Loads the configuration data from the given <code>node</code>. If
-     * <code>node</code> is <code>null</code>, a <code>NullPointerException</code>
-     * is thrown.
-     * <p>
-     * If configuration data is already present in this configuration, the data
-     * is extended by the data loaded from the <code>Node</code>. To prevent
-     * such additions, clear this configuration before loading new data.
-     *
-     * @param node The <code>Node</code> containing the configuration to be
-     *      loaded into this configuration. This must no be <code>null</code>.
-     *
-     * @throws NullPointerException if <code>node</code> is <code>null</code>.
-     * @throws ConfigurationException If an error occurrs loading the
-     *      configuration data.
-     */
-    public void load(javax.jcr.Node node) throws ConfigurationException {
-        try {
-            boolean sameNode = !isDifferent(node);
-
-            // construct the hierarchy and record references if loading
-            // from the node this configuration is attached to
-            constructHierarchy(getRoot(), node, sameNode);
-        } catch (RepositoryException re) {
-            throw new ConfigurationException(re);
-        }
-    }
-
-    /**
-     * Saves the configuration data to the <code>Node</code> to which this
-     * configuration is attached. If this configuration is not attached to
-     * a <code>Node</code>, this method has no effect.
-     *
-     * @throws ConfigurationException If an error occurrs saving the
-     *      configuration data.
-     *
-     * @see #save(javax.jcr.Node)
-     */
-    public void save() throws ConfigurationException {
-        if (jcrNode != null) {
-            save(jcrNode);
-        }
-    }
-
-    /**
-     * Saves the configuration data to the given <code>node</code>. If
-     * <code>node</code> is <code>null</code>, a <code>NullPointerException</code>
-     * is thrown.
-     *
-     * @param node The <code>Node</code> to store the configuration to. This
-     *      must no be <code>null</code>.
-     *
-     * @throws NullPointerException if <code>node</code> is <code>null</code>.
-     * @throws ConfigurationException If an error occurrs saving the
-     *      configuration data.
-     */
-    public void save(javax.jcr.Node node) throws ConfigurationException {
-        boolean lockable = false;
-        try {
-            // remove the node references from the current configuration
-            // nodes if the destination is different from the node to which
-            // the configuration is attached
-            if (isDifferent(node)) {
-                removeReferences(getRoot());
-            }
-
-            lockable = node.isNodeType("mix:lockable");
-            if (lockable) {
-                if (node.isLocked()) {
-                    // trick: reset lockable to not unlock in finally{}
-                    lockable = false;
-                    throw new ConfigurationException("Configuration node is locked");
-                }
-
-                // deep session lock
-                node.lock(true, true);
-            }
-
-            // check whether the node is versionable
-            boolean versionable = node.isNodeType("mix:versionable");
-
-            // make sure the node is checked out for modification
-            if (versionable && !node.isCheckedOut()) {
-                node.checkout();
-            }
-
-            // remove all items which have to be removed because the
-            // configuration which were backed by them has been removed
-            if (deleteBackLog != null) {
-                Session session = node.getSession();
-                for (Iterator di=deleteBackLog.iterator(); di.hasNext(); ) {
-                    String itemPath = (String) di.next();
-                    try {
-                        session.getItem(itemPath).remove();
-                    } catch (PathNotFoundException pnfe) {
-                        // might have already been removed, ignore
-                        log.debug("Item " + itemPath + " cannot be accessed for removal",
-                            pnfe);
-                    }
-                }
-            }
-
-            // store now
-            ItemBuilderVisitor builder = new ItemBuilderVisitor(node);
-            builder.processDocument(getRoot());
-
-            // save modifications
-            node.save();
-
-            // checkin after saving
-            if (versionable) {
-                node.checkin();
-            }
-
-        } catch (RepositoryException re) {
-            throw new ConfigurationException("Cannot save configuration", re);
-        } finally {
-            // if the node is still modified, this is an error and we
-            // rollback
-            try {
-                if (node.isModified()) {
-                    node.refresh(false);
-                } else {
-                    // reset deleteBackLog, because all items have been removed
-                    // and need not be removed the next time.
-                    // (If an error occurred saving the configuration, the back
-                    // log must remain, such that the deleted items may be
-                    // removed the next time, save() is called).
-                    deleteBackLog = null;
-                }
-            } catch (RepositoryException re) {
-                log.error("Problem refreshing persistent config state", re);
-            }
-
-            // unlock the node again
-            try {
-                if (lockable && node.isLocked()) {
-                    node.unlock();
-                }
-            } catch (RepositoryException re) {
-                log.warn("Cannot unlock configuration node", re);
-            }
-        }
-    }
-
-    /**
-     * Returns <code>true</code> if <code>newNode</code> is not the same
-     * repository <code>Node</code> as the <code>Node</code> to which this
-     * configuration is currently associated.
-     * <p>
-     * Removing the references makes sure that the complete configuration data
-     * is written to the repository the next time {@link #save()} is called.
-     *
-     * @param newNode The repository <code>Node</code> to which the current
-     *      base <code>Node</code> is compared.
-     *
-     * @return <code>true</code> if <code>newNode</code> is different to the
-     *      <code>Node</code> to which the configuration is currently attached.
-     */
-    private boolean isDifferent(javax.jcr.Node newNode) {
-        // return false if the objects are the same
-        if (jcrNode == newNode) {
-            return false;
-        }
-
-        // return true if no node yet and new is not null
-        if (jcrNode == null) {
-            return newNode != null;
-        }
-
-        // return true if the new node is null and the old is set
-        if (newNode == null) {
-            return jcrNode != null;
-        }
-
-        // otherwise try to compare the new to the old node
-        try {
-            return !jcrNode.isSame(newNode);
-        } catch (RepositoryException re) {
-            // cannot check whether the nodes are different, assume yes
-            log.warn("Cannot check whether the current and new nodes " +
-                "are different, assuming they are", re);
-        }
-
-        // fallback to different in case of problems
-        return true;
-    }
-
-    /**
-     * Vists all configuration nodes starting from the given <code>node</code>
-     * and resets all node's reference fields to <code>null</code>. This forces
-     * complete configuration storage on the next call to the {@link #save()} or
-     * {@link #save(javax.jcr.Node)} methods.
-     *
-     * @param node The <code>Node</code> at which to start removing references
-     */
-    private static void removeReferences(Node node) {
-        // remove repository item references from the nodes
-        node.visit(new NodeVisitor() {
-            public void visitBeforeChildren(Node node, ConfigurationKey key) {
-                node.setReference(null);
-            };
-        }, null);
-    }
-
-    /**
-     * Creates the internal configuration hierarchy of {@link ItemNode}s from
-     * the items in the repository.
-     *
-     * @param node The configuration node to which the new configuration is
-     *      attached.
-     * @param element The JCR <code>Node</code> from which the configuration
-     *      is read.
-     * @param elemRefs <code>true</code> if the configuration nodes created
-     *      while reading the repository items get the reference fields set to
-     *      the corresponding repository item.
-     *
-     * @throws RepositoryException If an error occurrs reading from the
-     *      repository.
-     */
-    private void constructHierarchy(Node node, javax.jcr.Node element,
-            boolean elemRefs) throws RepositoryException {
-
-        // create attribute child nodes for the element's properties
-        processAttributes(node, element, elemRefs);
-
-        // read the element's child nodes as child nodes into the configuration
-        NodeIterator list = element.getNodes();
-        while (list.hasNext()) {
-            javax.jcr.Node jcrNode = list.nextNode();
-
-            // ignore protected nodes
-            if (jcrNode.getDefinition().isProtected()) {
-                continue;
-            }
-
-            Node childNode = new ItemNode(jcrNode.getName(),
-                elemRefs ? jcrNode.getPath() : null);
-            constructHierarchy(childNode, jcrNode, elemRefs);
-            node.addChild(childNode);
-        }
-    }
-
-    /**
-     * Helper method for constructing node objects for the attributes of the
-     * given XML element.
-     *
-     * @param node the actual node
-     * @param element the actual XML element
-     * @param elemRefs a flag whether references to the XML elements should be
-     *            set
-     * @param node The configuration node to which the new configuration is
-     *      attached.
-     * @param element The JCR <code>Node</code> whose properties are to be
-     *      read and attached.
-     * @param elemRefs <code>true</code> if the configuration nodes created
-     *      while reading the properties get the reference fields set to the
-     *      corresponding property.
-     *
-     * @throws RepositoryException If an error occurrs reading from the
-     *      repository.
-     */
-    private void processAttributes(Node node, javax.jcr.Node element,
-            boolean elemRefs) throws RepositoryException {
-
-        PropertyIterator attributes = element.getProperties();
-        while (attributes.hasNext()) {
-            Property prop = attributes.nextProperty();
-
-            // ignore protected properties
-            if (prop.getDefinition().isProtected()) {
-                continue;
-            }
-
-            Value[] values;
-            if (prop.getDefinition().isMultiple()) {
-                values = prop.getValues();
-            } else {
-                values = new Value[] { prop.getValue() };
-            }
-
-            if (NODE_CONTENT_PROPERTY.equals(prop.getName())) {
-                // this is the value of the node itself
-                // only consider the first value
-                if (values.length > 0) {
-                    node.setValue(importValue(values[0]));
-                }
-            } else {
-                String name = ConfigurationKey.constructAttributeKey(prop.getName());
-                String ref = elemRefs ? prop.getPath() : null;
-                for (int i = 0; i < values.length; i++) {
-                    Node child = new ItemNode(name, ref);
-                    child.setValue(importValue(values[i]));
-                    node.addChild(child);
-                }
-            }
-        }
-    }
-
-    /**
-     * The <code>ItemNode</code> class extends the standard <code>Node</code>
-     * class by support for removing underlying repository items in case of
-     * removal of a configuration node.
-     *
-     * @author Felix Meschberger
-     * @version $Rev:$, $Date$
-     */
-    private class ItemNode extends Node {
-
-        /*
-         * This class is not static to have a reference to the owning instance
-         * such that the deleteBackLog set may be accessed which is used to
-         * record items to be removed due to ItemNode removals
-         */
-
-        /** fake serialVersionUID */
-        private static final long serialVersionUID = 1L;
-
-        /**
-         * Creates an instance of this node type presetting the reference.
-         *
-         * @param name The name of the new configuration node.
-         * @param reference The (optional) reference to initially set on the
-         *      new configuration node. This may be <code>null</code>.
-         */
-        protected ItemNode(String name, String reference) {
-            super(name);
-            setReference(reference);
-        }
-
-        /**
-         * Removes the associated repository item if this node is removed
-         * from the configuration.
-         */
-        protected void removeReference() {
-            if (getReference() != null) {
-
-                if (ConfigurationKey.isAttributeKey(getName())) {
-                    List list = getParent().getChildren(getName());
-                    if (list != null && list.size() > 0) {
-                        for (Iterator ci=list.iterator(); ci.hasNext(); ) {
-                            // clear references of sibblings
-                            ((Node) ci.next()).setReference(null);
-                        }
-                    }
-                }
-
-                if (deleteBackLog == null) {
-                    deleteBackLog = new HashSet();
-                }
-                deleteBackLog.add(getReference());
-            }
-        }
-    }
-
-    /**
-     * The <code>ItemBuilderVisitor</code> class stores the configuration
-     * rooted at a given <code>Node</code> to the repository <code>Node</code>
-     * defined at construction time.
-     * <p>
-     * This visitor just adds nodes and properties to the repository and does
-     * not care whether the operations actually overwrite data or not. It is
-     * recommended that the JCR <code>Node</code> from which the visitor is
-     * created be cleared before processing the configuration through the
-     * {@link #processDocument(Node)} method.
-     *
-     * @author Felix Meschberger
-     * @version $Rev:$, $Date$
-     */
-    private static class ItemBuilderVisitor extends BuilderVisitor {
-
-        /** Stores the document to be constructed. */
-        private javax.jcr.Node jcrNode;
-
-        /**
-         * Creates a new instance of <code>ItemBuilderVisitor</code> storing the
-         * configuration at and below the given <code>jcrNode</code>.
-         *
-         * @param jcrNode The JCR <code>Node</code> to take the configuration.
-         */
-        public ItemBuilderVisitor(javax.jcr.Node jcrNode) {
-            this.jcrNode = jcrNode;
-        }
-
-        /**
-         * Processes the node hierarchy and adds new items to the repository
-         *
-         * @param rootNode The configuration <code>Node</code> to start at in
-         *      the configuration hierarchy.
-         */
-        public void processDocument(Node rootNode) throws RepositoryException {
-            rootNode.setReference(jcrNode.getPath());
-            rootNode.visit(this, null);
-        }
-
-        /**
-         * Inserts a new node. This implementation ensures that the correct XML
-         * element is created and inserted between the given siblings.
-         *
-         * @param newNode the node to insert
-         * @param parent the parent node
-         * @param sibling1 the first sibling
-         * @param sibling2 the second sibling
-         * @return the new node
-         */
-        protected Object insert(Node newNode, Node parent, Node sibling1,
-            Node sibling2) {
-
-            try {
-                // get the parent's owning node
-                javax.jcr.Node parentNode;
-                if (parent.getName() == null) {
-                    parentNode = jcrNode;
-                } else {
-                    String ref = (String) parent.getReference();
-                    parentNode = (javax.jcr.Node) jcrNode.getSession().getItem(ref);
-                }
-
-                // if the configuration node is an attribute, set the respective
-                // property and return.
-                if (ConfigurationKey.isAttributeKey(newNode.getName())) {
-                    updateAttribute(parent, parentNode, newNode.getName());
-                    return null;
-                }
-
-                // create the repository node for the configuration node
-                javax.jcr.Node elem = parentNode.addNode(newNode.getName());
-
-                // if the configuration node has a value, set the __DEFAULT__
-                // property to this value
-                if (newNode.getValue() != null) {
-                    Value value =
-                        exportValue(elem.getSession().getValueFactory(),
-                            newNode.getValue());
-                    elem.setProperty(NODE_CONTENT_PROPERTY, value);
-                }
-
-                // order before sibling2 if defined, ignore sibling1
-                if (parentNode.getPrimaryNodeType().hasOrderableChildNodes()) {
-                    if (sibling2 != null) {
-                        parentNode.orderBefore(newNode.getName(),
-                            sibling2.getName());
-                    }
-                }
-
-                return elem.getPath();
-            } catch (RepositoryException re) {
-                log.warn("Cannot update repository for configuration node " +
-                    newNode.getName(), re);
-            }
-
-            // fallback to returning nothing
-            return null;
-        }
-
-        /**
-         * Helper method for updating the value of the specified node's
-         * attribute with the given name.
-         *
-         * @param node the affected node
-         * @param elem the element that is associated with this node
-         * @param name the name of the affected attribute
-         */
-        private void updateAttribute(Node node, javax.jcr.Node elem,
-            String name) throws RepositoryException {
-            if (node != null && elem != null) {
-                String propName = ConfigurationKey.attributeName(name);
-
-                // copy the values of all like named attributes to another list
-                List attrs = node.getChildren(name);
-                List values = new ArrayList();
-                for (Iterator ai = attrs.iterator(); ai.hasNext();) {
-                    Node attr = (Node) ai.next();
-                    if (attr.getValue() != null) {
-                        values.add(attr.getValue());
-                    }
-                }
-
-                // remove property before trying to set
-                if (elem.hasProperty(propName)) {
-                    elem.getProperty(propName).remove();
-                }
-
-                Property attrProp;
-                ValueFactory vf = elem.getSession().getValueFactory();
-                if (values.size() == 0) {
-                    // no attribute values
-                    attrProp = null;
-                } else if (values.size() == 1) {
-                    // single valued property
-                    attrProp =
-                        elem.setProperty(propName, exportValue(vf, values.get(0)));
-                } else {
-                    Value[] valArray = new Value[values.size()];
-                    for (int i = 0; i < valArray.length; i++) {
-                        valArray[i] = exportValue(vf, values.get(i));
-                    }
-                    attrProp = elem.setProperty(propName, valArray);
-                }
-
-                // set the references on the attribute nodes
-                String ref = attrProp != null ? attrProp.getPath() : null;
-                for (Iterator ai = attrs.iterator(); ai.hasNext();) {
-                    Node attr = (Node) ai.next();
-                    attr.setReference(ref);
-                }
-            }
-        }
-    }
-
-    //---------- Data type helpers for loading and storing --------------------
-
-    /**
-     * Converts the JCR <code>Value</code> object to a configuration value of
-     * the corresponding runtime Java type. See the <a
-     * href="#dataTypeConversion">class comment</a> for information on the type
-     * conversion applied.
-     *
-     * @param jcrValue The JCR <code>Value</code> to convert into a
-     *            configuration value object.
-     * @return The configuration value object.
-     * @throws NullPointerException if <code>jcrValue</code> is
-     *             <code>null</code>.
-     */
-    private static Object importValue(Value jcrValue)
-            throws RepositoryException {
-
-        switch (jcrValue.getType()) {
-            case PropertyType.BOOLEAN:
-                return new Boolean(jcrValue.getBoolean());
-            case PropertyType.DATE:
-                return jcrValue.getDate();
-            case PropertyType.DOUBLE:
-                return new Double(jcrValue.getDouble());
-            case PropertyType.LONG:
-                return new Long(jcrValue.getLong());
-            default:
-                // Binary, Name, Path, Reference, String, Undefined
-                return jcrValue.getString();
-        }
-    }
-
-    /**
-     * Converts the value object to a JCR <code>Value</code> instance
-     * according to the runtime type of the <code>value</code>. See the <a
-     * href="#dataTypeConversion">class comment</a> for information on the type
-     * conversion applied.
-     *
-     * @param vf The <code>ValueFactory</code> used to create JCR
-     *            <code>Value</code> objects.
-     * @param value The configuration value to convert (export) to a JCR
-     *            <code>Value</code> object.
-     * @return The JCR <code>Value</code> object representing the
-     *         configuration value.
-     */
-    private static Value exportValue(ValueFactory vf, Object value) {
-        if (value instanceof String) {
-            return vf.createValue((String) value);
-        } else if (value instanceof Boolean) {
-            return vf.createValue(((Boolean) value).booleanValue());
-        } else if (value instanceof Calendar) {
-            return vf.createValue((Calendar) value);
-        } else if (value instanceof Double || value instanceof Float) {
-            // handle float and double values as double
-            return vf.createValue(((Number) value).doubleValue());
-        } else if (value instanceof Number) {
-            // handle other numbers (float and double above) as long
-            return vf.createValue(((Number) value).longValue());
-        } else {
-            return vf.createValue(String.valueOf(value));
-        }
-    }
-}
\ No newline at end of file
diff --git a/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/configuration/PropertiesNodeConfiguration.java b/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/configuration/PropertiesNodeConfiguration.java
deleted file mode 100644
index 8e46c05..0000000
--- a/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/configuration/PropertiesNodeConfiguration.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.extension.configuration;
-
-import java.io.File;
-import java.net.URL;
-
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.configuration.PropertiesConfiguration;
-
-/**
- * The <code>PropertiesNodeConfiguration</code> extends the Apache Commons
- * <code>PropertiesConfiguration</code> by support for loading the properties
- * from a repository property in addition to the standard loading source such
- * as file, URL, and streams.
- *
- * @author Felix Meschberger
- * @version $Rev:$, $Date$
- */
-public class PropertiesNodeConfiguration extends PropertiesConfiguration
-        implements RepositoryConfiguration {
-
-    /**
-     * The delegate object which takes care for actually loading and saving
-     * configuration to and from the repository.
-     */
-    private final ConfigurationIODelegate delegate =
-        new ConfigurationIODelegate(this);
-
-    /**
-     * Creates an empty <code>PropertiesNodeConfiguration</code> object which
-     * can be used to synthesize a new Properties file by adding values and then
-     * saving(). An object constructed by this constructor can not be tickled
-     * into loading included files because it cannot supply a base for relative
-     * includes.
-     */
-    public PropertiesNodeConfiguration() {
-        super();
-    }
-
-    /**
-     * Creates and loads the extended properties from the specified file. The
-     * specified file can contain "include = " properties which then are loaded
-     * and merged into the properties.
-     *
-     * @param fileName The name of the properties file to load.
-     *
-     * @throws ConfigurationException Error while loading the properties file
-     */
-    public PropertiesNodeConfiguration(String fileName)
-            throws ConfigurationException {
-        super(fileName);
-    }
-
-    /**
-     * Creates and loads the extended properties from the specified file. The
-     * specified file can contain "include = " properties which then are loaded
-     * and merged into the properties.
-     *
-     * @param file The properties file to load.
-     *
-     * @throws ConfigurationException Error while loading the properties file
-     */
-    public PropertiesNodeConfiguration(File file) throws ConfigurationException {
-        super(file);
-    }
-
-    /**
-     * Creates and loads the extended properties from the specified URL. The
-     * specified file can contain "include = " properties which then are loaded
-     * and merged into the properties.
-     *
-     * @param url The location of the properties file to load.
-     *
-     * @throws ConfigurationException Error while loading the properties file
-     */
-    public PropertiesNodeConfiguration(URL url) throws ConfigurationException {
-        super(url);
-    }
-
-    /**
-     * Creates and loads the extended properties from the specified
-     * <code>node</code>. An object constructed by this constructor can not be
-     * tickled into loading included files because it cannot supply a base for
-     * relative includes.
-     *
-     * @param node The <code>Node</code> from which to load the configuration.
-     *
-     * @throws ConfigurationException Error while loading the properties file
-     *
-     */
-    public PropertiesNodeConfiguration(javax.jcr.Node node)
-            throws ConfigurationException {
-        super();
-        setIncludesAllowed(false);
-        setNode(node);
-        load();
-    }
-
-    /**
-     * Returns the <code>Node</code> on which this configuration is based. If
-     * this is not a repository-based configuration object or has not been
-     * configured to load from the repository, this method returns
-     * <code>null</code>.
-     */
-    public javax.jcr.Node getNode() {
-        return delegate.getNode();
-    }
-
-    /**
-     * Sets the <code>Node</code> on which this configuration is based.
-     */
-    public void setNode(javax.jcr.Node node) {
-        delegate.setNode(node);
-    }
-
-    /**
-     * Loads the configuration from the underlying location.
-     *
-     * @throws ConfigurationException if loading of the configuration fails
-     */
-    public void load() throws ConfigurationException {
-        delegate.load();
-    }
-
-    /**
-     * Loads the configuration from the <code>node</code>. The property to
-     * use is found following the the node's primary item trail: While the
-     * primary item is a node, the node's primary item is accessed. If it is a
-     * property which is not a reference, the property is returned. If the
-     * property is a reference, the reference is resolved and this step is
-     * repeated.
-     * <p>
-     * If no property can be found using above mentioned algorithm, loading the
-     * configuration fails.
-     *
-     * @param node The <code>Node</code> of the repository based configuration
-     *            to load from.
-     * @throws ConfigurationException if an error occurs during the load
-     *             operation or if no property can be found containing the
-     *             properties "file".
-     */
-    public void load(javax.jcr.Node node) throws ConfigurationException {
-        delegate.load(node);
-    }
-
-    /**
-     * Saves the configuration to the underlying location.
-     *
-     * @throws ConfigurationException if saving of the configuration fails
-     */
-    public void save() throws ConfigurationException {
-        delegate.save();
-    }
-
-    /**
-     * Saves the configuration in the <code>node</code>. The same algorithm
-     * applies for finding the property to store the configuration in as is
-     * applied by the {@link #load(javax.jcr.Node)} method. If no property can
-     * be found, the configuration cannot be saved.
-     *
-     * @param node The <code>Node</code> of the repository based configuration
-     *      to save the configuration in.
-     *
-     * @throws ConfigurationException if an error occurs during the save
-     *      operation.
-     */
-    public void save(javax.jcr.Node node) throws ConfigurationException {
-        delegate.save(node);
-    }
-}
diff --git a/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/configuration/RepositoryConfiguration.java b/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/configuration/RepositoryConfiguration.java
deleted file mode 100644
index 0f7413d..0000000
--- a/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/configuration/RepositoryConfiguration.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.extension.configuration;
-
-import javax.jcr.Node;
-
-import org.apache.commons.configuration.Configuration;
-import org.apache.commons.configuration.ConfigurationException;
-
-/**
- * The <code>RepositoryConfiguration</code> interface extends the
- * <code>Configuration</code> with support for loading configuration from
- * a JCR repository and storing the configuration in a JCR repository.
- *
- * @author Felix Meschberger
- * @version $Rev:$, $Date$
- */
-public interface RepositoryConfiguration extends Configuration {
-
-    /**
-     * Returns the repository <code>Node</code> to which this configuration
-     * is attached.
-     */
-    Node getNode();
-
-    /**
-     * Attaches this configuration to the repository <code>Node</code>.
-     *
-     * @param node The <code>Node</code> to which the configuration object
-     *      is attached or <code>null</code> to actually detach the
-     *      configuration from the configuration node.
-     */
-    void setNode(Node node);
-
-    /**
-     * Loads the configuration from the <code>node</code> and child items.
-     *
-     * @throws ConfigurationException if an error occurs during the load
-     *      operation
-     */
-    void load() throws ConfigurationException;
-
-    /**
-     * Loads the configuration from the <code>node</code> and child items.
-     *
-     * @param node The root <code>Node</code> of the repository based
-     *      configuration to load from.
-     *
-     * @throws ConfigurationException if an error occurs during the load
-     *      operation
-     */
-    void load(Node node) throws ConfigurationException;
-
-    /**
-     * Save the configuration to the specified node.
-     * <p>
-     * Before actually storing any configuration data all properties and child
-     * nodes of the <code>node</code> are removed to be able to write clean
-     * configuration.
-     * <p>
-     * If the node is versionable, the node is checked out (if required) before
-     * saving the configuration and checked in again after saving the
-     * configuration.
-     * <p>
-     * Invariants:
-     * <ul>
-     * <li>If an error occurrs, all modifications must be rolled back and the
-     *      <code>node</code> and all properties and child nodes must remain
-     *      in the former state.
-     * <li>If all goes well, the <code>node</code>, properties and child nodes
-     *      reflect the current state of the configuration and the
-     *      <code>node</code> has been persisted in the repository.
-     * <li>If all goes well and the <code>node</code> is versionable, the
-     *      <code>node</code> is checked in. If an error occurrs it is not
-     *      specified whether the versionable <code>node</code> is checked in
-     *      or not.
-     * </ul>
-     *
-     * @throws ConfigurationException if an error occurs during the save
-     *      operation
-     *
-     * @see #setNode(Node)
-     * @see #getNode()
-     */
-    void save() throws ConfigurationException;
-
-    /**
-     * Save the configuration to the specified node.
-     * <p>
-     * Before actually storing any configuration data all properties and child
-     * nodes of the <code>node</code> are removed to be able to write clean
-     * configuration.
-     * <p>
-     * If the node is versionable, the node is checked out (if required) before
-     * saving the configuration and checked in again after saving the
-     * configuration.
-     * <p>
-     * Invariants:
-     * <ul>
-     * <li>If an error occurrs, all modifications must be rolled back and the
-     *      <code>node</code> and all properties and child nodes must remain
-     *      in the former state.
-     * <li>If all goes well, the <code>node</code>, properties and child nodes
-     *      reflect the current state of the configuration and the
-     *      <code>node</code> has been persisted in the repository.
-     * <li>If all goes well and the <code>node</code> is versionable, the
-     *      <code>node</code> is checked in. If an error occurrs it is not
-     *      specified whether the versionable <code>node</code> is checked in
-     *      or not.
-     * </ul>
-     *
-     * @param node The root <code>Node</code> of the repository based
-     *      configuration to save to.
-     *
-     * @throws ConfigurationException if an error occurs during the save
-     *      operation
-     */
-    void save(Node node) throws ConfigurationException;
-}
diff --git a/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/configuration/XMLNodeConfiguration.java b/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/configuration/XMLNodeConfiguration.java
deleted file mode 100644
index d09feb1..0000000
--- a/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/configuration/XMLNodeConfiguration.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.extension.configuration;
-
-import java.io.File;
-import java.net.URL;
-
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.configuration.XMLConfiguration;
-
-/**
- * The <code>XMLNodeConfiguration</code> extends the Apache Commons
- * <code>XMLConfiguration</code> by support for loading the XML configuratîon
- * from a repository property in addition to the standard loading source such as
- * file, URL, and streams.
- *
- * @author Felix Meschberger
- * @version $Rev:$, $Date$
- */
-public class XMLNodeConfiguration extends XMLConfiguration implements
-        RepositoryConfiguration {
-
-    /**
-     * The delegate object which takes care for actually loading and saving
-     * configuration to and from the repository.
-     */
-    private final ConfigurationIODelegate delegate =
-        new ConfigurationIODelegate(this);
-
-    {
-        // set the default encoding to UTF-8
-        setEncoding(ConfigurationIODelegate.ENCODING);
-    }
-
-    /**
-     * Creates an empty <code>XMLNodeConfiguration</code> object which can be
-     * used to synthesize a new XML file by adding values and then saving().
-     */
-    public XMLNodeConfiguration() {
-        super();
-    }
-
-    /**
-     * Creates and loads the configuration from the specified file.
-     *
-     * @param fileName The name of the XML file to load.
-     *
-     * @throws ConfigurationException Error while loading the XML file
-     */
-    public XMLNodeConfiguration(String fileName) throws ConfigurationException {
-        super(fileName);
-    }
-
-    /**
-     * Creates and loads the configuration from the specified file.
-     *
-     * @param file The XML file to load.
-     *
-     * @throws ConfigurationException Error while loading the XML file
-     */
-    public XMLNodeConfiguration(File file) throws ConfigurationException {
-        super(file);
-    }
-
-    /**
-     * Creates and loads the configuration from the specified URL
-     *
-     * @param url The location of the XML file to load.
-     *
-     * @throws ConfigurationException Error while loading the XML file
-     */
-    public XMLNodeConfiguration(URL url) throws ConfigurationException {
-        super(url);
-    }
-
-    /**
-     * Creates and loads the configuration from the specified <code>node</code>.
-     *
-     * @param node The <code>Node</code> from which to load the configuration.
-     * @throws ConfigurationException Error while loading the XML file
-     */
-    public XMLNodeConfiguration(javax.jcr.Node node)
-            throws ConfigurationException {
-        super();
-        setNode(node);
-        load();
-    }
-
-    /**
-     * Returns the <code>Node</code> on which this configuration is based. If
-     * this is not a repository-based configuration object or has not been
-     * configured to load from the repository, this method returns
-     * <code>null</code>.
-     */
-    public javax.jcr.Node getNode() {
-        return delegate.getNode();
-    }
-
-    /**
-     * Sets the <code>Node</code> on which this configuration is based.
-     */
-    public void setNode(javax.jcr.Node node) {
-        delegate.setNode(node);
-    }
-
-    /**
-     * Loads the configuration from the underlying location.
-     *
-     * @throws ConfigurationException if loading of the configuration fails
-     */
-    public void load() throws ConfigurationException {
-        delegate.load();
-    }
-
-    /**
-     * Loads the configuration from the <code>node</code>. The property to
-     * use is found following the the node's primary item trail: While the
-     * primary item is a node, the node's primary item is accessed. If it is a
-     * property which is not a reference, the property is returned. If the
-     * property is a reference, the reference is resolved and this step is
-     * repeated.
-     * <p>
-     * If no property can be found using above mentioned algorithm, loading the
-     * configuration fails.
-     *
-     * @param node The <code>Node</code> of the repository based configuration
-     *            to load from.
-     * @throws ConfigurationException if an error occurs during the load
-     *             operation or if no property can be found containing the
-     *             properties "file".
-     */
-    public void load(javax.jcr.Node node) throws ConfigurationException {
-        delegate.load(node);
-    }
-
-    /**
-     * Saves the configuration to the underlying location.
-     *
-     * @throws ConfigurationException if saving of the configuration fails
-     */
-    public void save() throws ConfigurationException {
-        delegate.save();
-    }
-
-    /**
-     * Saves the configuration in the <code>node</code>. The same algorithm
-     * applies for finding the property to store the configuration in as is
-     * applied by the {@link #load(javax.jcr.Node)} method. If no property can
-     * be found saving the configuration fails.
-     *
-     * @param node The <code>Node</code> of the repository based configuration
-     *      to save the configuration in.
-     *
-     * @throws ConfigurationException if an error occurs during the save
-     *      operation.
-     */
-    public void save(javax.jcr.Node node) throws ConfigurationException {
-        delegate.save(node);
-    }
-}
\ No newline at end of file
diff --git a/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/configuration/package.html b/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/configuration/package.html
deleted file mode 100644
index 78435df..0000000
--- a/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/configuration/package.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<body>
-<p>
-This package contains classes and interfaces extending the Jakarta Commons
-Configuration library by support for Repository based configuration where
-the nodes and properties are read from and written to a subtree of the
-repository.
-</p>
-</body>
\ No newline at end of file
diff --git a/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/package.html b/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/package.html
deleted file mode 100644
index d6d811b..0000000
--- a/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/package.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<body>
-<p>This package contains the Jackrabbit Extension Framework. See the Jackrabbit
-Extension Framework site for an in-depth description.</p>
-</body>
diff --git a/contrib/extension-framework/src/main/resources/org/apache/jackrabbit/extension/type.cnd b/contrib/extension-framework/src/main/resources/org/apache/jackrabbit/extension/type.cnd
deleted file mode 100644
index c85d791..0000000
--- a/contrib/extension-framework/src/main/resources/org/apache/jackrabbit/extension/type.cnd
+++ /dev/null
@@ -1,30 +0,0 @@
-/*

- * The "type.cnd" file contains the (mixin) node type definition which is

- * required by the ExtensionManager class.

- *

- * NOTE: This file is read through a reader with encoding "ISO-8859-1".

- *

- * @author Felix Meschberger

- * @version $Rev:$, $Date:$

- * @see org.apache.jackrabbit.extension.ExtensionManager

- * @see org.apache.jackrabbit.extension.NodeTypeSupport

- */

-

-// The "rep" namespace is expected to be present in the repository.

-// For Jackrabbit based repositories, this is true, for other repositories, we

-// present the namespace declaration here.

-// This declaration is inline with the Jackrabbit internal namespace declaration

-// for the "rep" namespace.

-<rep = 'internal'>

-<nt = 'http://www.jcp.org/jcr/nt/1.0'>

-

-[rep:extension] mixin

-

-- rep:name(string) mandatory copy

-- rep:id(string) mandatory copy

-- rep:class(string) copy

-- rep:classpath(path) multiple copy

-- rep:configurationClass(string) copy

-

-+ rep:configuration (nt:base) = nt:unstructured

-	multiple copy
\ No newline at end of file
diff --git a/contrib/extension-framework/src/site/xdoc/classes.xml b/contrib/extension-framework/src/site/xdoc/classes.xml
deleted file mode 100644
index 640532c..0000000
--- a/contrib/extension-framework/src/site/xdoc/classes.xml
+++ /dev/null
@@ -1,115 +0,0 @@
-<?xml version="1.0"?>
-<document>
-    <properties>
-        <title>Jackrabbit Extension Framework - Extension Classes</title>
-    </properties>
-    <body>
-        <section name="Extension Classes">
-            <p>
-                The extension declaration may also contain the (fully
-                qualified) name of a class implementing the extension.
-                Besides finding extension descriptions the Jackrabbit Extension
-                Framework is also able to create instances of extensions
-                and prime them with the extension descriptor, which
-                defined how to instantiate the extension.
-            </p>
-            <p>
-                This page contains information on how class implementing
-                the extensions are loaded how the extensions are then
-                instantiated.
-            </p>
-
-            <subsection name="Loading">
-                <p>
-                    All access to the Jackrabbit Extensions Framework goes
-                    through an instance of the
-                    <code>ExtensionManager</code>
-                    class, which is created using a
-                    <code>Session</code>
-                    and a class loader. While the session is used to
-                    access the repository and also confines access to a
-                    certain workspace, the class loader provided is
-                    actually the basis for loading extension classes.
-                </p>
-                <p>
-                    As has been noted in the
-                    <a href="index.html#Introduction">Introduction</a>
-                    one of the advantages of the Jackrabbit Extension Framework
-                    is its ability to load extension classes from the
-                    repository, an extension may be packaged complete
-                    with the descriptor, optional configuration and the
-                    Java classes and/or archives implementing the
-                    extensions. To be able to load the classes from the
-                    repository, the Jackrabbit Extension Framework uses
-                    instances of the <code>RepositoryClassLoader</code>
-                    provided by the <code>classloader</code> project.
-                </p>
-                <p>
-                    The extension manager creates a separate instance of
-                    the
-                    <code>RepositoryClassLoader</code>
-                    for each extension type accessed. The class path
-                    defined by an extension is added to that class
-                    loader before trying to load the class through that
-                    class loader. The class loader created by the
-                    extension manager is linked into the system class
-                    loader hierarchy by using the application provided
-                    class loader given to the constructor of the
-                    extension manager as its parent class loader.
-                </p>
-                <p>
-                    Please be aware of an issue raising from the fact
-                    that class may be loaded through a class loader
-                    which is a child of the application's class loader:
-                    While extensions have access to all the classes
-                    provided by the repository class loader as well as
-                    the application class loader and all its parents,
-                    the application has no access to the classes loaded
-                    through the repository class loader. This is easily
-                    fixed by having the extensions implement interfaces
-                    which are loaded through the application class
-                    loader and to which the extension instances loaded
-                    through the extension manager may be cast.
-                </p>
-            </subsection>
-
-            <subsection name="Instantiation">
-                <p>
-                    The extension declaration may also contain the
-                    (fully qualified) name of a class implementing the
-                    extension. If so, the Jackrabbit Extension Framework
-                    provides support functionality to load and
-                    instantiate the respective class using either of two
-                    constructors:
-                </p>
-                <ul>
-                    <li>
-                        If the class has a (public) constructor taking
-                        an object of type
-                        <code>
-                            org.apache.jackrabbit.extension.ExtensionDescriptor
-                        </code>
-                        this constructor is used to instanti-ate the
-                        extension instance.
-                    </li>
-                    <li>
-                        Otherwise if the class has a (public) default
-                        constructor this constructor is used to
-                        in-stantiated the extension interface.
-                    </li>
-                    <li>
-                        Otherwise the extension cannot be instantiated.
-                    </li>
-                </ul>
-                <p>
-                    If the extension cannot be instantiated through the
-                    constructor taking the
-                    <code>ExtensionDescriptor</code>
-                    the application is responsible to provide the
-                    relevant information to the extension instance if
-                    required.
-                </p>
-            </subsection>
-        </section>
-    </body>
-</document>
\ No newline at end of file
diff --git a/contrib/extension-framework/src/site/xdoc/configuration.xml b/contrib/extension-framework/src/site/xdoc/configuration.xml
deleted file mode 100644
index ca671a8..0000000
--- a/contrib/extension-framework/src/site/xdoc/configuration.xml
+++ /dev/null
@@ -1,162 +0,0 @@
-<?xml version="1.0"?>
-<document>
-    <properties>
-        <title>Jackrabbit Extension Framework - Configuration</title>
-    </properties>
-    <body>
-        <section name="Configuration">
-            <p>
-                The Jackrabbit Extension framework supports configuration of
-                the extensions by means of the
-                <a
-                    href="http://jakarta.apache.org/commons/configuration/">
-                    Apache Commons Configuration
-                </a>
-                project. As such, the class specified in the
-                <code>rep:configurationClass</code>
-                property of the extension descriptor must implement the
-                <code>Configuration</code>
-                interface. Generally, it will be an implementation of
-                the
-                <code>RepositoryConfiguration</code>
-                interface, which supports loading and saving of
-                configuration from and to the Jackrabbit repository. The Jackrabbit
-                Extension Framework provides three implementations of
-                the
-                <code>RepositoryConfiguration</code>
-                interface:
-                <code><a href="#ItemConfiguration">ItemConfiguration</a></code>,
-                <code><a href="#PropertiesNodeConfiguration">PropertiesNodeConfiguration</a></code>
-                and
-                <code><a href="#XMLNodeConfiguration">XMLNodeConfiguration</a></code>.
-            </p>
-            <p>
-                The default configuration class used if none is
-                configured in the extension node, is the
-                <code>ItemConfiguration</code>.
-            </p>
-            <p>
-                The configuration object is only created and loaded when
-                the
-                <code>getConfiguration()</code>
-                method of the extension descriptor is first called.
-            </p>
-
-            <subsection name="ItemConfiguration">
-                <p>
-                    The
-                    <code>
-                        <a
-                            href="apidocs/org/apache/jackrabbit/extension/configuration/ItemConfiguration.html">
-                            ItemConfiguration
-                        </a>
-                    </code>
-                    loads a subtree of the repository rooted at the
-                    <code>rep:configuration</code>
-                    child node of the extension node as a
-                    <code>
-                        <a
-                            href="http://jakarta.apache.org/commons/configuration/apidocs/org/apache/commons/configuration/HierarchicalConfiguration.html">
-                            HierarchicalConfiguration</a></code>. Each node
-                    in the subtree becomes a configuration
-                    node and each property becomes an attribute.
-                    Protected nodes and properties (such as
-                    <i>jcr:primaryType</i>) are ignored and neither read nor
-                    written (they cannot be written anyway).
-                </p>
-                <p>
-                    Generally the nodes making up the
-                    <code>ItemConfiguration</code>
-                    will be
-                    <code>nt:unstructured</code>
-                    node thus providing full flexibility for defining
-                    the configuration. When an instance of the
-                    <code>ItemConfiguration</code>
-                    class saves configuration data, this node type is
-                    used for newly created nodes.
-                </p>
-                <p>
-                    <b>Example</b>
-                </p>
-                <source><![CDATA[
-/extensions/sample
-     +-- ... extension descriptor omitted ...
-     +-- rep:configuration
-              +-- handler
-              |        +-- class = "some.Class"
-              |        +-- name = "the name"
-              |        +-- path = [ "/folder1", "/folder2" ]
-              +-- codes
-                       +-- boolean = true
-                       +-- double = 2.5D
-                       +-- long = 10L
-                       +-- string = "a string"
-                       +-- date = 2002-10-11Z19:28]]></source>
-                <p>
-                    The data structure shown above translates into a
-                    configuration data structure with the following
-                    contents. Note the
-                    <i><b>[@</b>name<b>]</b></i>
-                    notation which designates configuration attributes
-                    in contrast to configuration nodes.
-                </p>
-                <source><![CDATA[
-handler[@class] = "some.Class"
-handler[@name] = "the name"
-handler[@path](0) = "/folder1"
-handler[@path](1) = "/folder2"
-handler.codes[@boolean] = true
-handler.codes[@double] = 2.5D
-handler.codes[@long] = 10L
-handler.codes[@string] = "a string"
-handler.codes[@date] = 2002-10-11Z19:28]]></source>
-            </subsection>
-
-            <subsection name="PropertiesNodeConfiguration">
-                <p>
-                    The
-                    <code>
-                        <a
-                            href="apidocs/org/apache/jackrabbit/extension/configuration/PropertiesNodeConfiguration.html">
-                            PropertiesNodeConfiguration
-                        </a>
-                    </code>
-                    extends the
-                    <code>
-                        <a
-                            href="http://jakarta.apache.org/commons/configuration/apidocs/org/apache/commons/configuration/PropertiesConfiguration.html">
-                            PropertiesConfiguration
-                        </a>
-                    </code>
-                    class and supports loading and saving of properties
-                    files from and to the
-                    <code>rep:configuration</code>
-                    property of the extension node.
-                </p>
-            </subsection>
-
-            <subsection name="XMLNodeConfiguration">
-                <p>
-                    The
-                    <code>
-                        <a
-                            href="apidocs/org/apache/jackrabbit/extension/configuration/XMLNodeConfiguration.html">
-                            XMLNodeConfiguration
-                        </a>
-                    </code>
-                    extends the
-                    <code>
-                        <a
-                            href="http://jakarta.apache.org/commons/configuration/apidocs/org/apache/commons/configuration/XMLConfiguration.html">
-                            XMLConfiguration
-                        </a>
-                    </code>
-                    class and supports loading and saving of XML files
-                    from and to the
-                    <code>rep:configuration</code>
-                    property of the extension node.
-                </p>
-            </subsection>
-        </section>
-    </body>
-</document>
\ No newline at end of file
diff --git a/contrib/extension-framework/src/site/xdoc/examples.xml b/contrib/extension-framework/src/site/xdoc/examples.xml
deleted file mode 100644
index 9bcceaa..0000000
--- a/contrib/extension-framework/src/site/xdoc/examples.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0"?>
-<document>
-    <properties>
-        <title>Jackrabbit Extension Framework - Examples</title>
-    </properties>
-    <body>
-        <section name="Examples">
-            <p>Examples provided in this section:</p>
-            <dl>
-                <dt>
-                    <a href="examples/listing.html">
-                        Listing Extensions
-                    </a>
-                </dt>
-                <dd>Shows how to list extensions of a given type.</dd>
-                <dt>
-                    <a href="examples/instantiating.html">
-                        Creating Extension Instances
-                    </a>
-                </dt>
-                <dd>
-                    Shows how to instantiate extensions of a given type.
-                </dd>
-                <dt>
-                    <a href="examples/deployment.html">Deployment</a>
-                </dt>
-                <dd>
-                    Shows a way to deploy an extensions complete with
-                    its descriptor, the classes implementing the
-                    extension and required configuration.
-                </dd>
-            </dl>
-
-        </section>
-    </body>
-</document>
\ No newline at end of file
diff --git a/contrib/extension-framework/src/site/xdoc/examples/deployment.xml b/contrib/extension-framework/src/site/xdoc/examples/deployment.xml
deleted file mode 100644
index 9a6c8cf..0000000
--- a/contrib/extension-framework/src/site/xdoc/examples/deployment.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0"?>
-<document>
-    <properties>
-        <title>Jackrabbit Extension Framework - Deployment</title>
-    </properties>
-    <body>
-        <section name="Deployment">
-            <p>
-                This sample shows how an extension may be provided in
-                the repository for easy use by the Jackrabbit Extension
-                Framework.
-            </p>
-
-            <source><![CDATA[/extensions/sample            -- node of type nt:folder, rep:extension
-     +-- rep:id = "org.apache.jackrabbit.sample"
-     +-- rep:name = "Sample1"
-     +-- rep:class = "org.apache.jackrabbit.sample.Sample1"
-     +-- rep:classpath = [ /extension/sample/sample.jar ]
-     +-- sample.jar           -- node of type nt:file containing the JAR file
-     +-- rep:configuration    -- node of type nt:file containing the configuration
-              +-- jcr:content
-                       +-- jcr:data -- XML configuration file data]]></source>
-
-            <p>
-                When this extension is loaded, the
-                <code>sample.jar</code>
-                is added to the class loader of the
-                <i>org.apache.jackrabbit.sample</i>
-                extension type and the class
-                <code>org.apache.jackrabbit.sample.Sample1</code>
-                is loaded through that class loader. If the class
-                provides a public constructor taking an instance of
-                <code>ExtensionDescriptor</code>
-                the extension class may access the descriptor's node to
-                get at the configuration stored in the
-                <code>config</code>
-                child node. If the class provides a public setter method
-                for a field of type <code>ExtensionDescriptor</code>, that
-                method is called to set the descriptor.
-            </p>
-            <p>
-                This extension may easily be packaged, distributed and
-                deployed without requiring to hassle around with Jackrabbit
-                runtime configuration.
-            </p>
-
-        </section>
-    </body>
-</document>
\ No newline at end of file
diff --git a/contrib/extension-framework/src/site/xdoc/examples/instantiating.xml b/contrib/extension-framework/src/site/xdoc/examples/instantiating.xml
deleted file mode 100644
index def3edb..0000000
--- a/contrib/extension-framework/src/site/xdoc/examples/instantiating.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0"?>
-<document>
-    <properties>
-        <title>Jackrabbit Extension Framework - Creating Extension Instances</title>
-    </properties>
-    <body>
-        <section name="Creating Extension Instances">
-            <source><![CDATA[// get the session
-Session session = ....;
-
-// get the application class loader
-ClassLoader loader = Sample1.class.getClassLoader();
-
-// get the extension manager
-ExtensionManager mgr = new ExtensionManager(session, loader);
-
-// get iterator for extensions
-Iterator extensions = mgr.findExtensions("org.apache.jackrabbit.sample", null);
-while (extensions.hasNext()) {
-    ExtensionDescriptor desc = (ExtensionDescriptor) extensions.next();
-
-    Object extension = desc.getExtension();
-
-    // handle extension
-}
-
-// dispose of session
-session.logout();]]></source>
-        </section>
-    </body>
-</document>
\ No newline at end of file
diff --git a/contrib/extension-framework/src/site/xdoc/examples/listing.xml b/contrib/extension-framework/src/site/xdoc/examples/listing.xml
deleted file mode 100644
index f7449d8..0000000
--- a/contrib/extension-framework/src/site/xdoc/examples/listing.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0"?>
-<document>
-    <properties>
-        <title>Jackrabbit Extension Framework - Listing Extensions</title>
-    </properties>
-    <body>
-        <section name="Listing Extensions">
-            <source><![CDATA[// get the session
-Session session = ....;
-
-// get the application class loader
-ClassLoader loader = Sample1.class.getClassLoader();
-
-// get the extension manager
-ExtensionManager mgr = new ExtensionManager(session, loader);
-
-// get iterator for extensions
-Iterator extensions = mgr.findExtensions("org.apache.jackrabbit.sample", null);
-while (extensions.hasNext()) {
-    ExtensionDescriptor desc = (ExtensionDescriptor) extensions.next();
-
-    System.out.println("Extension: ");
-    System.out.println("   Type ID......: " + desc.getId());
-    System.out.println("   Name.........: " + desc.getName());
-
-    System.out.print  ("   Class........: ");
-    if (desc.getClassName() == null) {
-        System.out.println("-");
-    } else {
-        System.out.println(desc.getClassName());
-    }
-
-    System.out.print  ("   Class Path...: ");
-    if (desc.getClassPath() == null) {
-        System.out.println("-");
-    } else {
-        for (int i=0; i < desc.getClassPath().length; i++) {
-            System.out.print((i==0) ? '[' : ',');
-            System.out.print(desc.getClassPath()[i]);
-        }
-        System.out.println("]");
-    }
-}
-
-// dispose of session
-session.logout();]]></source>
-        </section>
-    </body>
-</document>
\ No newline at end of file
diff --git a/contrib/extension-framework/src/site/xdoc/index.xml b/contrib/extension-framework/src/site/xdoc/index.xml
deleted file mode 100644
index 7d70487..0000000
--- a/contrib/extension-framework/src/site/xdoc/index.xml
+++ /dev/null
@@ -1,111 +0,0 @@
-<?xml version="1.0"?>
-<document>
-    <properties>
-        <title>Jackrabbit Extension Framwork - Overview</title>
-    </properties>
-    <body>
-        <section name="Introduction">
-            <p>
-                Jackrabbit, the Apache Group's open source implementation
-                of the Content Repository for Java Technology API (JSR
-                170), will be the basis for a series of upcoming
-                products. Some are more integrated with Jackrabbit, like
-                the WebDAV server, some are plain applications of the Jakrabbit,
-                like for example a repository based content management system.
-            </p>
-
-            <p>All of these applications share similar requirements:</p>
-
-            <ul>
-                <li>Extensibility of some sort</li>
-                <li>Configuration requirements</li>
-            </ul>
-
-            <p>
-                To address these common problems and to provide an easy
-                to use framework to jump start on this extensibility
-                issue without requiring tedious configuration steps at
-                different locations, this document proposes the Jackrabbit
-                Extension Framework.
-            </p>
-
-            <p>
-                The core of the Jackrabbit Extension Framework is the
-                <code>
-                    <a
-                        href="apidocs/org/apache/jackrabbit/extension/ExtensionManager.html">
-                        org.apache.jackrabbit.extension.ExtensionManager
-                    </a>
-                </code>
-                which provides the API to load and instantiate
-                extensions for further use. The basic concepts of
-                extensions are as follows:
-            </p>
-
-            <ul>
-                <li>
-                    An extension is part of a group ofextensions sharing
-                    common functionality. Each such group is called an
-                    extension type and has a name. That name, commonly
-                    called the <i>extension type identification</i>, should
-                    be unique within a single application.
-                    There is no additional semantic bound to an
-                    extension type identification. In fact the
-                    uniqueness requirement is not enforced and it is the
-                    sole responsibility of the administrator and/or
-                    extension type implementor to make sure there are no
-                    two extension types with the same identification. A
-                    simple method to handle this issue is to apply the
-                    same naming conventions as proposed by Sun for
-                    <a
-                        href="http://java.sun.com/docs/codeconv/html/CodeConventions.doc8.html#367">
-                        package names
-                    </a>
-                    .
-                </li>
-                <li>
-                    Each extension has a unique name within the realm of
-                    its extension type. Again, this requirement is not
-                    enforced and it is the administrator's or
-                    implementor's responsibility to guarantee this
-                    uniqueness requirement.
-                </li>
-                <li>
-                    An extension may be implemented by some Java code,
-                    which should be loaded into the system for use. That
-                    is, an extension has an associated class and
-                    optionally a class path to indicated where to load
-                    the Java classes from. To simplify deployment of
-                    extensions the classes (or JAR archives) containing
-                    the extension implementation together with optional
-                    required libraries may be stored in the repository.
-                </li>
-                <li>
-                    Often times extensions need to be provided with some
-                    sort of configuration, which of course would also be
-                    stored in the repository.
-                </li>
-            </ul>
-
-            <p>
-                As a consequence of the above noted uniques requirements
-                for extension type identifications and extension names,
-                two instances of the
-                <code>
-                    <a
-                        href="apidocs/org/apache/jackrabbit/extension/ExtensionDescriptor.html">
-                        ExtensionDescriptor
-                    </a>
-                </code>
-                class are considered equal if the have the same type
-                identification and name.
-            </p>
-
-            <p>
-                See
-                <a href="examples/deployment.html">Deployment</a>
-                for a sample extension stored in the repository.
-            </p>
-        </section>
-    </body>
-</document>
\ No newline at end of file
diff --git a/contrib/extension-framework/src/site/xdoc/misc.xml b/contrib/extension-framework/src/site/xdoc/misc.xml
deleted file mode 100644
index df4a45b..0000000
--- a/contrib/extension-framework/src/site/xdoc/misc.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0"?>
-<document>
-    <properties>
-        <title>Jackrabbit Extension Framework - Loose Ends</title>
-    </properties>
-    <body>
-        <section name="Dependencies">
-            <p>
-                The Jackrabbit Extension Framework itself has no provision of
-                defining dependencies amongst extensions of a certain
-                type. This has to be implemented in the application of
-                the extension framework.
-            </p>
-            <p>
-                Some examples of how this might be accomplished follow.
-            </p>
-            <subsection name="Priorities">
-                <p>
-                    If the extensions define sort of a operations chain,
-                    a priority may be specified which defines the order
-                    in which the operations are executed. The priority
-                    may be stored in the extension node as an additional
-                    property, which is read by the extension
-                    constructor.
-                </p>
-            </subsection>
-            <subsection name="Dependencies">
-                <p>
-                    If the extensions define services provided which may
-                    have dependencies amongst each other, the respective
-                    dependencies may be stored in an additional property
-                    in the descriptor node, which is read by the
-                    extension constructor. Before actually activating
-                    the services, the dependencies may be handled by the
-                    application to define an activation order.
-                </p>
-            </subsection>
-        </section>
-    </body>
-</document>
\ No newline at end of file
diff --git a/contrib/extension-framework/src/site/xdoc/navigation.xml b/contrib/extension-framework/src/site/xdoc/navigation.xml
deleted file mode 100644
index a0115ee..0000000
--- a/contrib/extension-framework/src/site/xdoc/navigation.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<project>
- <title>Jackrabbit Extension Framework</title>
- <body>
-  <menu name="Jackrabbit Extension Framework">
-    <item name="Overview" href="/index.html">
-      <item name="Extension Node Type" href="/nodetype.html" />
-      <item name="Extension Classes" href="/classes.html" />
-      <item name="Configuration" href="/configuration.html" />
-      <item name="Loose Ends" href="/misc.html" />
-    </item>
-    <item name="Examples" href="/examples.html">
-      <item name="Listing Extensions" href="/examples/listing.html" />
-      <item name="Creating Extension Instances" href="/examples/instantiating.html" />
-      <item name="Deployment" href="/examples/deployment.html" />
-    </item>
-  </menu>
- </body>
-</project>
diff --git a/contrib/extension-framework/src/site/xdoc/nodetype.xml b/contrib/extension-framework/src/site/xdoc/nodetype.xml
deleted file mode 100644
index f214888..0000000
--- a/contrib/extension-framework/src/site/xdoc/nodetype.xml
+++ /dev/null
@@ -1,117 +0,0 @@
-<?xml version="1.0"?>
-<document>
-    <properties>
-        <title>Jackrabbit Extension Framwork - Node Types</title>
-    </properties>
-    <body>
-        <section name="Node Type Definition">
-            <p>
-                A Jackrabbit extension is represented as a node in the
-                repository at an application defined location with mixin
-                node type
-                <code>rep:extension</code>
-                which is defined in compact node type definition format
-                as follows:
-            </p>
-
-            <source><![CDATA[[rep:extension] mixin
-  - rep:name (string) mandatory copy
-  - rep:id (string) mandatory copy
-  - rep:class (string) copy
-  - rep:classpath (path) multiple copy
-  - rep:configurationClass (string) copy
-  + rep:configuration (nt:base) = nt:unstructured multiple copy]]></source>
-
-            <p>
-                The
-                <code>rep:extension</code>
-                type is a mixin node type and as such any node may be
-                designated as the declaring node of an extension. The
-                advantage of this is that the extension declaring node
-                may at the same time be the root node of the extension
-                configuration also read from the repository.
-            </p>
-            <p>
-                The
-                <code>rep:id</code>
-                property contains the name of the extension type
-                provided by this extension. It is recommended that
-                extension type names follow the same pattern of reversed
-                domain name prefixes as is specified for Java packages.
-            </p>
-            <p>
-                The
-                <code>rep:name</code>
-                property contains the name of the extension itself. This
-                name identifies the concrete definitions amongst the set
-                of extensions defined with the same extension type. The
-                name of the extension must be unique amongst all
-                extensions of the same type.
-            </p>
-            <p>
-                The
-                <code>rep:class</code>
-                property contains the fully qualified name of the class
-                implementing this extensions. If this property is not
-                empty, the Jackrabbit Extension Framework is able to provide
-                instantiation support for that class. Refer to the
-                section
-                <a href="classes.html">Extension Classes</a>
-                for explanations of class loading support in the Jackrabbit
-                Extension Framework.
-            </p>
-            <p>
-                The multivalued
-                <code>rep:classpath</code>
-                property contains a list of absolute repository path
-                names denoting the classpath used to load the extension.
-            </p>
-            <p>
-                The
-                <code>rep:configurationClass</code>
-                property contains the fully qualified name of the class,
-                which is used to provide configuration to the extension.
-                The class must implement the
-                <code>
-                    <a
-                        href="http://jakarta.apache.org/commons/configuration/apidocs/org/apache/commons/configuration/Configuration.html">
-                        org.apache.commons.configuration.Configuration
-                    </a>
-                </code>
-                interface. If missing the configuration is loaded
-                through an
-                <code>
-                    <a
-                        href="apidocs/org/apache/jackrabbit/extension/configuration/ItemConfiguration.html">
-                        ItemConfiguration
-                    </a>
-                </code>
-                instance. Refer to the section
-                <a href="configuration.html">Configuration</a>
-                for more information on configuration support of the Jackrabbit
-                Extension Framework.
-            </p>
-            <p>
-                The <code>rep:configuration</code> child node contains the
-                extensions configuration. The
-                <a href="apidocs/org/apache/jackrabbit/extension/ExtensionDescriptor.html#getConfigurationNode()">ExtensionDescriptor.getConfigurationNode</a>
-                method returns this node and the
-                <a href="apidocs/org/apache/jackrabbit/extension/ExtensionDescriptor.html#getConfiguration()">ExtensionDescriptor.getConfiguration</a>
-                method will load the configuration from this node. This node
-                may be of any type. For example it may be a <code>nt:file</code>
-                node whose <code>jcr:content/jcr:data</code> property contains
-                the XML configuration file.
-            </p>
-            <p>
-                The
-                <code>ExtensionManager</code>
-                class loads extensions defined with this node type
-                through its
-                <code>findExtensions</code>
-                method loading the content into instances of the
-                <code>ExtensionDescriptor</code>
-                class for ease of access.
-            </p>
-        </section>
-    </body>
-</document>
\ No newline at end of file
diff --git a/contrib/extension-framework/src/test/java/org/apache/jackrabbit/extension/ExtensionFindTest.java b/contrib/extension-framework/src/test/java/org/apache/jackrabbit/extension/ExtensionFindTest.java
deleted file mode 100644
index 643cce8..0000000
--- a/contrib/extension-framework/src/test/java/org/apache/jackrabbit/extension/ExtensionFindTest.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.extension;
-
-import java.util.Iterator;
-
-import org.apache.commons.configuration.Configuration;
-
-public class ExtensionFindTest extends ExtensionFrameworkTestBase {
-
-    protected ExtensionManager em;
-
-    protected void setUp() throws Exception {
-        super.setUp();
-        ExtensionManager.checkNodeType(session);
-        fillTestData(session);
-        em = new ExtensionManager(session, getClass().getClassLoader());
-    }
-
-    protected void tearDown() throws Exception {
-        em = null;
-        removeTestData(session);
-        super.tearDown();
-    }
-
-    public void testFindings() throws ExtensionException {
-
-        Iterator ei = em.getExtensions(ID1, ROOT_NODE);
-        while (ei.hasNext()) {
-            ExtensionDescriptor ed = (ExtensionDescriptor) ei.next();
-            System.out.println("Extension " + ed.getId() + "/" + ed.getName() + " (" + ed.getNodePath() +")");
-
-            if (ed.getClassName() != null) {
-                Object ext = ed.getExtension();
-                System.out.println("   Class       : " + ed.getClassName());
-                System.out.println("   ClassLoader : " + ext.getClass().getClassLoader());
-                System.out.println("   Extension   : " + ext);
-            }
-
-            Configuration config = ed.getConfiguration();
-            System.out.println("   Configuration Class : " + config.getClass().getName());
-            System.out.println("   Configuration       : " + config);
-            for (Iterator ki=config.getKeys(); ki.hasNext(); ) {
-                String key = (String) ki.next();
-                Object prop = config.getProperty(key);
-                System.out.println("     " + key + " ==> " + prop);
-            }
-        }
-    }
-
-    public void testFindNonExisting() {
-        try {
-            em.getExtension(ID1, "google", ROOT_NODE);
-        } catch (ExtensionException ee) {
-            assertTrue("Wrong exception " + ee + " thrown",
-                ee.getMessage() != null &&
-                    ee.getMessage().indexOf("not found") > 0);
-        }
-    }
-
-    public void testFindExisting() throws ExtensionException {
-        em.getExtension(ID1, "delivery.core", ROOT_NODE);
-    }
-
-    public void testFindMultipleExisting() {
-        try {
-            em.getExtension(ID1, "delivery.gfx", ROOT_NODE);
-        } catch (ExtensionException ee) {
-            assertTrue("Wrong exception " + ee + " thrown",
-                ee.getMessage() != null &&
-                    ee.getMessage().indexOf("ore than one extension") > 0);
-        }
-    }
-}
diff --git a/contrib/extension-framework/src/test/java/org/apache/jackrabbit/extension/ExtensionFrameworkTestBase.java b/contrib/extension-framework/src/test/java/org/apache/jackrabbit/extension/ExtensionFrameworkTestBase.java
deleted file mode 100644
index 98468db..0000000
--- a/contrib/extension-framework/src/test/java/org/apache/jackrabbit/extension/ExtensionFrameworkTestBase.java
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.extension;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.HashSet;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.Set;
-import java.util.StringTokenizer;
-
-import javax.jcr.Credentials;
-import javax.jcr.Node;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.SimpleCredentials;
-import javax.jcr.Value;
-import javax.jcr.ValueFactory;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-
-import junit.framework.TestCase;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.core.RepositoryImpl;
-import org.apache.jackrabbit.core.config.RepositoryConfig;
-import org.apache.jackrabbit.core.jndi.provider.DummyInitialContextFactory;
-
-/**
- * The <code>ExtensionFrameworkTestBase</code> TODO
- *
- * @author Felix Meschberger
- * @version $Rev:$, $Date$
- */
-public class ExtensionFrameworkTestBase extends TestCase {
-
-    /** Logger for test cases */
-    protected static final Log log =
-        LogFactory.getLog("org.apache.jackrabbit.extension.test");
-
-    protected static final String WORKSPACE = "default";
-    protected static final String USER = "admin";
-
-    protected static final String PROVIDER_URL = "ClassLoader";
-    protected static final String REPOSITORY_NAME = "ClassLoaderRepository";
-
-    protected static final String ROOT_NODE = "/services";
-    protected static final String ID1 = "org.apache.jackrabbit.app.services";
-    protected static final String ID2 = "org.apache.jackrabbit.test";
-
-    protected RepositoryImpl repository;
-    protected Session session;
-
-    public ExtensionFrameworkTestBase() {
-        super();
-    }
-
-    public ExtensionFrameworkTestBase(String name) {
-        super(name);
-    }
-
-    protected void setUp() throws Exception {
-        super.setUp();
-
-        if (!"repositoryStart".equals(getName())) {
-            Context ctx = getInitialContext();
-            repository = (RepositoryImpl) ctx.lookup(REPOSITORY_NAME);
-
-            Credentials creds = new SimpleCredentials(USER, USER.toCharArray());
-            session = repository.login(creds, WORKSPACE);
-        }
-    }
-
-    public void repositoryStart() throws Exception {
-        InputStream config = getClass().getResourceAsStream("/repository.xml");
-        String home = new File("cltest").getAbsolutePath();
-        RepositoryConfig rc = RepositoryConfig.create(config, home);
-        RepositoryImpl repository = RepositoryImpl.create(rc);
-
-        try {
-            Context ctx = getInitialContext();
-            ctx.bind(REPOSITORY_NAME, repository);
-        } catch (NamingException ne) {
-            repository.shutdown();
-            throw ne;
-        }
-    }
-
-    public void repositoryStop() throws Exception {
-        // this is special, logout here and clean repository
-        disconnect();
-        if (repository != null) {
-            repository.shutdown();
-            repository = null;
-        }
-
-        Context ctx = getInitialContext();
-        ctx.unbind(REPOSITORY_NAME);
-    }
-
-    protected void tearDown() throws Exception {
-        disconnect();
-        repository = null;
-        super.tearDown();
-    }
-
-    private Context getInitialContext() throws NamingException {
-        Hashtable env = new Hashtable();
-        env.put(Context.INITIAL_CONTEXT_FACTORY,
-            DummyInitialContextFactory.class.getName());
-        env.put(Context.PROVIDER_URL, PROVIDER_URL);
-
-        return new InitialContext(env);
-    }
-
-    private void disconnect() {
-        if (session != null) {
-            try {
-                removeTestData(session);
-            } catch (RepositoryException re) {
-                // ignore
-            }
-            session.logout();
-            session = null;
-        }
-    }
-
-    //---------- RepositoryLoader ----------------------------------------------
-
-    protected void fillTestData(Session session) throws RepositoryException {
-        try {
-            session.getItem(ROOT_NODE).remove();
-            session.save();
-        } catch (PathNotFoundException ignore) {
-            // ok, if root no extisting
-        }
-
-        // make sure the root is available
-        ensurePath(session, ROOT_NODE);
-
-        fillExtension(session, ROOT_NODE+"/delivery/core", ID1, "delivery.core", null, null, null);
-        fillExtension(session, ROOT_NODE+"/delivery/cache", ID1, "delivery.cache", null, null, null);
-        fillExtension(session, ROOT_NODE+"/delivery/link", ID1, "delivery.link", null, null, null);
-        fillExtension(session, ROOT_NODE+"/delivery/script", ID1, "delivery.script", null, null, null);
-        fillExtension(session, ROOT_NODE+"/delivery/gfx", ID1, "delivery.gfx", null, null, null);
-
-        fillExtension(session, ROOT_NODE+"/development/jsp", ID1, "development.jsp", null, null,
-            "org.apache.jackrabbit.extension.configuration.ItemConfiguration");
-        fillExtension(session, ROOT_NODE+"/development/ecma", ID1, "development.ecma", null, null, null);
-
-        String devCore = ROOT_NODE + "/development/core";
-        fillExtension(session, devCore, ID1, "development.core",
-            "org.apache.jackrabbit.extension.DevCoreTest", devCore+"/classes", null);
-        putClass(session, devCore, "DevCoreTest.class");
-
-        // duplicate extension - ok for iterator, not ok for explicit finding
-        fillExtension(session, ROOT_NODE+"/delivery/gfx2", ID1, "delivery.gfx", null, null, null);
-    }
-
-    protected static void removeTestData(Session session) throws RepositoryException {
-        session.getItem(ROOT_NODE).remove();
-        session.save();
-    }
-
-    private static void fillExtension(Session session, String path, String id,
-            String name, String clazz, String classPath, String configClass)
-            throws RepositoryException {
-
-        // get the extension's node
-        Node extNode = ensurePath(session, path);
-
-        // mark as an extension
-        extNode.addMixin(ExtensionManager.NODE_EXTENSION_TYPE);
-
-        // fill rest
-        trySetProperty(extNode, ExtensionDescriptor.PROP_REP_NAME, name, false);
-        trySetProperty(extNode, ExtensionDescriptor.PROP_REP_ID, id, false);
-        trySetProperty(extNode, ExtensionDescriptor.PROP_REP_CLASS, clazz, false);
-        trySetProperty(extNode, ExtensionDescriptor.PROP_REP_CLASSPATH, classPath, true);
-        trySetProperty(extNode, ExtensionDescriptor.PROP_REP_CONFIGURATION_CLASS, configClass, false);
-
-        // save the node
-        extNode.save();
-    }
-
-    protected static Node ensurePath(Session session, String path) throws RepositoryException {
-        StringTokenizer tokener = new StringTokenizer(path, "/");
-        Node node = session.getRootNode();
-        while (tokener.hasMoreTokens()) {
-            String label = tokener.nextToken();
-
-            if (node.hasNode(label)) {
-                node = node.getNode(label);
-            } else {
-                node = node.addNode(label, "nt:unstructured");
-            }
-        }
-
-        // save all modifications
-        session.save();
-
-        return node;
-    }
-
-    protected static void trySetProperty(Node extNode, String prop, String value,
-            boolean multiple) throws RepositoryException {
-
-        // nothing if no value
-        if (value == null || value.length() == 0) {
-            return;
-        }
-
-        // single value
-        if (!multiple) {
-            extNode.setProperty(prop, value);
-            return;
-        }
-
-        // split multivalue on ","
-        List valueList = new ArrayList();
-        StringTokenizer tokener = new StringTokenizer(value, ",");
-        while (tokener.hasMoreTokens()) {
-            valueList.add(tokener.nextToken());
-        }
-
-        // create value objects
-        ValueFactory vf = extNode.getSession().getValueFactory();
-        Value[] values = new Value[valueList.size()];
-        for (int i=0; i < values.length; i++) {
-            values[i] = vf.createValue((String) valueList.get(i));
-        }
-
-        // set the property
-        extNode.setProperty(prop, values);
-    }
-
-    private void putClass(Session session, String extLoc, String cls) throws RepositoryException {
-        String name = getClass().getName();
-        int lastDot = name.lastIndexOf('.');
-        if (lastDot > 0) name = name.substring(0, lastDot);
-        extLoc += "/classes/" + name.replace('.', '/');
-//        extLoc += "/classes/" +
-//              base.getPackage().getName().replace('.', '/');
-
-        Node pNode = ensurePath(session, extLoc);
-        Node file = pNode.addNode(cls, "nt:file");
-        Node content = file.addNode("jcr:content", "nt:resource");
-        content.setProperty("jcr:mimeType", "application/octet-stream");
-        content.setProperty("jcr:lastModified", Calendar.getInstance());
-
-        InputStream ins = getClass().getResourceAsStream("/"+cls+".bin");
-        if (ins != null) {
-            try {
-                content.setProperty("jcr:data", ins);
-            } finally {
-                try {
-                    ins.close();
-                } catch (IOException ignore) {}
-            }
-        }
-
-        pNode.save();
-    }
-}
diff --git a/contrib/extension-framework/src/test/java/org/apache/jackrabbit/extension/ExtensionNodeTypeTest.java b/contrib/extension-framework/src/test/java/org/apache/jackrabbit/extension/ExtensionNodeTypeTest.java
deleted file mode 100644
index ff5fc8c..0000000
--- a/contrib/extension-framework/src/test/java/org/apache/jackrabbit/extension/ExtensionNodeTypeTest.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.extension;
-
-import javax.jcr.RepositoryException;
-import javax.jcr.nodetype.NodeTypeManager;
-
-/**
- * The <code>ExtensionNodeTypeTest</code> TODO
- *
- * @author Felix Meschberger
- * @version $Rev:$, $Date$
- */
-public class ExtensionNodeTypeTest extends ExtensionFrameworkTestBase {
-
-    public void testNodeType() throws ExtensionException, RepositoryException {
-        NodeTypeManager ntm= session.getWorkspace().getNodeTypeManager();
-
-        // check whether the node type is available
-        ExtensionManager.checkNodeType(session);
-
-        ntm.getNodeType(ExtensionManager.NODE_EXTENSION_TYPE);
-    }
-}
diff --git a/contrib/extension-framework/src/test/java/org/apache/jackrabbit/extension/TestAll.java b/contrib/extension-framework/src/test/java/org/apache/jackrabbit/extension/TestAll.java
deleted file mode 100644
index 4a1fb4c..0000000
--- a/contrib/extension-framework/src/test/java/org/apache/jackrabbit/extension/TestAll.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.extension;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.apache.jackrabbit.extension.configuration.ItemConfigurationTest;
-
-public class TestAll {
-
-    /**
-     * Returns a <code>Test</code> suite that executes all tests inside this
-     * package.
-     *
-     * @return a <code>Test</code> suite that executes all tests inside this
-     *         package.
-     */
-    public static Test suite() {
-        TestSuite suite = new TestSuite("Extension Tests");
-
-        suite.addTest(new ExtensionFrameworkTestBase("repositoryStart"));
-        suite.addTestSuite(ExtensionNodeTypeTest.class);
-        suite.addTestSuite(ExtensionFindTest.class);
-        suite.addTestSuite(ItemConfigurationTest.class);
-        suite.addTest(new ExtensionFrameworkTestBase("repositoryStop"));
-
-        return suite;
-    }
-}
diff --git a/contrib/extension-framework/src/test/java/org/apache/jackrabbit/extension/configuration/ItemConfigurationTest.java b/contrib/extension-framework/src/test/java/org/apache/jackrabbit/extension/configuration/ItemConfigurationTest.java
deleted file mode 100644
index 6662051..0000000
--- a/contrib/extension-framework/src/test/java/org/apache/jackrabbit/extension/configuration/ItemConfigurationTest.java
+++ /dev/null
@@ -1,260 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.extension.configuration;
-
-import java.util.Calendar;
-import java.util.Iterator;
-import java.util.Set;
-import java.util.TreeSet;
-
-import javax.jcr.Item;
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-import javax.jcr.Value;
-import javax.jcr.ValueFactory;
-
-import org.apache.commons.configuration.Configuration;
-import org.apache.commons.configuration.ConfigurationComparator;
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.configuration.HierarchicalConfiguration;
-import org.apache.commons.configuration.StrictConfigurationComparator;
-import org.apache.jackrabbit.extension.ExtensionFrameworkTestBase;
-
-
-public class ItemConfigurationTest extends ExtensionFrameworkTestBase {
-
-    private static final String ROOT_PATH = "/config/test";
-    private static final String CFG1 = ROOT_PATH + "/config1";
-    private static final String CFG2 = ROOT_PATH + "/config2";
-//    private static final String CFG3 = ROOT_PATH + "/config3";
-
-    protected void setUp() throws Exception {
-        super.setUp();
-
-        ensurePath(session, ROOT_PATH);
-    }
-
-    protected void tearDown() throws Exception {
-        try {
-            Item item = session.getItem(ROOT_PATH);
-            javax.jcr.Node parent = item.getParent();
-            item.remove();
-            parent.save();
-        } catch (RepositoryException re) {
-            // don't care
-        }
-
-        super.tearDown();
-    }
-
-    public void testCreateAndLoad() throws RepositoryException, ConfigurationException {
-        // this is the manually created
-        Configuration created = createSampleConfig();
-//        dumpConfiguration(created);
-
-        // get the loaded
-        javax.jcr.Node cfgNode = createSampleConfig(CFG1);
-        Configuration loaded = new ItemConfiguration(cfgNode);
-//        dumpConfiguration(loaded);
-
-        // compare configurations
-        ConfigurationComparator comparator = new StrictConfigurationComparator();
-        assertTrue("Configurations differ", comparator.compare(created, loaded));
-    }
-
-    public void testLoadSave() throws RepositoryException, ConfigurationException {
-        // load configuration
-        javax.jcr.Node cfgNode = createSampleConfig(CFG1);
-        ItemConfiguration loaded = new ItemConfiguration(cfgNode);
-//        dumpConfiguration(loaded);
-
-        // store somewhere else
-        Node dest = ensurePath(session, CFG2);
-        loaded.save(dest);
-
-        ItemConfiguration second = new ItemConfiguration(dest);
-//        dumpConfiguration(second);
-
-        // compare configurations
-        ConfigurationComparator comparator = new StrictConfigurationComparator();
-        assertTrue("Configurations differ", comparator.compare(loaded, second));
-    }
-
-    public void testLoadAdditions() throws RepositoryException, ConfigurationException {
-        // load configuration
-        javax.jcr.Node cfgNode = createSampleConfig(CFG1);
-        ItemConfiguration loaded = new ItemConfiguration(cfgNode);
-
-        // add to the configuration
-        loaded.addProperty("added.value[@data]", "Added data");
-        loaded.addProperty("typed.added", "Added to typed");
-        loaded.addProperty("typed[@string]", "Another string");
-
-//        dumpConfiguration("Loaded", loaded);
-
-        // save to the configuration
-        loaded.save();
-
-        // load the same configuration into a new object
-        ItemConfiguration second = new ItemConfiguration(cfgNode);
-//        dumpConfiguration("Second", second);
-
-        // compare configurations
-        ConfigurationComparator comparator = new StrictConfigurationComparator();
-        assertTrue("Configurations differ", comparator.compare(loaded, second));
-    }
-
-    public void testLoadDeletions() throws RepositoryException, ConfigurationException {
-        // load configuration
-        javax.jcr.Node cfgNode = createSampleConfig(CFG1);
-        ItemConfiguration loaded = new ItemConfiguration(cfgNode);
-
-//        dumpConfiguration("Loaded - unmodified", loaded);
-
-        // add to the configuration
-        loaded.clearProperty("typed[@string]");
-        loaded.clearProperty("multivalue[@multi](0)");
-        loaded.clearProperty("sns.same(1)");
-
-//        dumpConfiguration("Loaded - modified", loaded);
-
-        // save to the configuration
-        loaded.save();
-
-        // load the same configuration into a new object
-        ItemConfiguration second = new ItemConfiguration(cfgNode);
-//        dumpConfiguration("Second", second);
-
-        // compare configurations
-        ConfigurationComparator comparator = new StrictConfigurationComparator();
-        assertTrue("Configurations differ", comparator.compare(loaded, second));
-    }
-
-    public void testLoadDeletionsNotSaved() throws RepositoryException, ConfigurationException {
-        // load configuration
-        javax.jcr.Node cfgNode = createSampleConfig(CFG1);
-        ItemConfiguration loaded = new ItemConfiguration(cfgNode);
-
-//        dumpConfiguration("Loaded - unmodified", loaded);
-
-        ItemConfiguration unmodified = new ItemConfiguration(cfgNode);
-//        dumpConfiguration("Unmodified", unmodified);
-
-        // add to the configuration
-        loaded.clearProperty("typed[@string]");
-        loaded.clearProperty("multivalue[@multi](0)");
-        loaded.clearProperty("sns.same(1)");
-
-//        dumpConfiguration("Loaded - modified", loaded);
-
-        // load the same configuration into a new object
-        ItemConfiguration second = new ItemConfiguration(cfgNode);
-//        dumpConfiguration("Second", second);
-
-        // compare configurations
-        ConfigurationComparator comparator = new StrictConfigurationComparator();
-
-        // loaded (modified) and second must be different
-        assertFalse("Configurations are the same", comparator.compare(loaded, second));
-
-        // unmodified and second must bethe same
-        assertTrue("Configurations differ", comparator.compare(unmodified, second));
-    }
-
-    protected HierarchicalConfiguration createSampleConfig() {
-        HierarchicalConfiguration config = new HierarchicalConfiguration();
-
-        Calendar cal = Calendar.getInstance();
-        cal.setTimeInMillis(0);
-
-        config.addProperty("typed[@string]", "value1");
-        config.addProperty("typed[@boolean]", Boolean.TRUE);
-        config.addProperty("typed[@double]", new Double(2.5D));
-        config.addProperty("typed[@long]", new Long(10L));
-        config.addProperty("typed[@date]", cal);
-
-        for (int i=0; i < 5; i++) {
-            config.addProperty("multivalue[@multi]", "multi[" + i+ "]");
-        }
-
-        for (int i=0; i < 3; i++) {
-            config.addProperty("sns.same", "sample" + i);
-        }
-
-        config.addProperty("nodeValue", "This is the node's value");
-
-        return config;
-    }
-
-    protected javax.jcr.Node createSampleConfig(String cfgRoot) throws RepositoryException {
-        javax.jcr.Node cfg = ensurePath(session, cfgRoot + "/rep:configuration");
-
-        Calendar cal = Calendar.getInstance();
-        cal.setTimeInMillis(0);
-
-        // child node with typed properties
-        javax.jcr.Node child = cfg.addNode("typed");
-        child.setProperty("string", "value1");
-        child.setProperty("boolean", true);
-        child.setProperty("double", 2.5D);
-        child.setProperty("long", 10L);
-        child.setProperty("date", cal);
-
-        // child node with multivalue property
-        ValueFactory vf = session.getValueFactory();
-        Value[] multi = new Value[5];
-        for (int i=0; i < multi.length; i++) {
-            multi[i] = vf.createValue("multi[" + i + "]");
-        }
-        child = cfg.addNode("multivalue");
-        child.setProperty("multi", multi);
-
-        // same name sibbling children
-        child = cfg.addNode("sns");
-        child.addNode("same").setProperty("__DEFAULT__", "sample0");
-        child.addNode("same").setProperty("__DEFAULT__", "sample1");
-        child.addNode("same").setProperty("__DEFAULT__", "sample2");
-
-        // __DEFAULT__ value nodes
-        child = cfg.addNode("nodeValue");
-        child.setProperty("__DEFAULT__", "This is the node's value");
-
-        // save everything !!
-        cfg.save();
-
-        return cfg; // .getParent();
-    }
-
-//    private void dumpConfiguration(String title, Configuration config) {
-//        System.out.println();
-//        System.out.println(title);
-//        for (int i=0; i < title.length(); i++) {
-//            System.out.print('-');
-//        }
-//        System.out.println();
-//
-//        Set keys = new TreeSet();
-//        for (Iterator ki=config.getKeys(); ki.hasNext(); ) {
-//            keys.add(ki.next());
-//        }
-//
-//        for (Iterator ki=keys.iterator(); ki.hasNext(); ) {
-//            String key = (String) ki.next();
-//            System.out.println(key + " ==> " + config.getProperty(key));
-//        }
-//    }
-}
diff --git a/contrib/extension-framework/src/test/resources/DevCoreTest.class.bin b/contrib/extension-framework/src/test/resources/DevCoreTest.class.bin
deleted file mode 100644
index c5f272c..0000000
--- a/contrib/extension-framework/src/test/resources/DevCoreTest.class.bin
+++ /dev/null
Binary files differ
diff --git a/contrib/extension-framework/src/test/resources/log4j.properties b/contrib/extension-framework/src/test/resources/log4j.properties
deleted file mode 100644
index 737a61a..0000000
--- a/contrib/extension-framework/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-# Set root logger level to DEBUG and its only appender to A1.
-log4j.rootLogger=INFO, file
-#log4j.rootLogger=DEBUG, stdout, file
-#log4j.rootLogger=ERROR, stdout, file
-
-log4j.logger.org.apache.jackrabbit.extension.test=DEBUG
-
-# 'stdout' is set to be a ConsoleAppender.
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-
-# 'stdout' uses PatternLayout
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%d{dd.MM.yyyy HH:mm:ss} *%-5p* [%t] %c{1}: %m (%F, line %L)\n
-
-# 'file' is set to be a FileAppender.
-log4j.appender.file=org.apache.log4j.FileAppender
-log4j.appender.file.File=jcr.log
-# log4j.appender.file.Append=false
-
-# 'file' uses PatternLayout.
-log4j.appender.file.layout=org.apache.log4j.PatternLayout
-log4j.appender.file.layout.ConversionPattern=%d{dd.MM.yyyy HH:mm:ss} *%-5p* [%t] %c{1}: %m (%F, line %L)\n
diff --git a/contrib/extension-framework/src/test/resources/repository.xml b/contrib/extension-framework/src/test/resources/repository.xml
deleted file mode 100644
index 290bc6d..0000000
--- a/contrib/extension-framework/src/test/resources/repository.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<Repository>
-    <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
-        <param name="path" value="${rep.home}/repository"/>
-    </FileSystem>
-
-    <Security appName="Jackrabbit">
-        <AccessManager class="org.apache.jackrabbit.core.security.SimpleAccessManager" />
-        <LoginModule class="org.apache.jackrabbit.core.security.SimpleLoginModule">
-           <param name="anonymousId" value="anonymous"/>
-        </LoginModule>
-    </Security>
-
-    <Workspaces rootPath="${rep.home}/workspaces" defaultWorkspace="default"/>
-    <Workspace name="${wsp.name}">
-        <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
-            <param name="path" value="${wsp.home}"/>
-        </FileSystem>
-        <PersistenceManager class="org.apache.jackrabbit.core.state.obj.ObjectPersistenceManager"/>
-        <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
-            <param name="path" value="${wsp.home}/index"/>
-        </SearchIndex>
-    </Workspace>
-
-    <Versioning rootPath="${rep.home}/version">
-        <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
-            <param name="path" value="${rep.home}/version"/>
-        </FileSystem>
-        <PersistenceManager class="org.apache.jackrabbit.core.state.obj.ObjectPersistenceManager"/>
-    </Versioning>
-
-    <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
-        <param name="path" value="${rep.home}/repository/index"/>
-    </SearchIndex>
-</Repository>
diff --git a/contrib/jca/HEADER.txt b/contrib/jca/HEADER.txt
deleted file mode 100644
index 1c669de..0000000
--- a/contrib/jca/HEADER.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
\ No newline at end of file
diff --git a/contrib/jca/LICENSE.txt b/contrib/jca/LICENSE.txt
deleted file mode 100644
index d645695..0000000
--- a/contrib/jca/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/contrib/jca/README.txt b/contrib/jca/README.txt
deleted file mode 100644
index 9c1ca41..0000000
--- a/contrib/jca/README.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-=======================================================================
-Jackrabbit JCA 1.0 Resource Adapter
-=======================================================================
-
-Overview
---------
-
-This package includes a JCA resource adapter for Jackrabbit. It's
-following the JCA 1.0 specification and can be deployed on a wide
-range of application servers. 
-
-Jackrabbit is embedded into the JCA package and is started when
-first accessed by the client. If re-deployed, the old repository
-configuration will shutdown to minimize alot of opened inactive
-repository instances.
-
-
-Building
---------
-
-To build the resource archive (RAR), use the rar:rar goal in
-maven.
-
-  maven rar:rar
-  
-
-Deployment
-----------
-
-Example deployment configurations are located under ./deploy
-directory. 
-
diff --git a/contrib/jca/applications/test/jaas.config b/contrib/jca/applications/test/jaas.config
deleted file mode 100644
index 1fc3c36..0000000
--- a/contrib/jca/applications/test/jaas.config
+++ /dev/null
@@ -1,3 +0,0 @@
-Jackrabbit {
-  org.apache.jackrabbit.core.security.SimpleLoginModule required anonymousId="anonymous";
-};
\ No newline at end of file
diff --git a/contrib/jca/applications/test/log4j.properties b/contrib/jca/applications/test/log4j.properties
deleted file mode 100644
index e03b04c..0000000
--- a/contrib/jca/applications/test/log4j.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-# Set root logger level to DEBUG and its only appender to A1.
-log4j.rootLogger=INFO, file
-#log4j.rootLogger=DEBUG, stdout, file
-#log4j.rootLogger=ERROR, stdout, file
-
-log4j.logger.org.apache.jackrabbit.test=DEBUG
-
-# 'stdout' is set to be a ConsoleAppender.
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-
-# 'stdout' uses PatternLayout
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%d{dd.MM.yyyy HH:mm:ss} *%-5p* [%t] %c{1}: %m (%F, line %L)\n
-
-# 'file' is set to be a FileAppender.
-log4j.appender.file=org.apache.log4j.FileAppender
-log4j.appender.file.File=jcr.log
-
-# 'file' uses PatternLayout.
-log4j.appender.file.layout=org.apache.log4j.PatternLayout
-log4j.appender.file.layout.ConversionPattern=%d{dd.MM.yyyy HH:mm:ss} *%-5p* [%t] %c{1}: %m (%F, line %L)\n
diff --git a/contrib/jca/applications/test/repository.xml b/contrib/jca/applications/test/repository.xml
deleted file mode 100644
index d07f770..0000000
--- a/contrib/jca/applications/test/repository.xml
+++ /dev/null
@@ -1,247 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE Repository [
-    <!--
-        the Repository element configures a repository instance;
-        individual workspaces of the repository are configured through
-        separate configuration files called workspace.xml which are
-        located in a subfolder of the workspaces root directory
-        (see Workspaces element).
-
-        it consists of
-
-            a FileSystem element (the virtual file system
-            used by the repository to persist global state such as
-            registered namespaces, custom node types, etc..
-
-            a Security element that specifies the name of the app-entry
-            in the JAAS config and the access manager
-
-            a Workspaces element that specifies to the location of
-            workspaces root directory and the name of default workspace
-
-            a Workspace element that is used as a workspace configuration
-            template; it is used to create the initial workspace if there's
-            no workspace yet and for creating additional workspaces through
-            the api
-
-            a SearchIndex element that is used for configuring per workspace
-            Indexing-related settings
-
-            a Versioning element that is used for configuring
-            versioning-related settings
-    -->
-    <!ELEMENT Repository (FileSystem,Security,Workspaces,Workspace,Versioning,SearchIndex?)>
-
-    <!--
-        a virtual file system
-    -->
-    <!ELEMENT FileSystem (param*)>
-    <!ATTLIST FileSystem
-      class CDATA #REQUIRED>
-
-    <!--
-        the Security element specifies the name (appName attribute)
-        of the JAAS configuration app-entry for this repository. 
-
-        it also specifies the access manager to be used (AccessManager element).
-    -->
-    <!ELEMENT Security (AccessManager, LoginModule?)>
-    <!ATTLIST Security
-      appName CDATA #REQUIRED>
-
-    <!--
-        the AccessManager element configures the access manager to be used by
-        this repository instance; the class attribute specifies the FQN of the
-        class implementing the AccessManager interface
-    -->
-    <!ELEMENT AccessManager (param*)>
-    <!ATTLIST AccessManager
-      class CDATA #REQUIRED>
-
-    <!--
-        generic parameter (name/value pair)
-    -->
-    <!ELEMENT param EMPTY>
-    <!ATTLIST param
-      name CDATA #REQUIRED
-      value CDATA #REQUIRED>
-
-     <!--
-        the LoginModule element optionally specifies a JAAS login module to
-        authenticate users. This feature allows the use of Jackrabbit in a
-        non-JAAS environment.
-    -->
-    <!ELEMENT LoginModule (param*)>
-    <!ATTLIST LoginModule
-      class CDATA #REQUIRED>
-
-   <!--
-        the Workspaces element specifies the workspaces root directory
-        (rootPath attribute) and the name of the default workspace
-        (defaultWorkspace attribute).
-
-        individual workspaces are configured through individual workspace.xml
-        files located in a subfolder each of the workspaces root directory.
-    -->
-    <!ELEMENT Workspaces EMPTY>
-    <!ATTLIST Workspaces
-      rootPath CDATA #REQUIRED
-      defaultWorkspace CDATA #REQUIRED>
-
-    <!--
-        the Workspace element serves as a workspace configuration template;
-        it is used to create the initial workspace if there's no workspace yet
-        and for creating additional workspaces through the api
-    -->
-    <!ELEMENT Workspace (FileSystem,PersistenceManager,SearchIndex?)>
-    <!ATTLIST Workspace
-      name CDATA #REQUIRED>
-
-    <!--
-        the PersistenceManager element configures the persistence manager
-        to be used for the workspace; the class attribute specifies the
-        FQN of the class implementing the PersistenceManager interface
-    -->
-    <!ELEMENT PersistenceManager (param*)>
-    <!ATTLIST PersistenceManager
-      class CDATA #REQUIRED>
-
-    <!--
-        the SearchIndex element specifies the locaction of the search index
-        (used by the QueryHandler); the class attribute specifies the
-        FQN of the class implementing the QueryHandler interface.
-    -->
-    <!ELEMENT SearchIndex (param*,FileSystem?)>
-    <!ATTLIST SearchIndex
-      class CDATA #REQUIRED>
-
-    <!--
-        the Versioning element configures the persistence manager
-        to be used for persisting version state
-    -->
-    <!ELEMENT Versioning (FileSystem, PersistenceManager)>
-    <!ATTLIST Versioning
-      rootPath CDATA #REQUIRED
-    >
-]>
-<!-- Example Repository Configuration File -->
-<Repository>
-    <!--
-        virtual file system where the repository stores global state
-        (e.g. registered namespaces, custom node types, etc.)
-    -->
-    <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
-        <param name="path" value="${rep.home}/repository"/>
-    </FileSystem>
-
-    <!--
-        security configuration
-    -->
-    <Security appName="Jackrabbit">
-        <!--
-            access manager:
-            class: FQN of class implementing the AccessManager interface
-        -->
-        <AccessManager class="org.apache.jackrabbit.core.security.SimpleAccessManager">
-            <!-- <param name="config" value="${rep.home}/access.xml"/> -->
-        </AccessManager>
-
-        <LoginModule class="org.apache.jackrabbit.core.security.SimpleLoginModule">
-           <!-- anonymous user name ('anonymous' is the default value) -->
-           <param name="anonymousId" value="anonymous"/>
-        </LoginModule>
-    </Security>
-
-    <!--
-        location of workspaces root directory and name of default workspace
-    -->
-    <Workspaces rootPath="${rep.home}/workspaces" defaultWorkspace="default"/>
-    <!--
-        workspace configuration template:
-        used to create the initial workspace if there's no workspace yet
-    -->
-    <Workspace name="${wsp.name}">
-        <!--
-            virtual file system of the workspace:
-            class: FQN of class implementing the FileSystem interface
-        -->
-        <FileSystem class="com.day.jackrabbit.fs.cq.CQFileSystem">
-            <param name="path" value="${wsp.home}/wspStore.dat"/>
-            <param name="autoRepair" value="false"/>
-            <param name="blockSize" value="128"/>
-            <param name="autoSync" value="false"/>
-        </FileSystem>
-        <!--
-        <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
-            <param name="path" value="${wsp.home}"/>
-        </FileSystem>
-        -->
-        <!--
-            persistence manager of the workspace:
-            class: FQN of class implementing the PersistenceManager interface
-        -->
-        <!--
-        <PersistenceManager class="org.apache.jackrabbit.core.state.xml.XMLPersistenceManager"/>
-        -->
-        <!--
-        <PersistenceManager class="org.apache.jackrabbit.core.state.mem.InMemPersistenceManager">
-            <param name="initialCapacity" value="100000"/>
-            <param name="loadFactor" value="0.3"/>
-            <param name="persistent" value="true"/>
-        </PersistenceManager>
-        -->
-        <PersistenceManager class="org.apache.jackrabbit.core.state.obj.ObjectPersistenceManager"/>
-        <!--
-            Search index and the file system it uses.
-            class: FQN of class implementing the QueryHandler interface
-        -->
-        <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
-            <param name="path" value="${wsp.home}/index"/>
-        </SearchIndex>
-    </Workspace>
-
-    <!--
-        Configures the versioning
-    -->
-    <Versioning rootPath="${rep.home}/version">
-        <!--
-            Configures the filesystem to use for versioning for the respective
-            persistence manager
-        -->
-        <FileSystem class="com.day.jackrabbit.fs.cq.CQFileSystem">
-            <param name="path" value="${rep.home}/version/version.dat"/>
-            <param name="autoRepair" value="false"/>
-            <param name="blockSize" value="128"/>
-            <param name="autoSync" value="false"/>
-        </FileSystem>
-    
-        <!--
-            <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
-                <param name="path" value="${rep.home}/version"/>
-            </FileSystem>
-        -->
-        
-        <!--
-            Configures the perisistence manager to be used for persisting version state.
-            Please note that the current versioning implementation is based on
-            a 'normal' persistence manager, but this could change in future
-            implementations.
-        -->
-        <PersistenceManager class="org.apache.jackrabbit.core.state.obj.ObjectPersistenceManager"/>
-
-    </Versioning>
-
-    <!--
-        Search index for content that is shared repository wide
-        (/jcr:system tree, contains mainly versions)
-        
-        The same parameters are supported as in the search index configuration
-        inside the workspace definition element.
-        
-        This element is optional. If omitted, the /jcr:system tree will not be
-        indexed and no results will be returned for that tree!
-    -->
-    <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
-        <param name="path" value="${rep.home}/repository/index"/>
-    </SearchIndex>
-</Repository>
diff --git a/contrib/jca/deploy/jboss/4.x/jcr-ds.xml b/contrib/jca/deploy/jboss/4.x/jcr-ds.xml
deleted file mode 100644
index 8a7f9c7..0000000
--- a/contrib/jca/deploy/jboss/4.x/jcr-ds.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<connection-factories> 
-    <tx-connection-factory>
-	<jndi-name>jcr</jndi-name> 
-	<adapter-display-name>JCR Adapter</adapter-display-name>
-	<rar-name>jackrabbit-jca.rar</rar-name>
-	<connection-definition>javax.jcr.Session</connection-definition>
-	<xa-transaction/>
-	
-	<!-- Configuration properties. -->
-	<config-property name="homeDir">\dev\jcr</config-property>
-	<config-property name="configFile">\dev\jcr\repository.xml</config-property>
-    </tx-connection-factory>
-</connection-factories> 
diff --git a/contrib/jca/maven.xml b/contrib/jca/maven.xml
deleted file mode 100644
index 490063a..0000000
--- a/contrib/jca/maven.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project default="default">
-	<goal name="default" prereqs="rar:install"/>
-    <preGoal name="rar:rar">
-        <attainGoal name="jar:install"/>
-    </preGoal>
-    <preGoal name="rar:deploy">
-        <attainGoal name="jar:deploy"/>
-    </preGoal>
-</project>
diff --git a/contrib/jca/project.properties b/contrib/jca/project.properties
deleted file mode 100644
index c5cc1a7..0000000
--- a/contrib/jca/project.properties
+++ /dev/null
@@ -1,106 +0,0 @@
-#  Copyright 2003-2005 The Apache Software Foundation or its licensors,
-#                      as applicable
-#
-#  Licensed under the Apache License, Version 2.0 (the "License");
-#  you may not use this file except in compliance with the License.
-#  You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-#  distributed under the License is distributed on an "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#  See the License for the specific language governing permissions and
-#  limitations under the License.
-
-######################################################################
-# Apache Central Repository
-######################################################################
-maven.repo.central=www.apache.org
-maven.repo.central.directory=/www/www.apache.org/dist/java-repository
-maven.remote.group=apcvs
-maven.changelog.factory = org.apache.maven.svnlib.SvnChangeLogFactory
-
-######################################################################
-# JUnit Testing
-######################################################################
-maven.test.failure = false
-maven.junit.fork=true
-#maven.junit.sysproperties=org.xml.sax.driver java.security.auth.login.config
-maven.junit.sysproperties=org.xml.sax.driver
-org.xml.sax.driver=org.apache.xerces.parsers.SAXParser
-#java.security.auth.login.config=applications/test/jaas.config
-
-
-#If you wish to skip tests when doing builds, uncomment
-#maven.test.skip = true
-
-######################################################################
-# Checkstyle
-######################################################################
-maven.checkstyle.properties= checkstyle.xml
-maven.linkcheck.enable=false 
-
-######################################################################
-# JavaDoc
-#
-# javadoc urls can be added here, multiple urls are appended using a comma
-#
-# maven.javadoc.links = http://foo/bar/api,\
-#                       http://flim/flam/api/
-######################################################################
-maven.javadoc.links=http://java.sun.com/j2se/1.4.2/docs/api/,http://www.day.com/maven/jsr170/javadocs/jcr-0.16.4.1/
-maven.javadoc.author=false
-maven.javadoc.version=false
-
-######################################################################
-# Other opts
-######################################################################
-# uncomment the next line to work in offline mode (no jar download & no linkcheck)
-#maven.mode.online=
-
-maven.compile.debug=on
-maven.compile.deprecation=off
-maven.compile.optimize=off
-maven.compile.source=1.4
-maven.compile.target=1.4
-
-maven.jarResources.basedir=src/java
-maven.jar.excludes=**/package.html
-
-# Location of the generated query language parsers. Needed for
-# the Maven Eclipse plugin to automatically locate the generated
-# source files. Note that this value matches the hardcoded path
-# in the Maven JavaCC plugin. Therefore, do not change this value!
-maven.gen.src=${maven.build.dir}/generated-src/main
-
-# specifying additional remote repository for downloading dependencies 
-# not available at www.ibiblio.org/maven/
-maven.repo.remote = http://www.ibiblio.org/maven/,http://www.day.com/maven/
-
-######################################################################
-# Site L&F
-######################################################################
-# maven.xdoc.jsl=
-maven.xdoc.date=
-maven.xdoc.poweredby.image=maven-feather.png
-maven.xdoc.version=${pom.currentVersion}
-maven.xdoc.developmentProcessUrl=http://incubator.apache.org/projects/jackrabbit.html
-maven.changelog.range=60
-maven.changelog.factory=org.apache.maven.svnlib.SvnChangeLogFactory
-maven.multiproject.overviewPage.title=Jackrabbit components
-
-# ------------------------------------------------------------------------
-# M A V E N  J A R  O V E R R I D E
-# ------------------------------------------------------------------------
-#maven.jar.override = on
-#maven.jar.jcr = ${basedir}/lib/jcr.jar
-
-######################################################################
-# Site Deploy (into ../jackrabbit-site for checkout on incubator.apache.org)
-######################################################################
-maven.site.deploy.method=fs
-
-# IDE settings
-maven.eclipse.resources.addtoclasspath=true
-
diff --git a/contrib/jca/project.xml b/contrib/jca/project.xml
deleted file mode 100644
index 06f053f..0000000
--- a/contrib/jca/project.xml
+++ /dev/null
@@ -1,146 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project>
-    <pomVersion>3</pomVersion>    
-    <groupId>org.apache.jackrabbit</groupId>
-    <artifactId>jackrabbit-jca</artifactId>
-    <name>Jackrabbit JCA</name>
-    <currentVersion>1.0-SNAPSHOT</currentVersion>   
-    <organization>
-	<name>The Apache Software Foundation</name>
-	<url>http://incubator.apache.org/projects/jackrabbit.html</url>
-	<logo>http://incubator.apache.org/images/apache-incubator-logo.png</logo>
-    </organization>
-    <inceptionYear>2005</inceptionYear>
-    <package>org.apache.jackrabbit.jca</package>
-    <description>
-	A resource adapter for Jackrabbit as specified by JCA 1.0.
-    </description>
-    <dependencies>
-	<dependency>
-	    <groupId>org.apache.jackrabbit</groupId>
-	    <artifactId>jackrabbit</artifactId>
-	    <version>${pom.currentVersion}</version>
-	    <properties>
-		<rar.bundle>true</rar.bundle>
-	    </properties>
-	</dependency>
-	<dependency>
-	    <groupId>concurrent</groupId>
-	    <artifactId>concurrent</artifactId>
-	    <version>1.3.4</version>
-	    <properties>
-		<rar.bundle>true</rar.bundle>
-	    </properties>	    
-	</dependency>  
-	<dependency>
-	    <groupId>commons-collections</groupId>
-	    <artifactId>commons-collections</artifactId>
-	    <version>3.1</version>
-	    <properties>
-		<rar.bundle>true</rar.bundle>
-	    </properties>	    
-	</dependency> 
-	<dependency>
-	    <groupId>jsr170</groupId>
-	    <artifactId>jcr</artifactId>
-	    <version>1.0</version>
-	    <url>http://jcp.org/en/jsr/detail?id=170</url>
-	    <properties>
-		<rar.bundle>true</rar.bundle>
-	    </properties>	    
-	</dependency> 
-	<dependency>
-	    <artifactId>log4j</artifactId>
-	    <groupId>log4j</groupId>
-	    <version>1.2.8</version>
-	    <properties>
-		<rar.bundle>true</rar.bundle>
-	    </properties>	    
-	</dependency>
-	<dependency>
-	    <groupId>lucene</groupId>
-	    <artifactId>lucene</artifactId>
-	    <version>1.4.3</version>
-	    <properties>
-		<rar.bundle>true</rar.bundle>
-	    </properties>	    
-	</dependency>
-	<dependency>
-	    <groupId>xerces</groupId>
-	    <artifactId>xercesImpl</artifactId>
-	    <version>2.6.2</version>
-	    <properties>
-		<rar.bundle>true</rar.bundle>
-	    </properties>	    
-	</dependency>
-	<dependency>
-	    <groupId>xerces</groupId>
-	    <artifactId>xmlParserAPIs</artifactId>
-	    <version>2.0.2</version>
-	    <properties>
-		<rar.bundle>true</rar.bundle>
-	    </properties>	    
-	</dependency> 
-	<dependency>
-	    <groupId>commons-logging</groupId>
-	    <artifactId>commons-logging</artifactId>
-	    <version>1.0</version>
-	    <properties>
-		<rar.bundle>true</rar.bundle>
-	    </properties>	    
-	</dependency>     
-	<dependency>
-	    <groupId>cqfs</groupId>
-	    <artifactId>cqfs-jackrabbit</artifactId>
-	    <version>3.5.6-SNAPSHOT</version>
-	    <properties>
-		<rar.bundle>true</rar.bundle>
-	    </properties>	    
-	</dependency>
-	<dependency>
-	    <groupId>cqfs</groupId>
-	    <artifactId>cqfs</artifactId>
-	    <version>3.5.6-SNAPSHOT</version>
-	    <properties>
-		<rar.bundle>true</rar.bundle>
-	    </properties>	    
-	</dependency>    
-	<dependency>
-	    <groupId>geronimo-spec</groupId>
-	    <artifactId>geronimo-spec-j2ee-connector</artifactId>
-	    <version>1.0-M1</version>
-	    <properties>
-		<rar.bundle>false</rar.bundle>
-	    </properties>	    
-	</dependency>					      
-    </dependencies>	
-	  
-    <build>
-	<sourceDirectory>src/java</sourceDirectory>
-	<unitTestSourceDirectory>src/test</unitTestSourceDirectory>
-	<unitTest>
-	    <includes>
-		<include>**/*Test.java</include>
-	    </includes>
-	    <excludes>
-		<exclude>**/init/*</exclude>
-	    </excludes>
-	    <resources>
-		<resource>
-		    <directory>applications/test</directory>
-		    <includes>
-			<include>*.properties</include>
-			<include>*.xml</include>
-		    </includes>
-		</resource>
-		<resource>
-		    <directory>src/test</directory>
-		    <includes>
-			<include>**/*.xml</include>
-			<include>**/*.txt</include>
-		    </includes>
-		</resource>
-	    </resources>
-	</unitTest>	
-    </build>		
-</project>
diff --git a/contrib/jca/src/java/org/apache/jackrabbit/jca/JCAConnectionManager.java b/contrib/jca/src/java/org/apache/jackrabbit/jca/JCAConnectionManager.java
deleted file mode 100644
index e1d4cd6..0000000
--- a/contrib/jca/src/java/org/apache/jackrabbit/jca/JCAConnectionManager.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.jca;
-
-import javax.resource.ResourceException;
-import javax.resource.spi.ConnectionManager;
-import javax.resource.spi.ConnectionRequestInfo;
-import javax.resource.spi.ManagedConnection;
-import javax.resource.spi.ManagedConnectionFactory;
-
-/**
- * This class implements the default connection manager.
- */
-public final class JCAConnectionManager
-        implements ConnectionManager {
-    
-    /**
-     * The method allocateConnection gets called by the resource adapter's
-     * connection factory instance.
-     */
-    public Object allocateConnection(ManagedConnectionFactory mcf, ConnectionRequestInfo cri)
-            throws ResourceException {
-        ManagedConnection mc = mcf.createManagedConnection(null, cri);
-        return mc.getConnection(null, cri);
-    }
-}
diff --git a/contrib/jca/src/java/org/apache/jackrabbit/jca/JCAConnectionRequestInfo.java b/contrib/jca/src/java/org/apache/jackrabbit/jca/JCAConnectionRequestInfo.java
deleted file mode 100644
index 0319ca4..0000000
--- a/contrib/jca/src/java/org/apache/jackrabbit/jca/JCAConnectionRequestInfo.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.jca;
-
-import javax.jcr.Credentials;
-import javax.jcr.SimpleCredentials;
-import javax.resource.spi.ConnectionRequestInfo;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * This class encapsulates the credentials for creating a
- * session from the repository.
- */
-public final class JCAConnectionRequestInfo
-        implements ConnectionRequestInfo {
-    
-    /**
-     * Credentials.
-     */
-    private final Credentials creds;
-
-    /**
-     * Workspace.
-     */
-    private final String workspace;
-
-    /**
-     * Construct the request info.
-     */
-    public JCAConnectionRequestInfo(JCAConnectionRequestInfo cri) {
-        this(cri.creds, cri.workspace);
-    }
-
-    /**
-     * Construct the request info.
-     */
-    public JCAConnectionRequestInfo(Credentials creds, String workspace) {
-        this.creds = creds;
-        this.workspace = workspace;
-    }
-
-    /**
-     * Return the workspace.
-     */
-    public String getWorkspace() {
-        return workspace;
-    }
-
-    /**
-     * Return the credentials.
-     */
-    public Credentials getCredentials() {
-        return creds;
-    }
-
-    /**
-     * Return the hash code.
-     */
-    public int hashCode() {
-        int hash1 = workspace != null ? workspace.hashCode() : 0;
-        int hash2 = creds != null ? creds.hashCode() : 0;
-        return hash1 ^ hash2;
-    }
-
-    /**
-     * Return true if equals.
-     */
-    public boolean equals(Object o) {
-        if (o == this) {
-            return true;
-        } else if (o instanceof JCAConnectionRequestInfo) {
-            return equals((JCAConnectionRequestInfo) o);
-        } else {
-            return false;
-        }
-    }
-
-    /**
-     * Return true if equals.
-     */
-    private boolean equals(JCAConnectionRequestInfo o) {
-        return equals(workspace, o.workspace) &&
-                equals(creds, o.creds);
-    }
-
-    /**
-     * Return true if equals.
-     */
-    private boolean equals(Object o1, Object o2) {
-        if (o1 == o2) {
-            return true;
-        } else if ((o1 != null) && (o2 != null)) {
-            return o1.equals(o2);
-        } else {
-            return false;
-        }
-    }
-
-    /**
-     * Return true if equals.
-     */
-    private boolean equals(char[] o1, char[] o2) {
-        if (o1 == o2) {
-            return true;
-        } else if ((o1 != null) && (o2 != null)) {
-            return equals(new String(o1), new String(o2));
-        } else {
-            return false;
-        }
-    }
-
-    /**
-     * Return true if equals.
-     */
-    private boolean equals(Credentials o1, Credentials o2) {
-        if (o1 == o2) {
-            return true;
-        } else if ((o1 != null) && (o2 != null)) {
-            if ((o1 instanceof SimpleCredentials) && (o2 instanceof SimpleCredentials)) {
-                return equals((SimpleCredentials) o1, (SimpleCredentials) o2);
-            } else {
-                return o1.equals(o2);
-            }
-        } else {
-            return false;
-        }
-    }
-
-    /**
-     * This method compares two simple credentials.
-     */
-    private boolean equals(SimpleCredentials o1, SimpleCredentials o2) {
-        if (!equals(o1.getUserID(), o2.getUserID())) {
-            return false;
-        }
-
-        if (!equals(o1.getPassword(), o2.getPassword())) {
-            return false;
-        }
-
-        Map m1 = getAttributeMap(o1);
-        Map m2 = getAttributeMap(o2);
-        return m1.equals(m2);
-    }
-
-    /**
-     * Return the credentials attributes.
-     */
-    private Map getAttributeMap(SimpleCredentials creds) {
-        HashMap map = new HashMap();
-        String[] keys = creds.getAttributeNames();
-
-        for (int i = 0; i < keys.length; i++) {
-            map.put(keys[i], creds.getAttribute(keys[i]));
-        }
-
-        return map;
-    }
-}
diff --git a/contrib/jca/src/java/org/apache/jackrabbit/jca/JCAManagedConnection.java b/contrib/jca/src/java/org/apache/jackrabbit/jca/JCAManagedConnection.java
deleted file mode 100644
index a9f919c..0000000
--- a/contrib/jca/src/java/org/apache/jackrabbit/jca/JCAManagedConnection.java
+++ /dev/null
@@ -1,390 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.jca;
-
-import org.apache.jackrabbit.core.RepositoryImpl;
-import org.apache.jackrabbit.core.XASession;
-
-import javax.jcr.Repository;
-import javax.resource.ResourceException;
-import javax.resource.spi.ConnectionEvent;
-import javax.resource.spi.ConnectionEventListener;
-import javax.resource.spi.ConnectionRequestInfo;
-import javax.resource.spi.LocalTransaction;
-import javax.resource.spi.ManagedConnection;
-import javax.resource.spi.ManagedConnectionMetaData;
-import javax.security.auth.Subject;
-import javax.transaction.xa.XAResource;
-import java.io.PrintWriter;
-import java.util.Iterator;
-import java.util.LinkedList;
-
-/**
- * This class implements the managed connection for
- * this resource adapter.
- */
-public final class JCAManagedConnection
-        implements ManagedConnection, ManagedConnectionMetaData {
-    
-    /**
-     * Managed connection factory.
-     */
-    private final JCAManagedConnectionFactory mcf;
-
-    /**
-     * Connection request info.
-     */
-    private final JCAConnectionRequestInfo cri;
-
-    /**
-     * Session instance.
-     */
-    private final XASession session;
-
-    /**
-     * Listeners.
-     */
-    private final LinkedList listeners;
-
-    /**
-     * Handles.
-     */
-    private final LinkedList handles;
-
-    /**
-     * Log writer.
-     */
-    private PrintWriter logWriter;
-
-    /**
-     * Construct the managed connection.
-     */
-    public JCAManagedConnection(JCAManagedConnectionFactory mcf, JCAConnectionRequestInfo cri, XASession session) {
-        this.mcf = mcf;
-        this.cri = cri;
-        this.session = session;
-        this.listeners = new LinkedList();
-        this.handles = new LinkedList();
-    }
-
-    /**
-     * Return the repository.
-     */
-    private RepositoryImpl getRepository() {
-        return mcf.getRepository();
-    }
-
-    /**
-     * Return the managed connection factory.
-     */
-    public JCAManagedConnectionFactory getManagedConnectionFactory() {
-        return mcf;
-    }
-
-    /**
-     * Return the connection request info.
-     */
-    public JCAConnectionRequestInfo getConnectionRequestInfo() {
-        return cri;
-    }
-
-    /**
-     * Get the log writer.
-     */
-    public PrintWriter getLogWriter() {
-        return logWriter;
-    }
-
-    /**
-     * Set the log writer.
-     */
-    public void setLogWriter(PrintWriter logWriter)
-            throws ResourceException {
-        this.logWriter = logWriter;
-    }
-
-    /**
-     * Creates a new connection handle for the underlying physical
-     * connection represented by the ManagedConnection instance.
-     */
-    public Object getConnection(Subject subject, ConnectionRequestInfo cri)
-            throws ResourceException {
-        JCASessionHandle handle = new JCASessionHandle(this);
-        addHandle(handle);
-        return handle;
-    }
-
-    /**
-     * Destroys the physical connection to the underlying resource manager.
-     */
-    public void destroy()
-            throws ResourceException {
-        cleanup();
-        session.logout();
-    }
-
-    /**
-     * Application server calls this method to force any cleanup on
-     * the ManagedConnection instance.
-     */
-    public void cleanup()
-            throws ResourceException {
-        closeHandles();
-    }
-
-    /**
-     * Used by the container to change the association of an
-     * application-level connection handle with a ManagedConneciton instance.
-     */
-    public void associateConnection(Object connection)
-            throws ResourceException {
-        JCASessionHandle handle = (JCASessionHandle) connection;
-        if (handle.getManagedConnection() != this) {
-            handle.getManagedConnection().removeHandle(handle);
-            handle.setManagedConnection(this);
-            addHandle(handle);
-        }
-    }
-
-    /**
-     * Returns an javax.transaction.xa.XAresource instance.
-     */
-    public XAResource getXAResource()
-            throws ResourceException {
-        return session.getXAResource();
-    }
-
-    /**
-     * Returns an javax.resource.spi.LocalTransaction instance.
-     */
-    public LocalTransaction getLocalTransaction()
-            throws ResourceException {
-        throw new UnsupportedOperationException("Local transaction is not supported");
-    }
-
-    /**
-     * Gets the metadata information for this connection's underlying
-     * EIS resource manager instance.
-     */
-    public ManagedConnectionMetaData getMetaData()
-            throws ResourceException {
-        return this;
-    }
-
-    /**
-     * Close the handle.
-     */
-    public void closeHandle(JCASessionHandle handle) {
-        if (handle != null) {
-            removeHandle(handle);
-            sendClosedEvent(handle);
-        }
-    }
-
-    /**
-     * Return the session.
-     */
-    public XASession getSession(JCASessionHandle handle) {
-        synchronized (handles) {
-            if ((handles.size() > 0) && (handles.get(0) == handle)) {
-                return session;
-            } else {
-                throw new java.lang.IllegalStateException("Inactive logical session handle called");
-            }
-        }
-    }
-
-    /**
-     * Return the product name.
-     */
-    public String getEISProductName()
-            throws ResourceException {
-        return getRepository().getDescriptor(Repository.REP_NAME_DESC);
-    }
-
-    /**
-     * Return the product version.
-     */
-    public String getEISProductVersion()
-            throws ResourceException {
-        return getRepository().getDescriptor(Repository.REP_VERSION_DESC);
-    }
-
-    /**
-     * Return number of max connections.
-     */
-    public int getMaxConnections()
-            throws ResourceException {
-        return Integer.MAX_VALUE;
-    }
-
-    /**
-     * Return the user name.
-     */
-    public String getUserName()
-            throws ResourceException {
-        return session.getUserID();
-    }
-
-    /**
-     * Log a message.
-     */
-    public void log(String message) {
-        log(message, null);
-    }
-
-    /**
-     * Log a message.
-     */
-    public void log(String message, Throwable exception) {
-        if (logWriter != null) {
-            logWriter.println(message);
-
-            if (exception != null) {
-                exception.printStackTrace(logWriter);
-            }
-        }
-    }
-
-    /**
-     * Adds a listener.
-     */
-    public void addConnectionEventListener(ConnectionEventListener listener) {
-        synchronized (listeners) {
-            if (!listeners.contains(listener)) {
-                listeners.add(listener);
-            }
-        }
-    }
-
-    /**
-     * Remove a listener.
-     */
-    public void removeConnectionEventListener(ConnectionEventListener listener) {
-        synchronized (listeners) {
-            listeners.remove(listener);
-        }
-    }
-
-    /**
-     * Send event.
-     */
-    private void sendEvent(ConnectionEvent event) {
-        synchronized (listeners) {
-            for (Iterator i = listeners.iterator(); i.hasNext();) {
-                ConnectionEventListener listener = (ConnectionEventListener) i.next();
-
-                switch (event.getId()) {
-                    case ConnectionEvent.CONNECTION_CLOSED:
-                        listener.connectionClosed(event);
-                        break;
-                    case ConnectionEvent.CONNECTION_ERROR_OCCURRED:
-                        listener.connectionErrorOccurred(event);
-                        break;
-                    case ConnectionEvent.LOCAL_TRANSACTION_COMMITTED:
-                        listener.localTransactionCommitted(event);
-                        break;
-                    case ConnectionEvent.LOCAL_TRANSACTION_ROLLEDBACK:
-                        listener.localTransactionRolledback(event);
-                        break;
-                    case ConnectionEvent.LOCAL_TRANSACTION_STARTED:
-                        listener.localTransactionStarted(event);
-                        break;
-                }
-            }
-        }
-    }
-
-    /**
-     * Send event.
-     */
-    private void sendEvent(int type, Object handle, Exception cause) {
-        ConnectionEvent event = new ConnectionEvent(this, type, cause);
-        if (handle != null) {
-            event.setConnectionHandle(handle);
-        }
-
-        sendEvent(event);
-    }
-
-    /**
-     * Send connection closed event.
-     */
-    private void sendClosedEvent(JCASessionHandle handle) {
-        sendEvent(ConnectionEvent.CONNECTION_CLOSED, handle, null);
-    }
-
-    /**
-     * Send connection error event.
-     */
-    public void sendrrorEvent(JCASessionHandle handle, Exception cause) {
-        sendEvent(ConnectionEvent.CONNECTION_ERROR_OCCURRED, handle, cause);
-    }
-
-    /**
-     * Send transaction committed event.
-     */
-    public void sendTxCommittedEvent(JCASessionHandle handle) {
-        sendEvent(ConnectionEvent.LOCAL_TRANSACTION_COMMITTED, handle, null);
-    }
-
-    /**
-     * Send transaction rolledback event.
-     */
-    public void sendTxRolledbackEvent(JCASessionHandle handle) {
-        sendEvent(ConnectionEvent.LOCAL_TRANSACTION_ROLLEDBACK, handle, null);
-    }
-
-    /**
-     * Send transaction started event.
-     */
-    public void sendTxStartedEvent(JCASessionHandle handle) {
-        sendEvent(ConnectionEvent.LOCAL_TRANSACTION_STARTED, handle, null);
-    }
-
-    /**
-     * Add a session handle.
-     */
-    private void addHandle(JCASessionHandle handle) {
-        synchronized (handles) {
-            handles.addFirst(handle);
-        }
-    }
-
-    /**
-     * Remove a session handle.
-     */
-    private void removeHandle(JCASessionHandle handle) {
-        synchronized (handles) {
-            handles.remove(handle);
-        }
-    }
-
-    /**
-     * Release handles.
-     */
-    private void closeHandles() {
-        synchronized (handles) {
-            for (Iterator i = handles.iterator(); i.hasNext();) {
-                JCASessionHandle handle = (JCASessionHandle) i.next();
-                closeHandle(handle);
-            }
-
-            handles.clear();
-        }
-    }
-}
diff --git a/contrib/jca/src/java/org/apache/jackrabbit/jca/JCAManagedConnectionFactory.java b/contrib/jca/src/java/org/apache/jackrabbit/jca/JCAManagedConnectionFactory.java
deleted file mode 100644
index 01c2bc0..0000000
--- a/contrib/jca/src/java/org/apache/jackrabbit/jca/JCAManagedConnectionFactory.java
+++ /dev/null
@@ -1,290 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.jca;
-
-import org.apache.jackrabbit.core.RepositoryImpl;
-import org.apache.jackrabbit.core.XASession;
-
-import javax.jcr.Credentials;
-import javax.jcr.RepositoryException;
-import javax.resource.ResourceException;
-import javax.resource.spi.ConnectionManager;
-import javax.resource.spi.ConnectionRequestInfo;
-import javax.resource.spi.ManagedConnection;
-import javax.resource.spi.ManagedConnectionFactory;
-import javax.security.auth.Subject;
-import java.io.PrintWriter;
-import java.util.Iterator;
-import java.util.Set;
-
-/**
- * Implements the JCA ManagedConnectionFactory contract.
- */
-public final class JCAManagedConnectionFactory
-        implements ManagedConnectionFactory {
-
-    /**
-     * Home directory.
-     */
-    private String homeDir;
-
-    /**
-     * Config file.
-     */
-    private String configFile;
-
-    /**
-     * Repository.
-     */
-    private transient RepositoryImpl repository;
-
-    /**
-     * Log writer.
-     */
-    private transient PrintWriter logWriter;
-
-    /**
-     * Return the repository home directory.
-     */
-    public String getHomeDir() {
-        return homeDir;
-    }
-
-    /**
-     * Set the repository home directory.
-     */
-    public void setHomeDir(String homeDir) {
-        this.homeDir = homeDir;
-    }
-
-    /**
-     * Return the repository configuration file.
-     */
-    public String getConfigFile() {
-        return configFile;
-    }
-
-    /**
-     * Set the repository configuration file.
-     */
-    public void setConfigFile(String configFile) {
-        this.configFile = configFile;
-    }
-
-    /**
-     * Get the log writer.
-     */
-    public PrintWriter getLogWriter() {
-        return logWriter;
-    }
-
-    /**
-     * Set the log writer.
-     */
-    public void setLogWriter(PrintWriter logWriter)
-            throws ResourceException {
-        this.logWriter = logWriter;
-    }
-
-    /**
-     * Creates a Connection Factory instance.
-     */
-    public Object createConnectionFactory()
-            throws ResourceException {
-        return createConnectionFactory(new JCAConnectionManager());
-    }
-
-    /**
-     * Creates a Connection Factory instance.
-     */
-    public Object createConnectionFactory(ConnectionManager cm)
-            throws ResourceException {
-        createRepository();
-        JCARepositoryHandle handle = new JCARepositoryHandle(this, cm);
-        log("Created repository handle (" + handle + ")");
-        return handle;
-    }
-
-    /**
-     * Create a new session.
-     */
-    private XASession openSession(JCAConnectionRequestInfo cri)
-            throws ResourceException {
-        createRepository();
-        Credentials creds = cri.getCredentials();
-        String workspace = cri.getWorkspace();
-
-        try {
-            XASession session = (XASession) getRepository().login(creds, workspace);
-            log("Created session (" + session + ")");
-            return session;
-        } catch (RepositoryException e) {
-            log("Failed to create session", e);
-            throw new ResourceException(e);
-        }
-    }
-
-    /**
-     * Creates a new physical connection to the underlying EIS resource manager.
-     */
-    public ManagedConnection createManagedConnection(Subject subject, ConnectionRequestInfo cri)
-            throws ResourceException {
-        return createManagedConnection((JCAConnectionRequestInfo) cri);
-    }
-
-    /**
-     * Creates a new physical connection to the underlying EIS resource manager.
-     */
-    private ManagedConnection createManagedConnection(JCAConnectionRequestInfo cri)
-            throws ResourceException {
-        return new JCAManagedConnection(this, cri, openSession(cri));
-    }
-
-    /**
-     * Returns a matched connection from the candidate set of connections.
-     */
-    public ManagedConnection matchManagedConnections(Set set, Subject subject, ConnectionRequestInfo cri)
-            throws ResourceException {
-        for (Iterator i = set.iterator(); i.hasNext();) {
-            Object next = i.next();
-
-            if (next instanceof JCAManagedConnection) {
-                JCAManagedConnection mc = (JCAManagedConnection) next;
-                if (equals(mc.getManagedConnectionFactory())) {
-                    JCAConnectionRequestInfo otherCri = mc.getConnectionRequestInfo();
-                    if (equals(cri, otherCri)) {
-                        return mc;
-                    }
-                }
-            }
-        }
-
-        return null;
-    }
-
-    /**
-     * Return the repository.
-     */
-    public RepositoryImpl getRepository() {
-        return repository;
-    }
-
-    /**
-     * Log a message.
-     */
-    public void log(String message) {
-        log(message, null);
-    }
-
-    /**
-     * Log a message.
-     */
-    public void log(String message, Throwable exception) {
-        if (logWriter != null) {
-            logWriter.println(message);
-
-            if (exception != null) {
-                exception.printStackTrace(logWriter);
-            }
-        }
-    }
-
-    /**
-     * Return the hash code.
-     */
-    public int hashCode() {
-        int result = homeDir != null ? homeDir.hashCode() : 0;
-        result = 37 * result + (configFile != null ? configFile.hashCode() : 0);
-        return result;
-    }
-
-    /**
-     * Return true if equals.
-     */
-    public boolean equals(Object o) {
-        if (o == this) {
-            return true;
-        } else if (o instanceof JCAManagedConnectionFactory) {
-            return equals((JCAManagedConnectionFactory) o);
-        } else {
-            return false;
-        }
-    }
-
-    /**
-     * Return true if equals.
-     */
-    private boolean equals(JCAManagedConnectionFactory o) {
-        return equals(homeDir, o.homeDir) &&
-               equals(configFile, o.configFile);
-    }
-
-    /**
-     * Return true if equals.
-     */
-    private boolean equals(Object o1, Object o2) {
-        if (o1 == o2) {
-            return true;
-        } else if ((o1 == null) || (o2 == null)) {
-            return false;
-        } else {
-            return o1.equals(o2);
-        }
-    }
-
-    /**
-     * Shutdown the repository.
-     */
-    protected void finalize() {
-        shutdownRepository();
-    }
-
-    /**
-     * Create repository.
-     */
-    private void createRepository()
-            throws ResourceException {
-        if (repository == null) {
-            // Check the home directory
-            if ((homeDir == null) || homeDir.equals("")) {
-                throw new ResourceException("Property 'homeDir' not set");
-            }
-
-            // Check the config file
-            if ((configFile == null) || configFile.equals("")) {
-                throw new ResourceException("Property 'configFile' not set");
-            }
-
-            try {
-                JCARepositoryManager mgr = JCARepositoryManager.getInstance();
-                repository = mgr.createRepository(homeDir, configFile);
-                log("Created repository (" + repository + ")");
-            } catch (RepositoryException e) {
-                log("Failed to create repository", e);
-                throw new ResourceException(e);
-            }
-        }
-    }
-
-    /**
-     * Shutdown the repository.
-     */
-    private void shutdownRepository() {
-        JCARepositoryManager mgr = JCARepositoryManager.getInstance();
-        mgr.shutdownRepository(homeDir, configFile);
-    }
-}
diff --git a/contrib/jca/src/java/org/apache/jackrabbit/jca/JCARepositoryHandle.java b/contrib/jca/src/java/org/apache/jackrabbit/jca/JCARepositoryHandle.java
deleted file mode 100644
index 2622409..0000000
--- a/contrib/jca/src/java/org/apache/jackrabbit/jca/JCARepositoryHandle.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.jca;
-
-import javax.jcr.Credentials;
-import javax.jcr.LoginException;
-import javax.jcr.NoSuchWorkspaceException;
-import javax.jcr.Repository;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.naming.Reference;
-import javax.resource.Referenceable;
-import javax.resource.ResourceException;
-import javax.resource.spi.ConnectionManager;
-import java.io.Serializable;
-
-/**
- * This class implements the JCA implementation of repository.
- */
-public final class JCARepositoryHandle
-        implements Repository, Referenceable, Serializable {
-
-    /**
-     * Managed connection factory.
-     */
-    private final JCAManagedConnectionFactory mcf;
-
-    /**
-     * Connection manager.
-     */
-    private final ConnectionManager cm;
-
-    /**
-     * Reference.
-     */
-    private Reference reference;
-
-    /**
-     * Construct the repository.
-     */
-    public JCARepositoryHandle(JCAManagedConnectionFactory mcf, ConnectionManager cm) {
-        this.mcf = mcf;
-        this.cm = cm;
-    }
-
-    /**
-     * Creates a new session.
-     */
-    public Session login()
-            throws LoginException, NoSuchWorkspaceException, RepositoryException {
-        return login(null, null);
-    }
-
-    /**
-     * Creates a new session.
-     */
-    public Session login(Credentials creds)
-            throws LoginException, NoSuchWorkspaceException, RepositoryException {
-        return login(creds, null);
-    }
-
-    /**
-     * Creates a new session.
-     */
-    public Session login(String workspace)
-            throws LoginException, NoSuchWorkspaceException, RepositoryException {
-        return login(null, workspace);
-    }
-
-    /**
-     * Creates a new session.
-     */
-    public Session login(Credentials creds, String workspace)
-            throws LoginException, NoSuchWorkspaceException, RepositoryException {
-        return login(new JCAConnectionRequestInfo(creds, workspace));
-    }
-
-    /**
-     * Creates a new session.
-     */
-    private Session login(JCAConnectionRequestInfo cri)
-            throws LoginException, NoSuchWorkspaceException, RepositoryException {
-        try {
-            return (Session) cm.allocateConnection(mcf, cri);
-        } catch (ResourceException e) {
-            Throwable cause = e.getCause();
-
-            if (cause instanceof LoginException) {
-                throw (LoginException) cause;
-            } else if (cause instanceof NoSuchWorkspaceException) {
-                throw (NoSuchWorkspaceException) cause;
-            } else if (cause instanceof RepositoryException) {
-                throw (RepositoryException) cause;
-            } else if (cause != null) {
-                throw new RepositoryException(cause);
-            } else {
-                throw new RepositoryException(e);
-            }
-        }
-    }
-
-    /**
-     * Return the descriptor keys.
-     */
-    public String[] getDescriptorKeys() {
-        return mcf.getRepository().getDescriptorKeys();
-    }
-
-    /**
-     * Return the descriptor for key.
-     */
-    public String getDescriptor(String key) {
-        return mcf.getRepository().getDescriptor(key);
-    }
-
-    /**
-     * Return the reference.
-     */
-    public Reference getReference() {
-        return reference;
-    }
-
-    /**
-     * Set the reference.
-     */
-    public void setReference(Reference reference) {
-        this.reference = reference;
-    }
-}
diff --git a/contrib/jca/src/java/org/apache/jackrabbit/jca/JCARepositoryManager.java b/contrib/jca/src/java/org/apache/jackrabbit/jca/JCARepositoryManager.java
deleted file mode 100644
index e0a2c7f..0000000
--- a/contrib/jca/src/java/org/apache/jackrabbit/jca/JCARepositoryManager.java
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.jca;
-
-import org.apache.jackrabbit.core.RepositoryImpl;
-import org.apache.jackrabbit.core.config.RepositoryConfig;
-
-import javax.jcr.RepositoryException;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * This class implements the repository manager.
- */
-public final class JCARepositoryManager {
-
-    /**
-     * Instance of manager.
-     */
-    private final static JCARepositoryManager INSTANCE =
-            new JCARepositoryManager();
-
-    /**
-     * References.
-     */
-    private final Map references;
-
-    /**
-     * Construct the manager.
-     */
-    private JCARepositoryManager() {
-        this.references = new HashMap();
-    }
-
-    /**
-     * Create repository.
-     */
-    public RepositoryImpl createRepository(String homeDir, String configFile)
-            throws RepositoryException {
-        Reference ref = getReference(homeDir, configFile);
-        return ref.create();
-    }
-
-    /**
-     * Shutdown the repository.
-     */
-    public void shutdownRepository(String homeDir, String configFile) {
-        Reference ref = getReference(homeDir, configFile);
-        ref.shutdown();
-    }
-
-    /**
-     * Return the reference.
-     */
-    private synchronized Reference getReference(String homeDir, String configFile) {
-        Reference ref = new Reference(homeDir, configFile);
-        Reference other = (Reference) references.get(ref);
-
-        if (other == null) {
-            references.put(ref, ref);
-            return ref;
-        } else {
-            return other;
-        }
-    }
-
-    /**
-     * Return the instance.
-     */
-    public static JCARepositoryManager getInstance() {
-        return INSTANCE;
-    }
-
-    /**
-     * Repository reference implementation.
-     */
-    private final class Reference {
-        /**
-         * Home directory.
-         */
-        private final String homeDir;
-
-        /**
-         * Configuration file.
-         */
-        private final String configFile;
-
-        /**
-         * Repository instance.
-         */
-        private RepositoryImpl repository;
-
-        /**
-         * Reference count.
-         */
-        private int count;
-
-        /**
-         * Construct the manager.
-         */
-        private Reference(String homeDir, String configFile) {
-            this.homeDir = homeDir;
-            this.configFile = configFile;
-            this.repository = null;
-            this.count = 0;
-        }
-
-        /**
-         * Return the repository.
-         */
-        public RepositoryImpl create()
-                throws RepositoryException {
-            if (repository == null) {
-                RepositoryConfig config = RepositoryConfig.create(configFile, homeDir);
-                repository = RepositoryImpl.create(config);
-            }
-
-            count++;
-            return repository;
-        }
-
-        /**
-         * Shutdown the repository.
-         */
-        public void shutdown() {
-            if (count > 0) {
-                count--;
-
-                if (count == 0) {
-                    repository.shutdown();
-                    repository = null;
-                }
-            }
-        }
-
-        /**
-         * Return the hash code.
-         */
-        public int hashCode() {
-            int result = homeDir != null ? homeDir.hashCode() : 0;
-            result = 37 * result + (configFile != null ? configFile.hashCode() : 0);
-            return result;
-        }
-
-        /**
-         * Return true if equals.
-         */
-        public boolean equals(Object o) {
-            if (o == this) {
-                return true;
-            } else if (o instanceof Reference) {
-                return equals((Reference) o);
-            } else {
-                return false;
-            }
-        }
-
-        /**
-         * Return true if equals.
-         */
-        private boolean equals(Reference o) {
-            return equals(homeDir, o.homeDir) &&
-                   equals(configFile, o.configFile);
-        }
-
-        /**
-         * Return true if equals.
-         */
-        private boolean equals(String s1, String s2) {
-            if (s1 == s2) {
-                return true;
-            } else if ((s1 == null) || (s2 == null)) {
-                return false;
-            } else {
-                return s1.equals(s2);
-            }
-        }
-    }
-}
-
diff --git a/contrib/jca/src/java/org/apache/jackrabbit/jca/JCASessionHandle.java b/contrib/jca/src/java/org/apache/jackrabbit/jca/JCASessionHandle.java
deleted file mode 100644
index c1a5f94..0000000
--- a/contrib/jca/src/java/org/apache/jackrabbit/jca/JCASessionHandle.java
+++ /dev/null
@@ -1,330 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.jca;
-
-import org.xml.sax.ContentHandler;
-import org.xml.sax.SAXException;
-
-import javax.jcr.AccessDeniedException;
-import javax.jcr.Credentials;
-import javax.jcr.InvalidItemStateException;
-import javax.jcr.InvalidSerializedDataException;
-import javax.jcr.Item;
-import javax.jcr.ItemExistsException;
-import javax.jcr.ItemNotFoundException;
-import javax.jcr.LoginException;
-import javax.jcr.NamespaceException;
-import javax.jcr.Node;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.Repository;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.UnsupportedRepositoryOperationException;
-import javax.jcr.ValueFactory;
-import javax.jcr.Workspace;
-import javax.jcr.lock.LockException;
-import javax.jcr.nodetype.ConstraintViolationException;
-import javax.jcr.nodetype.NoSuchNodeTypeException;
-import javax.jcr.version.VersionException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.security.AccessControlException;
-
-/**
- * This class implements the JCA implementation of session.
- */
-public final class JCASessionHandle
-        implements Session {
-
-    /**
-     * Managed connection.
-     */
-    private JCAManagedConnection mc;
-
-    /**
-     * Construct a new session.
-     */
-    public JCASessionHandle(JCAManagedConnection mc) {
-        this.mc = mc;
-    }
-
-    /**
-     * Return the managed connection.
-     */
-    public JCAManagedConnection getManagedConnection() {
-        return mc;
-    }
-
-    /**
-     * Set the managed connection.
-     */
-    public void setManagedConnection(JCAManagedConnection mc) {
-        this.mc = mc;
-    }
-
-    /**
-     * Return the session.
-     */
-    private Session getSession() {
-        return mc.getSession(this);
-    }
-
-    /**
-     * Return the repository.
-     */
-    public Repository getRepository() {
-        return getSession().getRepository();
-    }
-
-    /**
-     * Return the user id.
-     */
-    public String getUserID() {
-        return getSession().getUserID();
-    }
-
-    /**
-     * Return the attribute.
-     */
-    public Object getAttribute(String name) {
-        return getSession().getAttribute(name);
-    }
-
-    /**
-     * Return the attribute names.
-     */
-    public String[] getAttributeNames() {
-        return getSession().getAttributeNames();
-    }
-
-    /**
-     * Return the workspace.
-     */
-    public Workspace getWorkspace() {
-        return getSession().getWorkspace();
-    }
-
-    /**
-     * Impersonate another user.
-     */
-    public Session impersonate(Credentials cred)
-            throws LoginException, RepositoryException {
-        throw new RepositoryException("impersonate(..) not supported in managed environment");
-    }
-
-    /**
-     * Return the root node.
-     */
-    public Node getRootNode()
-            throws RepositoryException {
-        return getSession().getRootNode();
-    }
-
-    /**
-     * Return node by UUID.
-     */
-    public Node getNodeByUUID(String uuid)
-            throws ItemNotFoundException, RepositoryException {
-        return getSession().getNodeByUUID(uuid);
-    }
-
-    /**
-     * Return the item.
-     */
-    public Item getItem(String arg0)
-            throws PathNotFoundException, RepositoryException {
-        return getSession().getItem(arg0);
-    }
-
-    /**
-     * Return true if item exists.
-     */
-    public boolean itemExists(String arg0)
-            throws RepositoryException {
-        return getSession().itemExists(arg0);
-    }
-
-    /**
-     * Move the item.
-     */
-    public void move(String arg0, String arg1)
-            throws ItemExistsException, PathNotFoundException, VersionException,
-            ConstraintViolationException, LockException, RepositoryException {
-        getSession().move(arg0, arg1);
-    }
-
-    /**
-     * Save the session.
-     */
-    public void save()
-            throws AccessDeniedException, ItemExistsException,
-            ConstraintViolationException, InvalidItemStateException, VersionException,
-            LockException, NoSuchNodeTypeException, RepositoryException {
-        getSession().save();
-    }
-
-    /**
-     * Refresh the session.
-     */
-    public void refresh(boolean arg0)
-            throws RepositoryException {
-        getSession().refresh(arg0);
-    }
-
-    /**
-     * Return true if it has pending changes.
-     */
-    public boolean hasPendingChanges()
-            throws RepositoryException {
-        return getSession().hasPendingChanges();
-    }
-
-    /**
-     * Return the value factory.
-     */
-    public ValueFactory getValueFactory()
-            throws UnsupportedRepositoryOperationException, RepositoryException {
-        return getSession().getValueFactory();
-    }
-
-    /**
-     * Check permission.
-     */
-    public void checkPermission(String arg0, String arg1)
-            throws AccessControlException, RepositoryException {
-        getSession().checkPermission(arg0, arg1);
-    }
-
-    /**
-     * Return the import content handler.
-     */
-    public ContentHandler getImportContentHandler(String arg0, int arg1)
-            throws PathNotFoundException, ConstraintViolationException, VersionException,
-            LockException, RepositoryException {
-        return getSession().getImportContentHandler(arg0, arg1);
-    }
-
-    /**
-     * Import XML content.
-     */
-    public void importXML(String arg0, InputStream arg1, int arg2)
-            throws IOException, PathNotFoundException, ItemExistsException,
-            ConstraintViolationException, VersionException, InvalidSerializedDataException,
-            LockException, RepositoryException {
-        getSession().importXML(arg0, arg1, arg2);
-    }
-
-    /**
-     * Export system view.
-     */
-    public void exportSystemView(String arg0, ContentHandler arg1, boolean arg2, boolean arg3)
-            throws PathNotFoundException, SAXException, RepositoryException {
-        getSession().exportSystemView(arg0, arg1, arg2, arg3);
-    }
-
-    /**
-     * Export system view.
-     */
-    public void exportSystemView(String arg0, OutputStream arg1, boolean arg2, boolean arg3)
-            throws IOException, PathNotFoundException, RepositoryException {
-        getSession().exportSystemView(arg0, arg1, arg2, arg3);
-    }
-
-    /**
-     * Export document view.
-     */
-    public void exportDocumentView(String arg0, ContentHandler arg1, boolean arg2, boolean arg3)
-            throws PathNotFoundException, SAXException, RepositoryException {
-        getSession().exportDocumentView(arg0, arg1, arg2, arg3);
-    }
-
-    /**
-     * Export document view.
-     */
-    public void exportDocumentView(String arg0, OutputStream arg1, boolean arg2, boolean arg3)
-            throws IOException, PathNotFoundException, RepositoryException {
-        getSession().exportDocumentView(arg0, arg1, arg2, arg3);
-    }
-
-    /**
-     * Set namespace prefix.
-     */
-    public void setNamespacePrefix(String arg0, String arg1)
-            throws NamespaceException, RepositoryException {
-        getSession().setNamespacePrefix(arg0, arg1);
-    }
-
-    /**
-     * Return namespace prefixes.
-     */
-    public String[] getNamespacePrefixes()
-            throws RepositoryException {
-        return getSession().getNamespacePrefixes();
-    }
-
-    /**
-     * Return namespace URI.
-     */
-    public String getNamespaceURI(String arg0)
-            throws NamespaceException, RepositoryException {
-        return getSession().getNamespaceURI(arg0);
-    }
-
-    /**
-     * Return namespace prefix.
-     */
-    public String getNamespacePrefix(String arg0)
-            throws NamespaceException, RepositoryException {
-        return getSession().getNamespacePrefix(arg0);
-    }
-
-    /**
-     * Logout the session.
-     */
-    public void logout() {
-        mc.closeHandle(this);
-    }
-
-    /**
-     * Return true if session is live.
-     */
-    public boolean isLive() {
-        return getSession().isLive();
-    }
-
-    /**
-     * Add lock token.
-     */
-    public void addLockToken(String arg0) {
-        getSession().addLockToken(arg0);
-    }
-
-    /**
-     * Return the lock tokens.
-     */
-    public String[] getLockTokens() {
-        return getSession().getLockTokens();
-    }
-
-    /**
-     * Remove lock token.
-     */
-    public void removeLockToken(String arg0) {
-        getSession().removeLockToken(arg0);
-    }
-}
diff --git a/contrib/jca/src/rar/META-INF/ra.xml b/contrib/jca/src/rar/META-INF/ra.xml
deleted file mode 100644
index 66db76d..0000000
--- a/contrib/jca/src/rar/META-INF/ra.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE connector PUBLIC
-    '-//Sun Microsystems, Inc.//DTD Connector 1.0//EN'
-    'http://java.sun.com/dtd/connector_1_0.dtd'>
-<connector>
-    <display-name>Jackrabbit JCR Adapter</display-name>
-    <vendor-name>Apache.org</vendor-name>
-    <spec-version>1.0</spec-version>
-    <eis-type>JCR Adapter</eis-type>
-    <version>1.0</version>
-    
-    <license>
-	<description>ASF</description>
-	<license-required>false</license-required>
-    </license>
-
-    <resourceadapter>
-	<managedconnectionfactory-class>org.apache.jackrabbit.jca.JCAManagedConnectionFactory</managedconnectionfactory-class>
-	<connectionfactory-interface>javax.jcr.Repository</connectionfactory-interface>
-	<connectionfactory-impl-class>org.apache.jackrabbit.jca.JCARepositoryHandle</connectionfactory-impl-class>
-	<connection-interface>javax.jcr.Session</connection-interface>
-	<connection-impl-class>org.apache.jackrabbit.jca.JCASessionHandle</connection-impl-class>
-	<transaction-support>XATransaction</transaction-support>
-	<config-property>
-	    <config-property-name>HomeDir</config-property-name>
-	    <config-property-type>java.lang.String</config-property-type>
-	</config-property>
-	<config-property>
-	    <config-property-name>ConfigFile</config-property-name>
-	    <config-property-type>java.lang.String</config-property-type>
-	</config-property>
-	<reauthentication-support>false</reauthentication-support>	
-    </resourceadapter>
-</connector>
-	   
\ No newline at end of file
diff --git a/contrib/jca/src/test/org/apache/jackrabbit/jca/test/AbstractTestCase.java b/contrib/jca/src/test/org/apache/jackrabbit/jca/test/AbstractTestCase.java
deleted file mode 100644
index 103f36c..0000000
--- a/contrib/jca/src/test/org/apache/jackrabbit/jca/test/AbstractTestCase.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.jca.test;
-
-import junit.framework.TestCase;
-import org.apache.jackrabbit.jca.JCAManagedConnectionFactory;
-
-import javax.jcr.Credentials;
-import javax.jcr.SimpleCredentials;
-
-/**
- * This implements the abstract test case.
- */
-public abstract class AbstractTestCase
-        extends TestCase {
-
-    /**
-     * Repository home directory.
-     */
-    public final static String JCR_HOME_DIR =
-            "applications/test";
-
-    /**
-     * Repository configuration file.
-     */
-    public final static String JCR_CONFIG_FILE =
-            "applications/test/repository.xml";
-
-    /**
-     * Default credentials.
-     */
-    public final static Credentials JCR_SUPERUSER =
-            new SimpleCredentials("superuser", new char[0]);
-
-    /**
-     * Anonymous credentials.
-     */
-    public final static Credentials JCR_ANONUSER =
-            new SimpleCredentials("anonymous", new char[0]);
-
-    /**
-     * Repository workspace.
-     */
-    public final static String JCR_WORKSPACE =
-            "default";
-
-    /**
-     * Managed connection factory.
-     */
-    protected JCAManagedConnectionFactory mcf;
-
-    /**
-     * Setup the test.
-     */
-    protected void setUp()
-            throws Exception {
-        // Construct the managed connection factory
-        this.mcf = new JCAManagedConnectionFactory();
-        this.mcf.setHomeDir("c:\\dev\\jcr");
-        this.mcf.setConfigFile("c:\\dev\\jcr\\repository.xml");
-    }
-}
diff --git a/contrib/jca/src/test/org/apache/jackrabbit/jca/test/ConnectionFactoryTest.java b/contrib/jca/src/test/org/apache/jackrabbit/jca/test/ConnectionFactoryTest.java
deleted file mode 100644
index cc1ac0d..0000000
--- a/contrib/jca/src/test/org/apache/jackrabbit/jca/test/ConnectionFactoryTest.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.jca.test;
-
-import org.apache.jackrabbit.jca.JCAConnectionRequestInfo;
-import org.apache.jackrabbit.jca.JCARepositoryHandle;
-import org.apache.jackrabbit.jca.JCASessionHandle;
-
-import javax.jcr.Repository;
-import javax.jcr.Session;
-import javax.naming.Referenceable;
-import javax.resource.spi.ManagedConnection;
-import java.io.Serializable;
-import java.util.HashSet;
-
-/**
- * This case executes tests on the connection factory.
- */
-public final class ConnectionFactoryTest
-        extends AbstractTestCase {
-
-    /**
-     * Test the connection factory allocation.
-     */
-    public void testAllocation()
-            throws Exception {
-
-        // Create the connection factory
-        Object cf = mcf.createConnectionFactory();
-        assertTrue(cf instanceof JCARepositoryHandle);
-        Repository repository = (Repository) cf;
-
-        // Open a new session
-        Session session = repository.login(JCR_SUPERUSER);
-        assertTrue(session != null);
-        assertTrue(session instanceof JCASessionHandle);
-
-        // Logout session
-        session.logout();
-    }
-
-    /**
-     * Test the connection matching.
-     */
-    public void testMatching()
-            throws Exception {
-
-        // Create connection request infos
-        JCAConnectionRequestInfo cri1 = new JCAConnectionRequestInfo(JCR_SUPERUSER, JCR_WORKSPACE);
-        JCAConnectionRequestInfo cri2 = new JCAConnectionRequestInfo(JCR_ANONUSER, JCR_WORKSPACE);
-
-        // Check if not same
-        assertNotSame(cri1, cri2);
-
-        // Allocate connections
-        ManagedConnection mc1 = mcf.createManagedConnection(null, cri1);
-        ManagedConnection mc2 = mcf.createManagedConnection(null, cri2);
-
-        // Check if not same
-        assertTrue(mc1 != mc2);
-
-        // Create a sef of connections
-        HashSet connectionSet = new HashSet();
-        connectionSet.add(mc1);
-        connectionSet.add(mc2);
-        
-        // Match the first connection
-        JCAConnectionRequestInfo cri3 = new JCAConnectionRequestInfo(cri1);
-        assertTrue((cri1 != cri3) && cri1.equals(cri3));
-        ManagedConnection mc3 = mcf.matchManagedConnections(connectionSet, null, cri3);
-        assertTrue(mc1 == mc3);
-
-        // Match the second connection
-        JCAConnectionRequestInfo cri4 = new JCAConnectionRequestInfo(cri2);
-        assertTrue((cri2 != cri4) && cri2.equals(cri4));
-        ManagedConnection mc4 = mcf.matchManagedConnections(connectionSet, null, cri4);
-        assertTrue(mc2 == mc4);
-    }
-
-    /**
-     * Test if the connection factory is serializable.
-     */
-    public void testSerializable()
-            throws Exception {
-
-        // Create the connection factory
-        Object cf = mcf.createConnectionFactory();
-        
-        // Check if serializable and referenceable
-        assertTrue(cf != null);
-        assertTrue(cf instanceof Serializable);
-        assertTrue(cf instanceof Referenceable);
-    }
-}
diff --git a/contrib/jcr-commands/CHANGES.txt b/contrib/jcr-commands/CHANGES.txt
deleted file mode 100644
index 8d6e8b0..0000000
--- a/contrib/jcr-commands/CHANGES.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-2005-10-01
- - naming and packaging reviewed
- - now commands only read parameters from the context 
-   because commands shouldn't have a state of their own
-   but use only the context.
- - i18n reorganized in one single resources file
- - batch mode added
- - cover most of jcr operations (versioning, locking, etc.)
- - commands simplified. Most commands don't have default values.
- - logging added
-
-2005-08-11
- - removed jmeter dependencies
- - added command line interface (o.a.j.chain.cli)
- - added CLI i18n support 
- - added info commands (ls, cat, etc.) (o.a.j.chain.info) 
- - added literal and context attributes to commands
- - added testing
- - added javadocs
diff --git a/contrib/jcr-commands/HEADER.txt b/contrib/jcr-commands/HEADER.txt
deleted file mode 100644
index 1c669de..0000000
--- a/contrib/jcr-commands/HEADER.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
\ No newline at end of file
diff --git a/contrib/jcr-commands/LICENSE.txt b/contrib/jcr-commands/LICENSE.txt
deleted file mode 100644
index d645695..0000000
--- a/contrib/jcr-commands/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/contrib/jcr-commands/README.txt b/contrib/jcr-commands/README.txt
deleted file mode 100644
index 401b670..0000000
--- a/contrib/jcr-commands/README.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-Overview
------------------
-JCR-commands contains a jcr command line client. It's 
-backed by a set of Apache Commons Chain commands that 
-perform operations on any JCR compliant repository. 
-
-For more information about using Commons Chain please refer 
-to http://jakarta.apache.org/commons/chain/
-
-Building
-------------------
-In order to buid the command line tool plus all the 
-dependencies in a single runnable jar, you can run 
-the maven plugin called "javaapp". 
-See http://maven-plugins.sourceforge.net/maven-javaapp-plugin/index.html
-
-USING
-------------------
-
-Run the command line tool built with javaapp plugin:
-  run java -jar jcr-commands-app-[version].jar
-
-Help on commands:
-  Type help and you'll get the full list of available commands.
-  Type help [command name] to get a detailed description of the given command.
-
-Starting jackrabbit:
-  In the following example the config file is under 
-  /repository/repository.xml and the repository home 
-  is under /repository.
-
-  startjackrabbit -config /repository/repository.xml -home /repository
-  login -u username -p password
-
-Benchmarking JCR
-------------------
-You will find a plugin for jmeter under "/jmeter-chain" that 
-will allow you to add commons chain commands to 
-jmeter in order to prepare custom test plans.
-
-IMPORTANT:
-Jmeter uses an older version of Commons-Collection. 
-Remember to replace it with a 3.x version.
-
-INSTRUCTIONS:
-1 - Install Jmeter.
-    see http://jakarta.apache.org/jmeter/.
-2 - build jmeter-chain-xx.jar and place it under "lib/ext" [1][2]. 
-3 - build jcr-commands-xx.jar and place it under "lib/ext". [2].
-4 - put jcr-commands and jmeter-chain dependencies under 
-    /lib [2]
-5 - Put your jcr implementation and all its dependencies 
-    under "/lib" [2]
-
-You'll find simple test plan examples under 
-"/benchmarking".
-
-[1] See /jmeter-chain/README.txt
-[2] The path is relative to the JMeter installation folder.
-   
\ No newline at end of file
diff --git a/contrib/jcr-commands/TODO.txt b/contrib/jcr-commands/TODO.txt
deleted file mode 100644
index e244af9..0000000
--- a/contrib/jcr-commands/TODO.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-- xdocs
-- javadocs
-- testing
-- review i18n resource file
-- replace the parser, it hardly works
-- friendly exception handling in interactive mode
-- review command syntax
\ No newline at end of file
diff --git a/contrib/jcr-commands/applications/test/repository.xml b/contrib/jcr-commands/applications/test/repository.xml
deleted file mode 100644
index b31f934..0000000
--- a/contrib/jcr-commands/applications/test/repository.xml
+++ /dev/null
@@ -1,241 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE Repository [
-    <!--
-        the Repository element configures a repository instance;
-        individual workspaces of the repository are configured through
-        separate configuration files called workspace.xml which are
-        located in a subfolder of the workspaces root directory
-        (see Workspaces element).
-
-        it consists of
-
-            a FileSystem element (the virtual file system
-            used by the repository to persist global state such as
-            registered namespaces, custom node types, etc..
-
-            a Security element that specifies the name of the app-entry
-            in the JAAS config and the access manager
-
-            a Workspaces element that specifies to the location of
-            workspaces root directory and the name of default workspace
-
-            a Workspace element that is used as a workspace configuration
-            template; it is used to create the initial workspace if there's
-            no workspace yet and for creating additional workspaces through
-            the api
-
-            a SearchIndex element that is used for configuring per workspace
-            Indexing-related settings
-
-            a Versioning element that is used for configuring
-            versioning-related settings
-    -->
-    <!ELEMENT Repository (FileSystem,Security,Workspaces,Workspace,Versioning,SearchIndex?)>
-
-    <!--
-        a virtual file system
-    -->
-    <!ELEMENT FileSystem (param*)>
-    <!ATTLIST FileSystem
-      class CDATA #REQUIRED>
-
-    <!--
-        the Security element specifies the name (appName attribute)
-        of the JAAS configuration app-entry for this repository. 
-
-        it also specifies the access manager to be used (AccessManager element).
-    -->
-    <!ELEMENT Security (AccessManager, LoginModule?)>
-    <!ATTLIST Security
-      appName CDATA #REQUIRED>
-
-    <!--
-        the AccessManager element configures the access manager to be used by
-        this repository instance; the class attribute specifies the FQN of the
-        class implementing the AccessManager interface
-    -->
-    <!ELEMENT AccessManager (param*)>
-    <!ATTLIST AccessManager
-      class CDATA #REQUIRED>
-
-    <!--
-        generic parameter (name/value pair)
-    -->
-    <!ELEMENT param EMPTY>
-    <!ATTLIST param
-      name CDATA #REQUIRED
-      value CDATA #REQUIRED>
-
-     <!--
-        the LoginModule element optionally specifies a JAAS login module to
-        authenticate users. This feature allows the use of Jackrabbit in a
-        non-JAAS environment.
-    -->
-    <!ELEMENT LoginModule (param*)>
-    <!ATTLIST LoginModule
-      class CDATA #REQUIRED>
-
-   <!--
-        the Workspaces element specifies the workspaces root directory
-        (rootPath attribute) and the name of the default workspace
-        (defaultWorkspace attribute).
-
-        individual workspaces are configured through individual workspace.xml
-        files located in a subfolder each of the workspaces root directory.
-    -->
-    <!ELEMENT Workspaces EMPTY>
-    <!ATTLIST Workspaces
-      rootPath CDATA #REQUIRED
-      defaultWorkspace CDATA #REQUIRED>
-
-    <!--
-        the Workspace element serves as a workspace configuration template;
-        it is used to create the initial workspace if there's no workspace yet
-        and for creating additional workspaces through the api
-    -->
-    <!ELEMENT Workspace (FileSystem,PersistenceManager,SearchIndex?)>
-    <!ATTLIST Workspace
-      name CDATA #REQUIRED>
-
-    <!--
-        the PersistenceManager element configures the persistence manager
-        to be used for the workspace; the class attribute specifies the
-        FQN of the class implementing the PersistenceManager interface
-    -->
-    <!ELEMENT PersistenceManager (param*)>
-    <!ATTLIST PersistenceManager
-      class CDATA #REQUIRED>
-
-    <!--
-        the SearchIndex element specifies the locaction of the search index
-        (used by the QueryHandler); the class attribute specifies the
-        FQN of the class implementing the QueryHandler interface.
-    -->
-    <!ELEMENT SearchIndex (param*,FileSystem?)>
-    <!ATTLIST SearchIndex
-      class CDATA #REQUIRED>
-
-    <!--
-        the Versioning element configures the persistence manager
-        to be used for persisting version state
-    -->
-    <!ELEMENT Versioning (FileSystem, PersistenceManager)>
-    <!ATTLIST Versioning
-      rootPath CDATA #REQUIRED
-    >
-]>
-<!-- Example Repository Configuration File -->
-<Repository>
-    <!--
-        virtual file system where the repository stores global state
-        (e.g. registered namespaces, custom node types, etc.)
-    -->
-    <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
-        <param name="path" value="${rep.home}/repository"/>
-    </FileSystem>
-
-    <!--
-        security configuration
-    -->
-    <Security appName="Jackrabbit">
-        <!--
-            access manager:
-            class: FQN of class implementing the AccessManager interface
-        -->
-        <AccessManager class="org.apache.jackrabbit.core.security.SimpleAccessManager">
-            <!-- <param name="config" value="${rep.home}/access.xml"/> -->
-        </AccessManager>
-
-        <LoginModule class="org.apache.jackrabbit.core.security.SimpleLoginModule">
-           <!-- anonymous user name ('anonymous' is the default value) -->
-           <param name="anonymousId" value="anonymous"/>
-        </LoginModule>
-    </Security>
-
-    <!--
-        location of workspaces root directory and name of default workspace
-    -->
-    <Workspaces rootPath="${rep.home}/workspaces" defaultWorkspace="default"/>
-    <!--
-        workspace configuration template:
-        used to create the initial workspace if there's no workspace yet
-    -->
-    <Workspace name="${wsp.name}">
-        <!--
-            virtual file system of the workspace:
-            class: FQN of class implementing the FileSystem interface
-        -->
-        <FileSystem class="com.day.jackrabbit.fs.cq.CQFileSystem">
-            <param name="path" value="${wsp.home}/wspStore.dat"/>
-            <param name="autoRepair" value="false"/>
-            <param name="blockSize" value="128"/>
-            <param name="autoSync" value="false"/>
-        </FileSystem>
-        <!--FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
-            <param name="path" value="${wsp.home}"/>
-        </FileSystem-->
-        <!--
-            persistence manager of the workspace:
-            class: FQN of class implementing the PersistenceManager interface
-        -->
-        <PersistenceManager class="org.apache.jackrabbit.core.state.xml.XMLPersistenceManager"/>
-        <!--
-        <PersistenceManager class="org.apache.jackrabbit.core.state.mem.InMemPersistenceManager">
-            <param name="initialCapacity" value="100000"/>
-            <param name="loadFactor" value="0.3"/>
-            <param name="persistent" value="true"/>
-        </PersistenceManager>
-        -->
-        <!-- PersistenceManager class="org.apache.jackrabbit.core.state.obj.ObjectPersistenceManager"/-->
-        <!--
-            Search index and the file system it uses.
-            class: FQN of class implementing the QueryHandler interface
-        -->
-        <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
-            <param name="path" value="${wsp.home}/index"/>
-        </SearchIndex>
-    </Workspace>
-
-    <!--
-        Configures the versioning
-    -->
-    <Versioning rootPath="${rep.home}/version">
-        <!--
-            Configures the filesystem to use for versioning for the respective
-            persistence manager
-        -->
-        <FileSystem class="com.day.jackrabbit.fs.cq.CQFileSystem">
-            <param name="path" value="${rep.home}/version/version.dat"/>
-            <param name="autoRepair" value="false"/>
-            <param name="blockSize" value="128"/>
-            <param name="autoSync" value="false"/>
-        </FileSystem>
-    
-		<!--FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
-			<param name="path" value="${rep.home}/version"/>
-		</FileSystem-->
-        
-        <!--
-            Configures the perisistence manager to be used for persisting version state.
-            Please note that the current versioning implementation is based on
-            a 'normal' persistence manager, but this could change in future
-            implementations.
-        -->
-        <PersistenceManager class="org.apache.jackrabbit.core.state.xml.XMLPersistenceManager"/>
-
-    </Versioning>
-
-    <!--
-        Search index for content that is shared repository wide
-        (/jcr:system tree, contains mainly versions)
-        
-        The same parameters are supported as in the search index configuration
-        inside the workspace definition element.
-        
-        This element is optional. If omitted, the /jcr:system tree will not be
-        indexed and no results will be returned for that tree!
-    -->
-    <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
-        <param name="path" value="${rep.home}/repository/index"/>
-    </SearchIndex>
-</Repository>
diff --git a/contrib/jcr-commands/checkstyle-suppressions.xml b/contrib/jcr-commands/checkstyle-suppressions.xml
deleted file mode 100644
index b3b6d2f..0000000
--- a/contrib/jcr-commands/checkstyle-suppressions.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE suppressions PUBLIC
-    "-//Puppy Crawl//DTD Suppressions 1.0//EN"
-    "http://www.puppycrawl.com/dtds/suppressions_1_0.dtd">
-
-<suppressions>
-    <!-- 
-      Suppressions for generated JCRQL parser
-    -->
-    <suppress checks=".*" files="(JJT)?JCRSQL.*.java"/>
-    <!-- Suppressions for the generated XPath parser -->
-    <suppress checks=".*" files="(JJT)?XPath.*.java"/>
-</suppressions>
diff --git a/contrib/jcr-commands/checkstyle.xml b/contrib/jcr-commands/checkstyle.xml
deleted file mode 100644
index 47fc8ec..0000000
--- a/contrib/jcr-commands/checkstyle.xml
+++ /dev/null
@@ -1,171 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                       as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-  -->
-  
-<!DOCTYPE module PUBLIC
-    "-//Puppy Crawl//DTD Check Configuration 1.1//EN"
-    "http://www.puppycrawl.com/dtds/configuration_1_1.dtd">
-
-<!--
-  Checkstyle checks configured for Maven.
--->
-
-<module name="Checker">
-
-    <!-- Checks that a package.html file exists for each package.     -->
-    <!-- See http://checkstyle.sf.net/config_javadoc.html#PackageHtml -->
-    <module name="PackageHtml"/>
-
-    <!-- Checks whether files end with a new line.                        -->
-    <!-- See http://checkstyle.sf.net/config_misc.html#NewlineAtEndOfFile -->
-    <module name="NewlineAtEndOfFile"/>
-
-    <!-- Checks that property files contain the same keys.         -->
-    <!-- See http://checkstyle.sf.net/config_misc.html#Translation -->
-    <module name="Translation"/>
-
-    <module name="TreeWalker">
-
-        <property name="cacheFile" value="${checkstyle.cache.file}"/>
-
-        <!-- ************************************************************** -->
-        <!-- Checks that are different from the sun coding conventions ones -->
-        <!-- ************************************************************** -->
-
-        <module name="Header">
-            <property name="headerFile" value="${basedir}/HEADER.txt"/>
-        </module>
-        <!-- <property name="tabWidth" value="4"/> -->
-        <module name="LeftCurly">
-          <property name="option" value="eol"/>
-        </module>
-        <module name="LineLength">
-          <property name="max" value="132"/>
-          <property name="ignorePattern" value="\* \$"/>
-        </module>
-        <module name="MethodLength">
-          <property name="max" value="175"/>
-        </module>
-        <module name="ConstantName">
-          <property name="format" value="log|^[a-zA-Z][a-zA-Z0-9_]*$"/>
-        </module>
-
-        <!-- ************************************************************** -->
-        <!-- Default Sun coding conventions checks                          -->
-        <!-- ************************************************************** -->
-
-        <!-- Checks for Javadoc comments.                     -->
-        <!-- See http://checkstyle.sf.net/config_javadoc.html -->
-        <module name="JavadocMethod"/>
-        <module name="JavadocType"/>
-        <module name="JavadocVariable"/>
-
-        <!-- Checks for Naming Conventions.                  -->
-        <!-- See http://checkstyle.sf.net/config_naming.html -->
-        <module name="LocalFinalVariableName"/>
-        <module name="LocalVariableName"/>
-        <module name="MethodName"/>
-        <module name="PackageName"/>
-        <module name="ParameterName"/>
-        <module name="StaticVariableName"/>
-        <module name="TypeName"/>
-        <module name="MemberName"/>
-
-        <!-- Checks for imports                              -->
-        <!-- See http://checkstyle.sf.net/config_import.html -->
-        <module name="AvoidStarImport"/>
-        <module name="IllegalImport"/> <!-- defaults to sun.* packages -->
-        <module name="RedundantImport"/>
-        <module name="UnusedImports"/>
-
-
-        <!-- Checks for Size Violations.                    -->
-        <!-- See http://checkstyle.sf.net/config_sizes.html -->
-        <module name="FileLength"/>
-        <module name="ParameterNumber"/>
-
-
-        <!-- Checks for whitespace                               -->
-        <!-- See http://checkstyle.sf.net/config_whitespace.html -->
-        <module name="EmptyForIteratorPad"/>
-        <module name="NoWhitespaceAfter"/>
-        <module name="NoWhitespaceBefore"/>
-        <module name="OperatorWrap"/>
-        <module name="TabCharacter"/>
-        <module name="WhitespaceAfter"/>
-        <module name="WhitespaceAround"/>
-
-
-        <!-- Modifier Checks                                    -->
-        <!-- See http://checkstyle.sf.net/config_modifiers.html -->
-        <module name="ModifierOrder"/>
-        <module name="RedundantModifier"/>
-
-
-        <!-- Checks for blocks. You know, those {}'s         -->
-        <!-- See http://checkstyle.sf.net/config_blocks.html -->
-        <module name="AvoidNestedBlocks"/>     
-        <module name="NeedBraces"/>
-
-        <!-- Checks for common coding problems               -->
-        <!-- See http://checkstyle.sf.net/config_coding.html -->
-        <!-- <module name="AvoidInlineConditionals"/> -->      <!-- DISABLED-->
-        <module name="DoubleCheckedLocking"/>
-        <module name="EqualsHashCode"/>
-        <module name="IllegalInstantiation"/>
-        <module name="InnerAssignment"/>
-        <module name="MissingSwitchDefault"/>
-        <module name="RedundantThrows">
-            <property name="allowUnchecked" value="true"/>   <!-- DISABLED -->
-            <property name="allowSubclasses" value="true"/>   <!-- DISABLED -->
-        </module>
-        <module name="SimplifyBooleanExpression"/>
-        <module name="SimplifyBooleanReturn"/>
-
-        <!-- Checks for class design                         -->
-        <!-- See http://checkstyle.sf.net/config_design.html -->
-        <module name="DesignForExtension">
-            <property name="severity" value="ignore"/>   <!-- DISABLED -->
-        </module>
-        <module name="HideUtilityClassConstructor"/>
-        <module name="InterfaceIsType"/>
-        <module name="VisibilityModifier">
-            <!-- Protected member variables are widely used in Jackrabbit -->
-            <property name="protectedAllowed" value="true"/>
-        </module>
-
-
-        <!-- Miscellaneous other checks.                   -->
-        <!-- See http://checkstyle.sf.net/config_misc.html -->
-        <module name="ArrayTypeStyle"/>
-        <module name="FinalParameters">
-            <property name="severity" value="ignore"/>   <!-- DISABLED -->
-        </module>
-        <module name="GenericIllegalRegexp">
-            <property name="format" value="\s+$"/>
-            <property name="message" value="Line has trailing spaces."/>
-        </module>
-        <module name="TodoComment"/>
-        <module name="UpperEll"/>
-
-    </module>
-    
-    <module name="SuppressionFilter">
-        <property name="file" value="checkstyle-suppressions.xml"/>
-    </module>    
-
-</module>
diff --git a/contrib/jcr-commands/jmeter-chain/HEADER.txt b/contrib/jcr-commands/jmeter-chain/HEADER.txt
deleted file mode 100644
index 1c669de..0000000
--- a/contrib/jcr-commands/jmeter-chain/HEADER.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
\ No newline at end of file
diff --git a/contrib/jcr-commands/jmeter-chain/LICENSE.txt b/contrib/jcr-commands/jmeter-chain/LICENSE.txt
deleted file mode 100644
index d645695..0000000
--- a/contrib/jcr-commands/jmeter-chain/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/contrib/jcr-commands/jmeter-chain/README.txt b/contrib/jcr-commands/jmeter-chain/README.txt
deleted file mode 100644
index 76b6cd4..0000000
--- a/contrib/jcr-commands/jmeter-chain/README.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-Overview
------------------
-
-This project contains:
-
-1. JMeter plugin for running Commons Chain commands.
-2. JMeter function backed by Commons Jexl. See javadocs. 
-
-Dependencies not included in JMeter
------------------
-Add the following libraries to /lib
-
-- commons-chain 
-- commons-beanutils
-- commons-jexl
-- commons-collections. Jackrabbit uses a newer version of commons Collections.
-  Replace the jar included in JMeter with collections 3.1
-
- 
-Installation
------------------
- - Build the jar file and place it under /lib/ext.
- - Build a jar file with your custom Chain commands
- - Add the following properties to /org/apache/jmeter/resources/messages.properties
-   in order to see the Chain labels correctly.
-   1 - chain_config_title=Chain configuration
-   2 - chain_request=Chain request
-
diff --git a/contrib/jcr-commands/jmeter-chain/checkstyle-suppressions.xml b/contrib/jcr-commands/jmeter-chain/checkstyle-suppressions.xml
deleted file mode 100644
index b3b6d2f..0000000
--- a/contrib/jcr-commands/jmeter-chain/checkstyle-suppressions.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE suppressions PUBLIC
-    "-//Puppy Crawl//DTD Suppressions 1.0//EN"
-    "http://www.puppycrawl.com/dtds/suppressions_1_0.dtd">
-
-<suppressions>
-    <!-- 
-      Suppressions for generated JCRQL parser
-    -->
-    <suppress checks=".*" files="(JJT)?JCRSQL.*.java"/>
-    <!-- Suppressions for the generated XPath parser -->
-    <suppress checks=".*" files="(JJT)?XPath.*.java"/>
-</suppressions>
diff --git a/contrib/jcr-commands/jmeter-chain/checkstyle.xml b/contrib/jcr-commands/jmeter-chain/checkstyle.xml
deleted file mode 100644
index 47fc8ec..0000000
--- a/contrib/jcr-commands/jmeter-chain/checkstyle.xml
+++ /dev/null
@@ -1,171 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                       as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-  -->
-  
-<!DOCTYPE module PUBLIC
-    "-//Puppy Crawl//DTD Check Configuration 1.1//EN"
-    "http://www.puppycrawl.com/dtds/configuration_1_1.dtd">
-
-<!--
-  Checkstyle checks configured for Maven.
--->
-
-<module name="Checker">
-
-    <!-- Checks that a package.html file exists for each package.     -->
-    <!-- See http://checkstyle.sf.net/config_javadoc.html#PackageHtml -->
-    <module name="PackageHtml"/>
-
-    <!-- Checks whether files end with a new line.                        -->
-    <!-- See http://checkstyle.sf.net/config_misc.html#NewlineAtEndOfFile -->
-    <module name="NewlineAtEndOfFile"/>
-
-    <!-- Checks that property files contain the same keys.         -->
-    <!-- See http://checkstyle.sf.net/config_misc.html#Translation -->
-    <module name="Translation"/>
-
-    <module name="TreeWalker">
-
-        <property name="cacheFile" value="${checkstyle.cache.file}"/>
-
-        <!-- ************************************************************** -->
-        <!-- Checks that are different from the sun coding conventions ones -->
-        <!-- ************************************************************** -->
-
-        <module name="Header">
-            <property name="headerFile" value="${basedir}/HEADER.txt"/>
-        </module>
-        <!-- <property name="tabWidth" value="4"/> -->
-        <module name="LeftCurly">
-          <property name="option" value="eol"/>
-        </module>
-        <module name="LineLength">
-          <property name="max" value="132"/>
-          <property name="ignorePattern" value="\* \$"/>
-        </module>
-        <module name="MethodLength">
-          <property name="max" value="175"/>
-        </module>
-        <module name="ConstantName">
-          <property name="format" value="log|^[a-zA-Z][a-zA-Z0-9_]*$"/>
-        </module>
-
-        <!-- ************************************************************** -->
-        <!-- Default Sun coding conventions checks                          -->
-        <!-- ************************************************************** -->
-
-        <!-- Checks for Javadoc comments.                     -->
-        <!-- See http://checkstyle.sf.net/config_javadoc.html -->
-        <module name="JavadocMethod"/>
-        <module name="JavadocType"/>
-        <module name="JavadocVariable"/>
-
-        <!-- Checks for Naming Conventions.                  -->
-        <!-- See http://checkstyle.sf.net/config_naming.html -->
-        <module name="LocalFinalVariableName"/>
-        <module name="LocalVariableName"/>
-        <module name="MethodName"/>
-        <module name="PackageName"/>
-        <module name="ParameterName"/>
-        <module name="StaticVariableName"/>
-        <module name="TypeName"/>
-        <module name="MemberName"/>
-
-        <!-- Checks for imports                              -->
-        <!-- See http://checkstyle.sf.net/config_import.html -->
-        <module name="AvoidStarImport"/>
-        <module name="IllegalImport"/> <!-- defaults to sun.* packages -->
-        <module name="RedundantImport"/>
-        <module name="UnusedImports"/>
-
-
-        <!-- Checks for Size Violations.                    -->
-        <!-- See http://checkstyle.sf.net/config_sizes.html -->
-        <module name="FileLength"/>
-        <module name="ParameterNumber"/>
-
-
-        <!-- Checks for whitespace                               -->
-        <!-- See http://checkstyle.sf.net/config_whitespace.html -->
-        <module name="EmptyForIteratorPad"/>
-        <module name="NoWhitespaceAfter"/>
-        <module name="NoWhitespaceBefore"/>
-        <module name="OperatorWrap"/>
-        <module name="TabCharacter"/>
-        <module name="WhitespaceAfter"/>
-        <module name="WhitespaceAround"/>
-
-
-        <!-- Modifier Checks                                    -->
-        <!-- See http://checkstyle.sf.net/config_modifiers.html -->
-        <module name="ModifierOrder"/>
-        <module name="RedundantModifier"/>
-
-
-        <!-- Checks for blocks. You know, those {}'s         -->
-        <!-- See http://checkstyle.sf.net/config_blocks.html -->
-        <module name="AvoidNestedBlocks"/>     
-        <module name="NeedBraces"/>
-
-        <!-- Checks for common coding problems               -->
-        <!-- See http://checkstyle.sf.net/config_coding.html -->
-        <!-- <module name="AvoidInlineConditionals"/> -->      <!-- DISABLED-->
-        <module name="DoubleCheckedLocking"/>
-        <module name="EqualsHashCode"/>
-        <module name="IllegalInstantiation"/>
-        <module name="InnerAssignment"/>
-        <module name="MissingSwitchDefault"/>
-        <module name="RedundantThrows">
-            <property name="allowUnchecked" value="true"/>   <!-- DISABLED -->
-            <property name="allowSubclasses" value="true"/>   <!-- DISABLED -->
-        </module>
-        <module name="SimplifyBooleanExpression"/>
-        <module name="SimplifyBooleanReturn"/>
-
-        <!-- Checks for class design                         -->
-        <!-- See http://checkstyle.sf.net/config_design.html -->
-        <module name="DesignForExtension">
-            <property name="severity" value="ignore"/>   <!-- DISABLED -->
-        </module>
-        <module name="HideUtilityClassConstructor"/>
-        <module name="InterfaceIsType"/>
-        <module name="VisibilityModifier">
-            <!-- Protected member variables are widely used in Jackrabbit -->
-            <property name="protectedAllowed" value="true"/>
-        </module>
-
-
-        <!-- Miscellaneous other checks.                   -->
-        <!-- See http://checkstyle.sf.net/config_misc.html -->
-        <module name="ArrayTypeStyle"/>
-        <module name="FinalParameters">
-            <property name="severity" value="ignore"/>   <!-- DISABLED -->
-        </module>
-        <module name="GenericIllegalRegexp">
-            <property name="format" value="\s+$"/>
-            <property name="message" value="Line has trailing spaces."/>
-        </module>
-        <module name="TodoComment"/>
-        <module name="UpperEll"/>
-
-    </module>
-    
-    <module name="SuppressionFilter">
-        <property name="file" value="checkstyle-suppressions.xml"/>
-    </module>    
-
-</module>
diff --git a/contrib/jcr-commands/jmeter-chain/project.properties b/contrib/jcr-commands/jmeter-chain/project.properties
deleted file mode 100644
index b16788b..0000000
--- a/contrib/jcr-commands/jmeter-chain/project.properties
+++ /dev/null
@@ -1,101 +0,0 @@
-#  Copyright 2003-2005 The Apache Software Foundation or its licensors,
-#                      as applicable
-#
-#  Licensed under the Apache License, Version 2.0 (the "License");
-#  you may not use this file except in compliance with the License.
-#  You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-#  distributed under the License is distributed on an "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#  See the License for the specific language governing permissions and
-#  limitations under the License.
-
-######################################################################
-# Apache Central Repository
-######################################################################
-maven.repo.central=www.apache.org
-maven.repo.central.directory=/www/www.apache.org/dist/java-repository
-maven.remote.group=apcvs
-maven.changelog.factory = org.apache.maven.svnlib.SvnChangeLogFactory
-
-######################################################################
-# JUnit Testing
-######################################################################
-maven.test.failure = false
-maven.junit.fork=true
-#maven.junit.sysproperties=org.xml.sax.driver java.security.auth.login.config
-maven.junit.sysproperties=org.xml.sax.driver
-org.xml.sax.driver=org.apache.xerces.parsers.SAXParser
-#java.security.auth.login.config=applications/test/jaas.config
-
-
-#If you wish to skip tests when doing builds, uncomment
-# maven.test.skip = true
-
-######################################################################
-# Checkstyle
-######################################################################
-# maven.checkstyle.properties= checkstyle.xml
-# maven.linkcheck.enable=false 
-
-######################################################################
-# JavaDoc
-#
-# javadoc urls can be added here, multiple urls are appended using a comma
-#
-# maven.javadoc.links = http://foo/bar/api,\
-#                       http://flim/flam/api/
-######################################################################
-maven.javadoc.links=http://java.sun.com/j2se/1.4.2/docs/api/
-maven.javadoc.author=false
-maven.javadoc.version=false
-
-######################################################################
-# Other opts
-######################################################################
-# uncomment the next line to work in offline mode (no jar download & no linkcheck)
-#maven.mode.online=
-
-maven.compile.debug=on
-maven.compile.deprecation=off
-maven.compile.optimize=off
-maven.compile.source=1.4
-maven.compile.target=1.4
-
-maven.jarResources.basedir=src/java
-maven.jar.excludes=**/package.html
-
-# Location of the generated query language parsers. Needed for
-# the Maven Eclipse plugin to automatically locate the generated
-# source files. Note that this value matches the hardcoded path
-# in the Maven JavaCC plugin. Therefore, do not change this value!
-maven.gen.src=${maven.build.dir}/generated-src/main
-
-# specifying additional remote repository for downloading dependencies 
-# not available at www.ibiblio.org/maven/
-maven.repo.remote = http://www.ibiblio.org/maven/
-
-######################################################################
-# Site L&F
-######################################################################
-# maven.xdoc.jsl=
-maven.xdoc.date=
-maven.xdoc.poweredby.image=maven-feather.png
-maven.xdoc.version=${pom.currentVersion}
-maven.xdoc.developmentProcessUrl=http://incubator.apache.org/projects/jackrabbit.html
-maven.changelog.range=60
-maven.changelog.factory=org.apache.maven.svnlib.SvnChangeLogFactory
-
-# ------------------------------------------------------------------------
-# M A V E N  J A R  O V E R R I D E
-# ------------------------------------------------------------------------
-#maven.jar.override = on
-#maven.jar.jcr = ${basedir}/lib/jcr.jar
-
-######################################################################
-# Site Deploy (into ../jackrabbit-site for checkout on incubator.apache.org)
-######################################################################
-maven.site.deploy.method=fs
diff --git a/contrib/jcr-commands/jmeter-chain/project.xml b/contrib/jcr-commands/jmeter-chain/project.xml
deleted file mode 100644
index 93b7bb1..0000000
--- a/contrib/jcr-commands/jmeter-chain/project.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<project>

-  <pomVersion>3</pomVersion>

-  <artifactId>jmeter-chain</artifactId>

-  <name>JMeter chain</name>

-  <groupId>org.apache.jackrabbit</groupId>

-  <currentVersion>1.0-dev</currentVersion>

-  <organization />

-  <inceptionYear>2005</inceptionYear>

-  <logo>/images/logo.gif</logo>

-  <repository />

-  <mailingLists>

-    <mailingList>

-      <name>${pom.name} Dev List</name>

-    </mailingList>

-    <mailingList>

-      <name>${pom.name} User List</name>

-    </mailingList>

-  </mailingLists>

-  <dependencies>

-    <dependency>

-      <groupId>commons-chain</groupId>

-      <artifactId>commons-chain</artifactId>

-      <version>1.0</version>

-      <type>jar</type>

-    </dependency>

-    <!--
-      cqfs-jackrabbit and cqfs are optional runtime dependencies 
-      (an alternative FileSystem implementation); 
-      commons-logging is a dependency of cqfs
-    -->

-    <dependency>

-      <groupId>commons-collections</groupId>

-      <artifactId>commons-collections</artifactId>

-      <version>3.1</version>

-      <type>jar</type>

-    </dependency>

-    <dependency>

-      <groupId>commons-beanutils</groupId>

-      <artifactId>commons-beanutils</artifactId>

-      <version>1.7.0</version>

-      <type>jar</type>

-    </dependency>

-    <dependency>

-      <groupId>jmeter</groupId>

-      <artifactId>ApacheJMeter_core</artifactId>

-      <version>2.0.3</version>

-      <type>jar</type>

-      <url>http://jakarta.apache.org/jmeter/</url>

-    </dependency>

-    <dependency>

-      <groupId>jmeter</groupId>

-      <artifactId>ApacheJMeter_java</artifactId>

-      <version>2.0.3</version>

-      <type>jar</type>

-      <url>http://jakarta.apache.org/jmeter/</url>

-    </dependency>

-    <dependency>

-      <groupId>jmeter</groupId>

-      <artifactId>jorphan</artifactId>

-      <version>2.0.3</version>

-      <type>jar</type>

-    </dependency>

-    <dependency>

-      <groupId>avalon</groupId>

-      <artifactId>avalon-logkit</artifactId>

-      <version>1.2</version>

-      <type>jar</type>

-      <url>http://avalon.apache.org</url>

-    </dependency>

-    <dependency>

-      <groupId>commons-jexl</groupId>

-      <artifactId>commons-jexl</artifactId>

-      <version>1.0</version>

-      <type>jar</type>

-    </dependency>

-  </dependencies>

-  <build>

-    <sourceDirectory>src/java</sourceDirectory>

-    <unitTestSourceDirectory>src/test</unitTestSourceDirectory>

-    <unitTest>

-      <includes>

-        <include>**/*Test.java</include>

-      </includes>

-    </unitTest>

-  </build>

-</project>

-

diff --git a/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/functions/Jexl.java b/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/functions/Jexl.java
deleted file mode 100644
index b3c0b2b..0000000
--- a/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/functions/Jexl.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jmeter.functions;
-
-import java.io.Serializable;
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.List;
-
-import org.apache.commons.jexl.Expression;
-import org.apache.commons.jexl.ExpressionFactory;
-import org.apache.commons.jexl.JexlContext;
-import org.apache.commons.jexl.JexlHelper;
-import org.apache.jmeter.engine.util.CompoundVariable;
-import org.apache.jmeter.samplers.SampleResult;
-import org.apache.jmeter.samplers.Sampler;
-import org.apache.jorphan.logging.LoggingManager;
-import org.apache.log.Logger;
-
-/**
- * A function which understands Commons JEXL. <br>
- * 
- * The following variables are set before the script is executed: <br>
- * <ul>
- * <li>ctx - the current JMeter context variable</li>
- * <li>vars - the current JMeter variables</li>
- * <li>threadName - the threadName</li>
- * <li>sampler - the current Sampler, if any</li>
- * <li>sampleResult - the current SampleResult, if any</li>
- * </ul>
- */
-public class Jexl extends AbstractFunction implements Serializable
-{
-    /**
-     * <code>serialVersionUID</code>
-     */
-    private static final long serialVersionUID = 3546359539474968625L;
-
-    private static Logger log = LoggingManager.getLoggerForClass();
-
-    private static final String KEY = "__jexl";
-
-    private static final List desc = new LinkedList();
-
-    static
-    {
-        desc.add("expression");
-    }
-
-    private Object[] values;
-
-    public String execute(SampleResult result, Sampler sampler)
-            throws InvalidVariableException
-    {
-        String str = "";
-
-        CompoundVariable var = (CompoundVariable) values[0];
-        String exp = var.getRawParameters();
-
-        try
-        {
-            Expression e = ExpressionFactory.createExpression(exp);
-            JexlContext jc = JexlHelper.createContext();
-            jc.getVars().put("ctx", sampler.getThreadContext());
-            jc.getVars().put("vars", getVariables());
-            jc.getVars().put("threadName", sampler.getThreadName());
-            jc.getVars().put("sampler", sampler);
-            jc.getVars().put("sampleResult", result);
-
-            // Now evaluate the expression, getting the result
-            Object o = e.evaluate(jc);
-            if (o != null)
-            {
-                str = o.toString();
-            }
-        } catch (Exception e)
-        {
-            log.error("An error occurred while evaluating the expression \""
-                    + exp + "\"");
-        }
-        return str;
-    }
-
-    public List getArgumentDesc()
-    {
-        return desc;
-    }
-
-    public String getReferenceKey()
-    {
-        return KEY;
-    }
-
-    public void setParameters(Collection parameters)
-            throws InvalidVariableException
-    {
-        values = parameters.toArray();
-        if (values.length != 1)
-        {
-            throw new InvalidVariableException("it only accepts one parameter");
-        }
-    }
-
-}
diff --git a/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/protocol/java/config/gui/ChainConfigGui.java b/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/protocol/java/config/gui/ChainConfigGui.java
deleted file mode 100644
index 32ebddd..0000000
--- a/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/protocol/java/config/gui/ChainConfigGui.java
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- * Copyright 2002-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * 
- */
-
-package org.apache.jmeter.protocol.java.config.gui;
-
-import java.awt.BorderLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import javax.swing.JComboBox;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-
-import org.apache.commons.beanutils.BeanUtils;
-import org.apache.commons.chain.Command;
-import org.apache.jmeter.config.Argument;
-import org.apache.jmeter.config.Arguments;
-import org.apache.jmeter.config.gui.AbstractConfigGui;
-import org.apache.jmeter.config.gui.ArgumentsPanel;
-import org.apache.jmeter.gui.util.HorizontalPanel;
-import org.apache.jmeter.protocol.java.config.JavaConfig;
-import org.apache.jmeter.protocol.java.sampler.JavaSampler;
-import org.apache.jmeter.testelement.TestElement;
-import org.apache.jmeter.testelement.property.PropertyIterator;
-import org.apache.jmeter.util.JMeterUtils;
-import org.apache.jorphan.logging.LoggingManager;
-import org.apache.jorphan.reflect.ClassFinder;
-import org.apache.log.Logger;
-
-/**
- * The <code>ChainConfigGui</code> class provides the user interface for the
- * {@link JavaConfig}object.
- * 
- * @author Edgar Poce
- */
-public class ChainConfigGui extends AbstractConfigGui implements ActionListener {
-	/**
-     * <code>serialVersionUID</code>
-     */
-    private static final long serialVersionUID = 3545799879432615731L;
-
-    /** Logging */
-	private static transient Logger log = LoggingManager.getLoggerForClass();
-
-	/** The name of the classnameCombo JComboBox */
-	private static final String CLASSNAMECOMBO = "chainclassnamecombo";
-
-	/** A combo box allowing the user to choose a test class. */
-	private JComboBox classnameCombo;
-
-	/**
-	 * Indicates whether or not the name of this component should be displayed
-	 * as part of the GUI. If true, this is a standalone component. If false, it
-	 * is embedded in some other component.
-	 */
-	private boolean displayName = true;
-
-	/** A panel allowing the user to set arguments for this test. */
-	private ArgumentsPanel argsPanel;
-
-	/**
-	 * Create a new JavaConfigGui as a standalone component.
-	 */
-	public ChainConfigGui() {
-		this(true);
-	}
-
-	/**
-	 * Create a new JavaConfigGui as either a standalone or an embedded
-	 * component.
-	 * 
-	 * @param displayNameField
-	 *            tells whether the component name should be displayed with the
-	 *            GUI. If true, this is a standalone component. If false, this
-	 *            component is embedded in some other component.
-	 */
-	public ChainConfigGui(boolean displayNameField) {
-		this.displayName = displayNameField;
-		init();
-	}
-
-	public String getLabelResource() {
-		return "chain_config_title";
-	}
-
-	/**
-	 * Initialize the GUI components and layout.
-	 */
-	protected void init() {
-		setLayout(new BorderLayout(0, 5));
-
-		if (displayName) {
-			setBorder(makeBorder());
-			add(makeTitlePanel(), BorderLayout.NORTH);
-		}
-
-		JPanel classnameRequestPanel = new JPanel(new BorderLayout(0, 5));
-		classnameRequestPanel.add(createClassnamePanel(), BorderLayout.NORTH);
-		classnameRequestPanel.add(createParameterPanel(), BorderLayout.CENTER);
-
-		add(classnameRequestPanel, BorderLayout.CENTER);
-	}
-
-	/**
-	 * Create a panel with GUI components allowing the user to select a test
-	 * class.
-	 * 
-	 * @return a panel containing the relevant components
-	 */
-	private JPanel createClassnamePanel() {
-		List possibleClasses = null;
-
-		try {
-			// Find all the classes which implement the JavaSamplerClient
-			// interface.
-			possibleClasses = ClassFinder.findClassesThatExtend(JMeterUtils
-					.getSearchPaths(), new Class[] { Command.class });
-
-			// Remove the JavaConfig class from the list since it only
-			// implements the interface for error conditions.
-
-			possibleClasses.remove(Command.class.getName()
-					+ "$ErrorSamplerClient");
-		} catch (Exception e) {
-			log.debug("Exception getting interfaces.", e);
-		}
-
-		JLabel label = new JLabel(JMeterUtils
-				.getResString("protocol_java_classname"));
-
-		classnameCombo = new JComboBox(possibleClasses.toArray());
-		classnameCombo.addActionListener(this);
-		classnameCombo.setName(CLASSNAMECOMBO);
-		classnameCombo.setEditable(false);
-		label.setLabelFor(classnameCombo);
-
-		HorizontalPanel panel = new HorizontalPanel();
-		panel.add(label);
-		panel.add(classnameCombo);
-
-		return panel;
-	}
-
-	/**
-	 * Handle action events for this component. This method currently handles
-	 * events for the classname combo box.
-	 * 
-	 * @param evt
-	 *            the ActionEvent to be handled
-	 */
-public void actionPerformed(ActionEvent evt)
-    {
-        if (evt.getSource() == classnameCombo)
-        {
-            String className =
-                ((String) classnameCombo.getSelectedItem()).trim();
-            try
-            {
-                Command command = (Command) Class.forName(
-                            className,
-                            true,
-                            Thread.currentThread().getContextClassLoader()
-                        ).newInstance();
-
-                Arguments currArgs = new Arguments();
-                argsPanel.modifyTestElement(currArgs);
-                Map currArgsMap = currArgs.getArgumentsAsMap();
-
-                Arguments newArgs = new Arguments();
-                Arguments testParams = new Arguments();
-                try
-                {
-                	Map descrip =  BeanUtils.describe(command) ;
-                	Iterator iter = descrip.entrySet().iterator() ;
-                	while (iter.hasNext()) {
-						Map.Entry entry = (Map.Entry)iter.next();
-						if (!entry.getKey().equals("type") && !entry.getKey().equals("class")) {
-							String key = entry.getKey().toString() ;
-							String value = ((entry.getValue()==null)?"":entry.getValue().toString()); 
-							testParams.addArgument(new Argument(key, value)) ;
-						}
-						
-					}
-                }
-                catch (AbstractMethodError e)
-                {
-                    log.warn ("JavaSamplerClient doesn't implement "
-                            + "getDefaultParameters.  Default parameters won't "
-                            + "be shown.  Please update your client class: "
-                            + className);
-                }
-                
-                if (testParams != null)
-                {
-                    PropertyIterator i = testParams.getArguments().iterator();
-                    while (i.hasNext())
-                    {
-                        Argument arg = (Argument) i.next().getObjectValue();
-                        String name = arg.getName();
-                        String value = arg.getValue();
-
-                        // If a user has set parameters in one test, and then
-                        // selects a different test which supports the same
-                        // parameters, those parameters should have the same
-                        // values that they did in the original test.
-                        if (currArgsMap.containsKey(name))
-                        {
-                            String newVal = (String) currArgsMap.get(name);
-                            if (newVal != null
-                                    && newVal.length() > 0)
-                            {
-                                value = newVal;
-                            }
-                        }
-                        newArgs.addArgument(name, value);
-                    }
-                }
-
-                argsPanel.configure(newArgs);
-            }
-            catch (Exception e)
-            {
-                log.error("Error getting argument list for " + className, e);
-            }
-        }
-    }
-	/**
-	 * Create a panel containing components allowing the user to provide
-	 * arguments to be passed to the test class instance.
-	 * 
-	 * @return a panel containing the relevant components
-	 */
-	private JPanel createParameterPanel() {
-		argsPanel = new ArgumentsPanel(JMeterUtils.getResString("paramtable"));
-		return argsPanel;
-	}
-
-	/* Overrides AbstractJMeterGuiComponent.configure(TestElement) */
-	public void configure(TestElement config) {
-		super.configure(config);
-
-		argsPanel.configure((Arguments) config.getProperty(
-				JavaSampler.ARGUMENTS).getObjectValue());
-
-		classnameCombo.setSelectedItem(config
-				.getPropertyAsString(JavaSampler.CLASSNAME));
-	}
-
-	/* Implements JMeterGUIComponent.createTestElement() */
-	public TestElement createTestElement() {
-        JavaConfig config = new JavaConfig();
-		modifyTestElement(config);
-		return config;
-	}
-
-	/* Implements JMeterGUIComponent.modifyTestElement(TestElement) */
-	public void modifyTestElement(TestElement config) {
-		configureTestElement(config);
-		((JavaConfig) config).setArguments((Arguments) argsPanel
-				.createTestElement());
-        if (classnameCombo.getSelectedItem()!=null ) {
-            ((JavaConfig) config).setClassname(classnameCombo.getSelectedItem()
-                .toString());
-        }
-	}
-}
diff --git a/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/protocol/java/control/gui/ChainTestSamplerGui.java b/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/protocol/java/control/gui/ChainTestSamplerGui.java
deleted file mode 100644
index d4c8d67..0000000
--- a/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/protocol/java/control/gui/ChainTestSamplerGui.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright 2002-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * 
- */
-package org.apache.jmeter.protocol.java.control.gui;
-
-import java.awt.BorderLayout;
-
-import org.apache.jmeter.protocol.java.config.JavaConfig;
-import org.apache.jmeter.protocol.java.config.gui.ChainConfigGui;
-import org.apache.jmeter.protocol.java.sampler.ChainSampler;
-import org.apache.jmeter.samplers.gui.AbstractSamplerGui;
-import org.apache.jmeter.testelement.TestElement;
-
-/**
- * Sample GUI for Commons Chain Commands
- * 
- * @author Edgar Poce
- */
-public class ChainTestSamplerGui extends AbstractSamplerGui
-{
-    /**
-     * Comment for <code>serialVersionUID</code>
-     */
-    private static final long serialVersionUID = 3256721766930788918L;
-    
-    /** Panel containing the configuration options. */
-    private ChainConfigGui javaPanel = null;
-
-    /**
-     * Constructor for JavaTestSamplerGui
-     */
-    public ChainTestSamplerGui()
-    {
-        super();
-        init();
-    }
-
-    public String getLabelResource()
-    {
-        return "chain_request";
-    }
-
-    /**
-     * Initialize the GUI components and layout.
-     */
-    private void init()
-    {
-        setLayout(new BorderLayout(0, 5));
-        setBorder(makeBorder());
-
-        add(makeTitlePanel(), BorderLayout.NORTH);
-
-        javaPanel = new ChainConfigGui(false);
-
-        add(javaPanel, BorderLayout.CENTER);
-    }
-
-    /* Implements JMeterGuiComponent.createTestElement() */
-    public TestElement createTestElement()
-    {
-        ChainSampler sampler = new ChainSampler();
-        modifyTestElement(sampler);
-        return sampler;
-    }
-
-    /* Implements JMeterGuiComponent.modifyTestElement(TestElement) */
-    public void modifyTestElement(TestElement sampler)
-    {
-        sampler.clear();
-        JavaConfig config = (JavaConfig) javaPanel.createTestElement();
-        configureTestElement(sampler);
-        sampler.addTestElement(config);
-    }
-
-    /* Overrides AbstractJMeterGuiComponent.configure(TestElement) */
-    public void configure(TestElement el)
-    {
-        super.configure(el);
-        javaPanel.configure(el);
-    }
-}
diff --git a/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/protocol/java/sampler/ChainSampler.java b/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/protocol/java/sampler/ChainSampler.java
deleted file mode 100644
index 28d927e..0000000
--- a/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/protocol/java/sampler/ChainSampler.java
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
- * Copyright 2002-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * 
- */
-package org.apache.jmeter.protocol.java.sampler;
-
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.commons.beanutils.BeanUtils;
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.jmeter.config.Arguments;
-import org.apache.jmeter.engine.event.LoopIterationEvent;
-import org.apache.jmeter.samplers.AbstractSampler;
-import org.apache.jmeter.samplers.Entry;
-import org.apache.jmeter.samplers.SampleResult;
-import org.apache.jmeter.testelement.TestListener;
-import org.apache.jmeter.testelement.property.TestElementProperty;
-import org.apache.jorphan.logging.LoggingManager;
-import org.apache.log.Logger;
-
-/**
- * A sampler for executing custom Commons Chain Commands
- * 
- * @author Edgar Poce
- */
-public class ChainSampler extends AbstractSampler implements TestListener
-{
-    /**
-     * Comment for <code>serialVersionUID</code>
-     */
-    private static final long serialVersionUID = 3618986663356151348L;
-
-    /**
-     * chainCtx key
-     */
-    public static final String CHAINS_CONTEXT = "chainCtx";
-
-    /**
-     * The Command instance used by this sampler to actually perform the sample.
-     */
-    private transient Command command = null;
-
-    /**
-     * Logging
-     */
-    private static transient Logger log = LoggingManager.getLoggerForClass();
-
-    /**
-     * Set used to register all active JavaSamplers. This is used so that the
-     * samplers can be notified when the test ends.
-     */
-    private static Set allSamplers = new HashSet();
-
-    /**
-     * Create a JavaSampler.
-     */
-    public ChainSampler()
-    {
-        setArguments(new Arguments());
-        synchronized (allSamplers)
-        {
-            allSamplers.add(this);
-        }
-    }
-
-    /**
-     * Set the arguments (parameters) for the JavaSamplerClient to be executed
-     * with.
-     * 
-     * @param args
-     *            the new arguments. These replace any existing arguments.
-     */
-    public void setArguments(Arguments args)
-    {
-        setProperty(new TestElementProperty(JavaSampler.ARGUMENTS, args));
-    }
-
-    /**
-     * Get the arguments (parameters) for the JavaSamplerClient to be executed
-     * with.
-     * 
-     * @return the arguments
-     */
-    public Arguments getArguments()
-    {
-        return (Arguments) getProperty(JavaSampler.ARGUMENTS).getObjectValue();
-    }
-
-    /**
-     * Releases Command Client.
-     */
-    private void releaseClient()
-    {
-        this.command = null;
-    }
-
-    /**
-     * Sets the Classname attribute of the JavaConfig object
-     * 
-     * @param classname
-     *            the new Classname value
-     */
-    public void setClassname(String classname)
-    {
-        setProperty(JavaSampler.CLASSNAME, classname);
-    }
-
-    /**
-     * Gets the Classname attribute of the JavaConfig object
-     * 
-     * @return the Classname value
-     */
-    public String getClassname()
-    {
-        return getPropertyAsString(JavaSampler.CLASSNAME);
-    }
-
-    /**
-     * Performs a test sample.
-     * 
-     * The <code>sample()</code> method retrieves the reference to the command
-     * and calls its <code>execute()</code> method.
-     * 
-     * @param entry
-     *            the Entry for this sample
-     * @return test SampleResult
-     */
-    public SampleResult sample(Entry entry)
-    {
-        SampleResult results = new SampleResult();
-        try
-        {
-            if (command == null)
-            {
-                log.debug(whoAmI() + "Creating Command");
-                createCommand();
-            }
-
-            updateCommand();
-            results.setSampleLabel(this.getName());
-            Context ctx = new JMeterContextAdapter(getThreadContext());
-            results.sampleStart();
-            command.execute(ctx);
-            results.sampleEnd();
-            results.setSuccessful(true);
-        } catch (Exception e)
-        {
-            results.setSuccessful(false);
-            log.error("Unable to run test", e);
-        }
-        return results;
-    }
-
-    /**
-     * Returns reference to <code>Command</code>.
-     * 
-     * @return Command reference.
-     */
-    private Command createCommand() throws Exception
-    {
-        Class javaClass = Class.forName(getClassname().trim(), false, Thread
-            .currentThread().getContextClassLoader());
-
-        command = (Command) javaClass.newInstance();
-
-        if (log.isDebugEnabled())
-        {
-            log.debug(whoAmI() + "\tCreated:\t" + getClassname() + "@"
-                    + Integer.toHexString(command.hashCode()));
-        }
-
-        return command;
-    }
-
-    /**
-     * Updates the command attributes
-     * 
-     * @throws Exception
-     */
-    private void updateCommand() throws Exception
-    {
-        Map descrip = BeanUtils.describe(command);
-        Iterator iter = descrip.keySet().iterator();
-        while (iter.hasNext())
-        {
-            String key = (String) iter.next();
-            Object value = this.getArguments().getArgumentsAsMap().get(key);
-            if (value != null && value.toString().length() > 0)
-            {
-                BeanUtils.setProperty(command, key, value);
-            }
-        }
-    }
-
-    /**
-     * Retrieves reference to JavaSamplerClient.
-     * 
-     * Convience method used to check for null reference without actually
-     * creating a JavaSamplerClient
-     * 
-     * @return reference to JavaSamplerClient NOTUSED private JavaSamplerClient
-     *         retrieveJavaClient() { return javaClient; }
-     */
-
-    /**
-     * Generate a String identifier of this instance for debugging purposes.
-     * 
-     * @return a String identifier for this sampler instance
-     */
-    private String whoAmI()
-    {
-        StringBuffer sb = new StringBuffer();
-        sb.append(Thread.currentThread().getName());
-        sb.append("@");
-        sb.append(Integer.toHexString(hashCode()));
-        return sb.toString();
-    }
-
-    // TestListener implementation
-    /* Implements TestListener.testStarted() */
-    public void testStarted()
-    {
-        log.debug(whoAmI() + "\ttestStarted");
-    }
-
-    /* Implements TestListener.testStarted(String) */
-    public void testStarted(String host)
-    {
-        log.debug(whoAmI() + "\ttestStarted(" + host + ")");
-    }
-
-    /**
-     * Method called at the end of the test. This is called only on one instance
-     * of ChainSampler. This method will loop through all of the other samplers
-     * which have been registered (automatically in the constructor) and notify
-     * them that the test has ended, allowing the ChainSamplerClients to
-     * cleanup.
-     */
-    public void testEnded()
-    {
-        log.debug(whoAmI() + "\ttestEnded");
-        synchronized (allSamplers)
-        {
-            Iterator i = allSamplers.iterator();
-            while (i.hasNext())
-            {
-                ChainSampler sampler = (ChainSampler) i.next();
-                sampler.releaseClient();
-                i.remove();
-            }
-        }
-    }
-
-    /* Implements TestListener.testEnded(String) */
-    public void testEnded(String host)
-    {
-        testEnded();
-    }
-
-    /* Implements TestListener.testIterationStart(LoopIterationEvent) */
-    public void testIterationStart(LoopIterationEvent event)
-    {
-    }
-}
diff --git a/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/protocol/java/sampler/JMeterContextAdapter.java b/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/protocol/java/sampler/JMeterContextAdapter.java
deleted file mode 100644
index 86c4a92..0000000
--- a/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/protocol/java/sampler/JMeterContextAdapter.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jmeter.protocol.java.sampler;
-
-import java.util.Collection;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.commons.chain.Context;
-import org.apache.jmeter.threads.JMeterContext;
-
-/**
- * <code>JMeterContext</code> to commons chain <code>Context</code> adapter
- */
-class JMeterContextAdapter implements Context
-{
-    private JMeterContext ctx;
-
-    /**
-     * private constructor
-     */
-    private JMeterContextAdapter()
-    {
-        super();
-    }
-
-    /**
-     * private constructor
-     */
-    public JMeterContextAdapter(JMeterContext ctx)
-    {
-        super();
-        this.ctx = ctx;
-    }
-
-    public void clear()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    public boolean containsKey(Object key)
-    {
-        return get(key) != null;
-    }
-
-    public boolean containsValue(Object value)
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    public Set entrySet()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    public Object get(Object key)
-    {
-        if (key == null || !(key instanceof String))
-        {
-            throw new IllegalArgumentException("Only String keys are supported");
-        }
-        return ctx.getVariables().getObject((String) key);
-    }
-
-    public boolean isEmpty()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    public Set keySet()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    public Object put(Object key, Object value)
-    {
-        if (key == null || !(key instanceof String))
-        {
-            throw new IllegalArgumentException("Only String keys are supported");
-        }
-        Object stale = ctx.getVariables().getObject((String) key);
-        ctx.getVariables().putObject((String) key, value);
-        return stale;
-    }
-
-    public void putAll(Map t)
-    {
-        ctx.getVariables().putAll(t);
-    }
-
-    public Object remove(Object key)
-    {
-        if (key == null || !(key instanceof String))
-        {
-            throw new IllegalArgumentException("Only String keys are supported");
-        }
-        Object stale = ctx.getVariables().getObject((String) key);
-        ctx.getVariables().remove((String) key);
-        return stale;
-    }
-
-    public int size()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    public Collection values()
-    {
-        throw new UnsupportedOperationException();
-    }
-}
diff --git a/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/protocol/java/test/SleepChainTest.java b/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/protocol/java/test/SleepChainTest.java
deleted file mode 100644
index a177e33..0000000
--- a/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/protocol/java/test/SleepChainTest.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2002-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * 
- */
-package org.apache.jmeter.protocol.java.test;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-
-/**
- * <p>
- * The <code>SleepChainTest</code> class is a simple example class of a Chain
- * command for a JMeter Java protocol client. The class implements the
- * <code>Command</code> interface.
- * </p>
- * <p>
- * During each sample, this client will sleep for some amount of time. The
- * amount of time to sleep is determined from the single parameter SleepTime
- * </p>
- * 
- */
-public class SleepChainTest implements Command
-{
-    /** time to sleep */
-    private long time = 1000 ;
-
-    public boolean execute(Context arg0) throws Exception
-    {
-        Thread.sleep(time);
-        return false;
-    }
-
-    public long getTime()
-    {
-        return time;
-    }
-
-    public void setTime(long time)
-    {
-        this.time = time;
-    }
-}
diff --git a/contrib/jcr-commands/maven.xml b/contrib/jcr-commands/maven.xml
deleted file mode 100644
index 79cba29..0000000
--- a/contrib/jcr-commands/maven.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<!--
-   Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                       as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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
-    default="jar:jar"
-    xmlns:deploy="deploy"
-    xmlns:j="jelly:core"
-    xmlns:ant="jelly:ant"
-    xmlns:maven="jelly:maven">
-
-    <!-- Additionally cleans the test data created -->
-    <preGoal name="test">
-        <attainGoal name="removerepo"/>
-    </preGoal>
-
-    <!-- deletes the test data -->
-    <goal name="removerepo">
-        <ant:delete dir="applications/test/repository"/>
-    </goal>
-
-</project>
\ No newline at end of file
diff --git a/contrib/jcr-commands/project.properties b/contrib/jcr-commands/project.properties
deleted file mode 100644
index 09af853..0000000
--- a/contrib/jcr-commands/project.properties
+++ /dev/null
@@ -1,106 +0,0 @@
-#  Copyright 2003-2005 The Apache Software Foundation or its licensors,
-#                      as applicable
-#
-#  Licensed under the Apache License, Version 2.0 (the "License");
-#  you may not use this file except in compliance with the License.
-#  You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-#  distributed under the License is distributed on an "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#  See the License for the specific language governing permissions and
-#  limitations under the License.
-
-######################################################################
-# Apache Central Repository
-######################################################################
-maven.repo.central=www.apache.org
-maven.repo.central.directory=/www/www.apache.org/dist/java-repository
-maven.remote.group=apcvs
-maven.changelog.factory = org.apache.maven.svnlib.SvnChangeLogFactory
-
-######################################################################
-# JUnit Testing
-######################################################################
-maven.test.failure = false
-maven.junit.fork=true
-#maven.junit.sysproperties=org.xml.sax.driver java.security.auth.login.config
-maven.junit.sysproperties=org.xml.sax.driver
-org.xml.sax.driver=org.apache.xerces.parsers.SAXParser
-#java.security.auth.login.config=applications/test/jaas.config
-
-
-#If you wish to skip tests when doing builds, uncomment
-# maven.test.skip = true
-
-######################################################################
-# Checkstyle
-######################################################################
-maven.checkstyle.properties= checkstyle.xml
-maven.linkcheck.enable=false
-
-######################################################################
-# JavaDoc
-#
-# javadoc urls can be added here, multiple urls are appended using a comma
-#
-# maven.javadoc.links = http://foo/bar/api,\
-#                       http://flim/flam/api/
-######################################################################
-maven.javadoc.links=http://java.sun.com/j2se/1.4.2/docs/api/
-maven.javadoc.author=false
-maven.javadoc.version=false
-
-######################################################################
-# Other opts
-######################################################################
-# uncomment the next line to work in offline mode (no jar download & no linkcheck)
-#maven.mode.online=
-
-maven.compile.debug=on
-maven.compile.deprecation=off
-maven.compile.optimize=off
-maven.compile.source=1.4
-maven.compile.target=1.4
-
-maven.jarResources.basedir=src/java
-maven.jar.excludes=**/package.html
-
-# Location of the generated query language parsers. Needed for
-# the Maven Eclipse plugin to automatically locate the generated
-# source files. Note that this value matches the hardcoded path
-# in the Maven JavaCC plugin. Therefore, do not change this value!
-maven.gen.src=${maven.build.dir}/generated-src/main
-
-# specifying additional remote repository for downloading dependencies
-# not available at www.ibiblio.org/maven/
-maven.repo.remote = http://www.ibiblio.org/maven/,http://www.day.com/maven/
-
-######################################################################
-# Site L&F
-######################################################################
-# maven.xdoc.jsl=
-maven.xdoc.date=
-maven.xdoc.poweredby.image=maven-feather.png
-maven.xdoc.version=${pom.currentVersion}
-maven.xdoc.developmentProcessUrl=http://incubator.apache.org/projects/jackrabbit.html
-maven.changelog.range=60
-maven.changelog.factory=org.apache.maven.svnlib.SvnChangeLogFactory
-
-# ------------------------------------------------------------------------
-# M A V E N  J A R  O V E R R I D E
-# ------------------------------------------------------------------------
-#maven.jar.override = on
-#maven.jar.jcr = ${basedir}/lib/jcr.jar
-
-######################################################################
-# Site Deploy (into ../jackrabbit-site for checkout on incubator.apache.org)
-######################################################################
-maven.site.deploy.method=fs
-
-######################################################################
-# Javaapp plugin
-######################################################################
-maven.javaapp.mainclass=org.apache.jackrabbit.command.cli.JcrClient
\ No newline at end of file
diff --git a/contrib/jcr-commands/project.xml b/contrib/jcr-commands/project.xml
deleted file mode 100644
index e1892f7..0000000
--- a/contrib/jcr-commands/project.xml
+++ /dev/null
@@ -1,197 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project>
-    <pomVersion>3</pomVersion>
-    <artifactId>jcr-commands</artifactId>
-    <name>JCR commands</name>
-    <groupId>org.apache.jackrabbit</groupId>
-    <currentVersion>1.0-SNAPSHOT</currentVersion>
-    <inceptionYear>2005</inceptionYear>
-    <logo>/images/logo.gif</logo>
-    <mailingLists>
-        <mailingList>
-            <name>${pom.name} Dev List</name>
-        </mailingList>
-        <mailingList>
-            <name>${pom.name} User List</name>
-        </mailingList>
-    </mailingLists>
-    <dependencies>
-        <dependency>
-            <groupId>commons-chain</groupId>
-            <artifactId>commons-chain</artifactId>
-            <version>1.0</version>
-            <type>jar</type>
-        </dependency>
-        <dependency>
-            <groupId>lucene</groupId>
-            <artifactId>lucene</artifactId>
-            <version>1.4.3</version>
-            <type>jar</type>
-        </dependency>
-        <!--
-      cqfs-jackrabbit and cqfs are optional runtime dependencies
-      (an alternative FileSystem implementation);
-      commons-logging is a dependency of cqfs
-    -->
-        <dependency>
-            <groupId>cqfs</groupId>
-            <artifactId>cqfs</artifactId>
-            <version>3.5.6</version>
-            <type>jar</type>
-        </dependency>
-        <dependency>
-            <groupId>concurrent</groupId>
-            <artifactId>concurrent</artifactId>
-            <version>1.3.4</version>
-            <type>jar</type>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>3.8.1</version>
-            <type>jar</type>
-        </dependency>
-        <dependency>
-            <groupId>commons-collections</groupId>
-            <artifactId>commons-collections</artifactId>
-            <version>3.1</version>
-            <type>jar</type>
-        </dependency>
-        <dependency>
-            <groupId>javacc</groupId>
-            <artifactId>javacc</artifactId>
-            <version>3.2</version>
-            <type>jar</type>
-        </dependency>
-        <dependency>
-            <groupId>log4j</groupId>
-            <artifactId>log4j</artifactId>
-            <version>1.2.8</version>
-            <type>jar</type>
-        </dependency>
-        <dependency>
-            <groupId>commons-logging</groupId>
-            <artifactId>commons-logging</artifactId>
-            <version>1.0</version>
-            <type>jar</type>
-        </dependency>
-        <dependency>
-            <groupId>commons-cli</groupId>
-            <artifactId>commons-cli</artifactId>
-            <version>1.0</version>
-            <type>jar</type>
-        </dependency>
-        <dependency>
-            <groupId>commons-beanutils</groupId>
-            <artifactId>commons-beanutils</artifactId>
-            <version>1.7.0</version>
-            <type>jar</type>
-        </dependency>
-        <dependency>
-            <groupId>commons-digester</groupId>
-            <artifactId>commons-digester</artifactId>
-            <version>1.7</version>
-            <type>jar</type>
-        </dependency>
-        <dependency>
-            <groupId>geronimo-spec</groupId>
-            <artifactId>geronimo-spec-jta</artifactId>
-            <version>1.0-M1</version>
-            <type>jar</type>
-        </dependency>
-        <dependency>
-            <groupId>xerces</groupId>
-            <artifactId>xercesImpl</artifactId>
-            <version>2.6.2</version>
-            <type>jar</type>
-        </dependency>
-        <dependency>
-            <groupId>xerces</groupId>
-            <artifactId>xmlParserAPIs</artifactId>
-            <version>2.0.2</version>
-            <type>jar</type>
-        </dependency>
-        <dependency>
-            <groupId>cqfs</groupId>
-            <artifactId>cqfs-jackrabbit</artifactId>
-            <version>3.5.6</version>
-            <type>jar</type>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.jackrabbit</groupId>
-            <artifactId>jackrabbit</artifactId>
-            <version>1.0-SNAPSHOT</version>
-            <type>jar</type>
-        </dependency>
-        <dependency>
-            <groupId>jsr170</groupId>
-            <artifactId>jcr</artifactId>
-            <version>1.0</version>
-            <type>jar</type>
-            <url>http://www.day.com/maven/jsr170/jars/jcr-1.0.jar</url>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.jackrabbit</groupId>
-            <artifactId>jcr-rmi</artifactId>
-            <version>1.0-SNAPSHOT</version>
-            <type>jar</type>
-        </dependency>
-    </dependencies>
-    <build>
-        <sourceDirectory>src/java</sourceDirectory>
-        <unitTestSourceDirectory>src/test</unitTestSourceDirectory>
-        <unitTest>
-            <includes>
-                <include>**/TestAll.java</include>
-            </includes>
-            <resources>
-                <resource>
-                    <directory>src/test</directory>
-                    <includes>
-                        <include>**/*.xml</include>
-                        <include>*.dtd</include>
-                        <include>*.properties</include>
-                    </includes>
-                    <filtering>false</filtering>
-                </resource>
-                <resource>
-                    <directory>src/java</directory>
-                    <includes>
-                        <include>*.xml</include>
-                        <include>*.dtd</include>
-                        <include>*.properties</include>
-                    </includes>
-                    <filtering>false</filtering>
-                </resource>
-            </resources>
-        </unitTest>
-        <resources>
-            <resource>
-                <directory>src/java</directory>
-                <includes>
-                    <include>**/*.properties</include>
-                    <include>**/*.dtd</include>
-                    <include>**/*.xml</include>
-                </includes>
-                <filtering>false</filtering>
-            </resource>
-        </resources>
-    </build>
-  <reports>
-        <report>maven-changelog-plugin</report>
-        <report>maven-changes-plugin</report>
-        <report>maven-checkstyle-plugin</report>
-      <!-- <report>maven-clover-plugin</report> -->
-        <!-- <report>maven-developer-activity-plugin</report> -->
-        <!-- <report>maven-file-activity-plugin</report> -->
-        <report>maven-javadoc-plugin</report>
-        <!-- <report>maven-jellydoc-plugin</report> -->
-        <report>maven-junit-report-plugin</report>
-        <report>maven-jxr-plugin</report>
-        <report>maven-license-plugin</report>
-        <!-- <report>maven-linkcheck-plugin</report> -->
-        <!-- <report>maven-statcvs-plugin</report> -->
-        <report>maven-tasklist-plugin</report>
-        <report>maven-faq-plugin</report>
-  </reports>
-</project>
diff --git a/contrib/jcr-commands/src/cli/connect.jcr b/contrib/jcr-commands/src/cli/connect.jcr
deleted file mode 100644
index 1c591b5..0000000
--- a/contrib/jcr-commands/src/cli/connect.jcr
+++ /dev/null
@@ -1,2 +0,0 @@
-connect rmi://localhost/jcr/repository

-login user password
\ No newline at end of file
diff --git a/contrib/jcr-commands/src/cli/embedded.jcr b/contrib/jcr-commands/src/cli/embedded.jcr
deleted file mode 100644
index 7beef04..0000000
--- a/contrib/jcr-commands/src/cli/embedded.jcr
+++ /dev/null
@@ -1,2 +0,0 @@
-start ../../applications/test/repository.xml ../../applications/test/repository

-login user password
\ No newline at end of file
diff --git a/contrib/jcr-commands/src/java/META-INF/MANIFEST b/contrib/jcr-commands/src/java/META-INF/MANIFEST
deleted file mode 100644
index 33e4fc3..0000000
--- a/contrib/jcr-commands/src/java/META-INF/MANIFEST
+++ /dev/null
@@ -1,2 +0,0 @@
-Manifest-Version: 1.0

-Main-Class: org.apache.jackrabbit.command.cli.JcrClient

diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/CommandException.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/CommandException.java
deleted file mode 100644
index 71cbed3..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/CommandException.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command;
-
-import java.text.MessageFormat;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-/**
- * JCR command Exception
- */
-public class CommandException extends Exception {
-    /** Resource bundle */
-    private static ResourceBundle bundle = CommandHelper.getBundle();
-
-    /**
-     * Exception arguments
-     */
-    private Object[] arguments;
-
-    /**
-     * Comment for <code>serialVersionUID</code>
-     */
-    private static final long serialVersionUID = 3978426922931860275L;
-
-    /**
-     * @param message
-     *        the message
-     */
-    public CommandException(String message) {
-        super(message);
-    }
-
-    /**
-     * @param message
-     *        the message
-     * @param arguments
-     *        the arguments
-     */
-    public CommandException(String message, Object[] arguments) {
-        super(message);
-        this.arguments = arguments;
-    }
-
-    /**
-     * @param message
-     *        the message
-     * @param cause
-     *        the cause
-     */
-    public CommandException(String message, Throwable cause) {
-        super(message, cause);
-    }
-
-    /**
-     * @param message
-     *        the message
-     * @param cause
-     *        the cause
-     * @param arguments
-     *        the arguments
-     */
-    public CommandException(String message, Throwable cause, Object[] arguments) {
-        super(message, cause);
-        this.arguments = arguments;
-    }
-
-    /**
-     * @return the localized message
-     */
-    public String getLocalizedMessage() {
-        try {
-            if (this.arguments == null) {
-                return bundle.getString(this.getMessage());
-            } else {
-                MessageFormat f = new MessageFormat("");
-                f.applyPattern(bundle.getString(this.getMessage()));
-                return f.format(this.arguments);
-            }
-        } catch (MissingResourceException e) {
-            return this.getMessage();
-        }
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/CommandHelper.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/CommandHelper.java
deleted file mode 100644
index ee45e5b..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/CommandHelper.java
+++ /dev/null
@@ -1,361 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command;
-
-import java.io.PrintWriter;
-import java.util.Iterator;
-import java.util.ResourceBundle;
-
-import javax.jcr.Item;
-import javax.jcr.Node;
-import javax.jcr.NodeIterator;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.PropertyIterator;
-import javax.jcr.Repository;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-
-import org.apache.commons.chain.Context;
-import org.apache.commons.collections.IteratorUtils;
-
-/**
- * Utility class for getting and setting context attributes.
- */
-public final class CommandHelper {
-    /** bundle */
-    private static ResourceBundle bundle = ResourceBundle
-        .getBundle(CommandHelper.class.getPackage().getName() + ".resources");
-
-    /** Current node key */
-    private static final String CURRENT_NODE_KEY = "jcr.current";
-
-    /** repository key */
-    private static final String REPOSITORY_KEY = "jcr.repository";
-
-    /** session key */
-    private static final String SESSION_KEY = "jcr.session";
-
-    /** session key */
-    private static final String OUTPUT_KEY = "jcr.output";
-
-    /**
-     * should never get called
-     */
-    private CommandHelper() {
-        super();
-    }
-
-    /**
-     * Sets the current <code>PrintWriter</code>.
-     * @param ctx
-     *        the <code>Context</code>
-     * @param out
-     *        the <code>PrintWriter</code>
-     */
-    public static void setOutput(Context ctx, PrintWriter out) {
-        if (out == null) {
-            ctx.remove(OUTPUT_KEY);
-        } else {
-            ctx.put(OUTPUT_KEY, out);
-        }
-    }
-
-    /**
-     * Sets the current working <code>Node</code>.
-     * @param ctx
-     *        the <code>Context</code>
-     * @param node
-     *        the current working <code>Node</code>.
-     */
-    public static void setCurrentNode(Context ctx, Node node) {
-        if (node == null) {
-            ctx.remove(CURRENT_NODE_KEY);
-        } else {
-            ctx.put(CURRENT_NODE_KEY, node);
-        }
-    }
-
-    /**
-     * Sets the current working <code>Repository</code>
-     * @param ctx
-     *        the <code>Context</code>
-     * @param repository
-     *        the current working <code>Repository</code>
-     */
-    public static void setRepository(Context ctx, Repository repository) {
-        if (repository == null) {
-            ctx.remove(REPOSITORY_KEY);
-        } else {
-            ctx.put(REPOSITORY_KEY, repository);
-        }
-    }
-
-    /**
-     * Sets the current working <code>Session</code>
-     * @param ctx
-     *        the <code>Context</code>
-     * @param session
-     *        the current working <code>Session</code>
-     * @throws CommandException if there's an open working <code>Session</code>
-     */
-    public static void setSession(Context ctx, Session session) throws CommandException {
-        if (session == null) {
-            ctx.remove(SESSION_KEY);
-        } else {
-            if (ctx.get(SESSION_KEY) != null) {
-                throw new CommandException("exception.already.logged.in");
-            }
-            ctx.put(SESSION_KEY, session);
-        }
-    }
-
-    /**
-     * Gets the current <code>PrintWriter</code>
-     * @param ctx
-     *        the <code>Context</code>
-     * @return the current <code>PrintWriter</code>
-     */
-    public static PrintWriter getOutput(Context ctx) {
-        PrintWriter out = (PrintWriter) ctx.get(OUTPUT_KEY);
-        if (out == null) {
-            out = new PrintWriter(System.out, true);
-        }
-        return out;
-    }
-
-    /**
-     * Gets the current working <code>Node</code>
-     * @param ctx
-     *        the <code>Context</code>
-     * @return the current working <code>Node</code>
-     * @throws CommandException
-     *         if the current working <code>Node</code> can't be found.
-     */
-    public static Node getCurrentNode(Context ctx) throws CommandException {
-        Node n = (Node) ctx.get(CURRENT_NODE_KEY);
-        if (n == null) {
-            throw new CommandException("exception.no.current.node");
-        }
-        return n;
-    }
-
-    /**
-     * Gets the current working <code>Repository</code>
-     * @param ctx
-     *        the <code>Context</code>
-     * @return the current working <code>Repository</code>
-     * @throws CommandException
-     *         if the current working <code>Repository</code> is unset.
-     */
-    public static Repository getRepository(Context ctx) throws CommandException {
-        Repository r = (Repository) ctx.get(REPOSITORY_KEY);
-        if (r == null) {
-            throw new CommandException("exception.no.current.repository");
-        }
-        return r;
-    }
-
-    /**
-     * Gets the current working <code>Session</code>
-     * @param ctx
-     *        the <code>Context</code>
-     * @return the current working <code>Session</code>
-     * @throws CommandException
-     *         if the current working <code>Session</code> is unset.
-     */
-    public static Session getSession(Context ctx) throws CommandException {
-        Session s = (Session) ctx.get(SESSION_KEY);
-        if (s == null) {
-            throw new CommandException("exception.no.current.session");
-        }
-        return s;
-    }
-
-    /**
-     * Gets the <code>Node</code> at the given path.
-     * @param ctx
-     *        the <code>Context</code>
-     * @param path
-     *        the path to the <code>Node</code>
-     * @return the <code>Node</code> at the given path
-     * @throws CommandException
-     *         if the <code>Node</code> isn't found.
-     * @throws RepositoryException
-     *         if the underlying repository throws a
-     *         <code>RepositoryException</code>
-     */
-    public static Node getNode(Context ctx, String path)
-            throws CommandException, RepositoryException {
-        try {
-            Item i = getItem(ctx, path);
-            if (!i.isNode()) {
-                throw new CommandException("exception.no.node.at",
-                    new String[] {
-                        path
-                    });
-            }
-            return (Node) i;
-        } catch (PathNotFoundException e) {
-            throw new CommandException("exception.no.node.at", new String[] {
-                path
-            });
-        }
-    }
-
-    /**
-     * Gets the <code>Item</code> at the given path. <br>
-     * If the path is null it returns the current working <code>Node</code>.
-     * @param ctx
-     *        the <code>Context</code>
-     * @param path
-     *        the path to the <code>Item</code>
-     * @return the <code>Item</code> at the given path
-     * @throws CommandException
-     *         if a <code>Command</code> internal error occurs.
-     * @throws PathNotFoundException
-     *         if there's no <code>Node</code> at the given path.
-     * @throws RepositoryException
-     *         if the underlying repository throws a
-     *         <code>RepositoryException</code>
-     */
-    public static Item getItem(Context ctx, String path)
-            throws CommandException, PathNotFoundException, RepositoryException {
-        Node current = getCurrentNode(ctx);
-        Item i = null;
-
-        if (path == null) {
-            i = current;
-        } else if (path.equals("/")) {
-            i = current.getSession().getRootNode();
-        } else if (path.startsWith("/")) {
-            i = current.getSession().getItem(path);
-        } else {
-            String newPath = current.getPath();
-            // handle the root node
-            if (!newPath.endsWith("/")) {
-                newPath += "/";
-            }
-            newPath += path;
-            i = current.getSession().getItem(newPath);
-        }
-
-        return i;
-    }
-
-    /**
-     * Checks <code>Node</code> existence.
-     * @param ctx
-     *        the <code>Context</code>
-     * @param path
-     *        the path to the <code>Node</code>
-     * @return true if the <code>Node</code> exists at the given path
-     * @throws CommandException
-     *         if the current working <code>Session</code> is unset.
-     * @throws RepositoryException
-     *         if the underlying repository throws a
-     *         <code>RepositoryException</code>
-     */
-    public static boolean hasNode(Context ctx, String path)
-            throws CommandException, RepositoryException {
-        Session s = getSession(ctx);
-        if (path.equals("/")) {
-            return true;
-        } else if (path.startsWith("/")) {
-            return s.getRootNode().hasNode(path.substring(1));
-        } else {
-            Node current = (Node) ctx.get(CURRENT_NODE_KEY);
-            return current.hasNode(path);
-        }
-    }
-
-    /**
-     * Gets the <code>Node</code> s under the given <code>Node</code> that
-     * match the given pattern.
-     * @param ctx
-     *        the <code>Context</code>
-     * @param node
-     *        the parent <code>Node</code>
-     * @param pattern
-     *        the pattern
-     * @return an <code>Iterator</code> that contains the matching nodes
-     * @throws RepositoryException
-     *         if the underlying repository throws a
-     *         <code>RepositoryException</code>
-     */
-    public static NodeIterator getNodes(Context ctx, Node node, String pattern)
-            throws RepositoryException {
-        if (pattern != null) {
-            return node.getNodes(pattern);
-        } else {
-            return node.getNodes();
-        }
-    }
-
-    /**
-     * Gets the <code>Property</code> s under the current working node for the
-     * given pattern
-     * @param ctx
-     *        the <code>Context</code>
-     * @param node
-     *        the parent <code>Node</code>
-     * @param pattern
-     *        the pattern
-     * @return a <code>PropertyIterator</code>
-     * @throws RepositoryException
-     *         if the underlying repository throws a
-     *         <code>RepositoryException</code>
-     */
-    public static PropertyIterator getProperties(
-        Context ctx,
-        Node node,
-        String pattern) throws RepositoryException {
-        if (pattern != null) {
-            return node.getProperties(pattern);
-        } else {
-            return node.getProperties();
-        }
-    }
-
-    /**
-     * @return the default <code>ResourceBundle</code>
-     */
-    public static ResourceBundle getBundle() {
-        return bundle;
-    }
-
-    /**
-     * Gets the <code>Item</code> s under the given <code>Node</code> that
-     * match the pattern
-     * @param ctx
-     *        the <code>Context</code>
-     * @param node
-     *        the parent <code>Node</code>
-     * @param pattern
-     *        the pattern
-     * @return an <code>Iterator</code> with the <code>Item</code> s that
-     *         match the given pattern.
-     * @throws RepositoryException
-     *         if the underlying repository throws a
-     *         <code>RepositoryException</code>
-     */
-    public static Iterator getItems(Context ctx, Node node, String pattern)
-            throws RepositoryException {
-        return IteratorUtils.chainedIterator(getNodes(ctx, node, pattern),
-            getProperties(ctx, node, pattern));
-    }
-
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/AbstractParameter.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/AbstractParameter.java
deleted file mode 100644
index 634ddd4..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/AbstractParameter.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.cli;
-
-import java.util.ResourceBundle;
-
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Command Line parameter superclass
- */
-public abstract class AbstractParameter implements Cloneable {
-
-    /** Resource bundle */
-    protected ResourceBundle bundle = CommandHelper.getBundle();
-
-    /** name */
-    private String name;
-
-    /** long name */
-    private String longName;
-
-    /** description */
-    private String description;
-
-    /** command or a context attribute */
-    private String contextKey;
-
-    /** value */
-    private String value;
-
-    /**
-     * @return the description
-     */
-    public String getDescription() {
-        return description;
-    }
-
-    /**
-     * @return the localized description
-     */
-    public abstract String getLocalizedDescription();
-
-    /**
-     * @return the name
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * @param description
-     *        The description to set
-     */
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    /**
-     * @param name
-     *        the name to set
-     */
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    /**
-     * @return the value
-     */
-    public String getValue() {
-        return value;
-    }
-
-    /**
-     * @param value
-     *        The value to set
-     */
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    /**
-     * @return the longName
-     */
-    public String getLongName() {
-        return longName;
-    }
-
-    /**
-     * @param longName
-     *        The longName to set
-     */
-    public void setLongName(String longName) {
-        this.longName = longName;
-    }
-
-    /**
-     * @param param
-     *        the <code>AbstractParameter</code> to clone
-     */
-    protected void clone(AbstractParameter param) {
-        param.contextKey = this.contextKey;
-        param.description = this.description;
-        param.longName = this.longName;
-        param.name = this.name;
-        param.value = this.value;
-    }
-
-    /**
-     * @return the commandAttribute. if the context key is unset it returns the
-     *         parameter name
-     */
-    public String getContextKey() {
-        if (contextKey == null) {
-            return this.name;
-        }
-        return contextKey;
-    }
-
-    /**
-     * @param commandAttribute
-     *        The commandAttribute to set
-     */
-    public void setContextKey(String commandAttribute) {
-        this.contextKey = commandAttribute;
-    }
-
-    /**
-     * @return true if this parameter is mandatory
-     */
-    public abstract boolean isRequired();
-
-    /**
-     * @return argumentlocalized name
-     */
-    public abstract String getLocalizedArgName();
-
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/Argument.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/Argument.java
deleted file mode 100644
index 3cc7713..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/Argument.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.cli;
-
-/**
- * Command line argument
- */
-public class Argument extends Option {
-    /** position of the argument */
-    private int position;
-
-    /**
-     * @return the position
-     */
-    public int getPosition() {
-        return position;
-    }
-
-    /**
-     * sets the argument position
-     * @param position
-     *        the position
-     */
-    public void setPosition(int position) {
-        this.position = position;
-    }
-
-    /**
-     * @inheritDoc
-     * @return a clone
-     */
-    public Object clone() {
-        Argument arg = new Argument();
-        arg.position = this.position;
-        this.clone(arg);
-        return arg;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/CommandLine.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/CommandLine.java
deleted file mode 100644
index 18e8a9f..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/CommandLine.java
+++ /dev/null
@@ -1,327 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.cli;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.ResourceBundle;
-import java.util.TreeMap;
-
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.collections.Predicate;
-import org.apache.commons.collections.iterators.IteratorChain;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Command Line
- */
-public class CommandLine implements Comparable, Cloneable {
-    /** Resource bundle */
-    protected static ResourceBundle bundle = CommandHelper.getBundle();
-
-    /** Name */
-    private String name;
-
-    /** Description */
-    private String description;
-
-    /** Commons chain command implementation */
-    private String impl;
-
-    /** alias */
-    private Collection alias = new ArrayList();
-
-    /** Options */
-    private Map options = new TreeMap();
-
-    /** flags */
-    private Map flags = new TreeMap();
-
-    /** arguments */
-    private Map arguments = new TreeMap();
-
-    /**
-     * constructor
-     */
-    public CommandLine() {
-        super();
-    }
-
-    /**
-     * @return required arguments
-     */
-    public Collection getRequiredArguments() {
-        Predicate p = new Predicate() {
-            public boolean evaluate(Object o) {
-                Argument arg = (Argument) o;
-                return arg.isRequired();
-            }
-        };
-        return CollectionUtils.select(this.arguments.values(), p);
-    }
-
-    /**
-     * @return required options
-     */
-    public Collection getRequiredOptions() {
-        Predicate p = new Predicate() {
-            public boolean evaluate(Object o) {
-                Option opt = (Option) o;
-                return opt.isRequired();
-            }
-        };
-        return CollectionUtils.select(this.options.values(), p);
-    }
-
-    /**
-     * @return the description.
-     */
-    public String getDescription() {
-        return description;
-    }
-
-    /**
-     * @return the localized description.
-     */
-    public String getLocalizedDescription() {
-        if (description == null) {
-            return bundle.getString("cmd." + this.name);
-        } else {
-            return bundle.getString(this.description);
-        }
-    }
-
-    /**
-     * @param description
-     *        The description to set
-     */
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    /**
-     * @return the flags
-     */
-    public Map getFlags() {
-        return flags;
-    }
-
-    /**
-     * @param flags
-     *        The flags to set
-     */
-    public void setFlags(Map flags) {
-        this.flags = flags;
-    }
-
-    /**
-     * @return the impl
-     */
-    public String getImpl() {
-        return impl;
-    }
-
-    /**
-     * @param impl
-     *        The impl to set
-     */
-    public void setImpl(String impl) {
-        this.impl = impl;
-    }
-
-    /**
-     * @return the name
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * @param name
-     *        the name to set
-     */
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    /**
-     * @return the options
-     */
-    public Map getOptions() {
-        return options;
-    }
-
-    /**
-     * @param options
-     *        the <code>Option</code>s to set
-     */
-    public void setOptions(Map options) {
-        this.options = options;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public int compareTo(Object o) {
-        CommandLine cl = (CommandLine) o;
-        return name.compareTo(cl.name);
-    }
-
-    /**
-     * @return all the parameters. i.e. args, options and flags.
-     */
-    public Iterator getAllParameters() {
-        IteratorChain chain = new IteratorChain();
-        chain.addIterator(getArguments().values().iterator());
-        chain.addIterator(getOptions().values().iterator());
-        chain.addIterator(getFlags().values().iterator());
-        return chain;
-    }
-
-    /**
-     * @return the required parameters. i.e. args, options and flags.
-     */
-    public Iterator getRequiredParameters() {
-        IteratorChain chain = new IteratorChain();
-        chain.addIterator(getRequiredArguments().iterator());
-        chain.addIterator(getRequiredOptions().iterator());
-        return chain;
-    }
-
-    /**
-     * @param arg
-     *        the <code>Argument</code> to add
-     */
-    public void addArgument(Argument arg) {
-        if (arguments.containsKey(new Integer(arg.getPosition()))) {
-            throw new IllegalArgumentException(
-                "there's an argument in the position in command " + this.name);
-        }
-        // Put default values description and arg name i18n keys
-        if (arg.getArgName() == null) {
-            arg.setArgName("cmd." + this.getName() + "." + arg.getName());
-        }
-        if (arg.getDescription() == null) {
-            arg.setDescription("cmd." + this.getName() + "." + arg.getName()
-                    + ".desc");
-        }
-        this.arguments.put(new Integer(arg.getPosition()), arg);
-    }
-
-    /**
-     * @param opt the <code>Option</code> to add
-     */
-    public void addOption(Option opt) {
-        // Put default values description and arg name i18n keys
-        if (opt.getArgName() == null) {
-            opt.setArgName("cmd." + this.getName() + "." + opt.getName());
-        }
-        if (opt.getDescription() == null) {
-            opt.setDescription("cmd." + this.getName() + "." + opt.getName()
-                    + ".desc");
-        }
-        this.options.put(opt.getName(), opt);
-    }
-
-    /**
-     * @param flag the <code>Flag</code> to add
-     */
-    public void addFlag(Flag flag) {
-        // Put default values description and arg name i18n keys
-        if (flag.getDescription() == null) {
-            flag.setDescription("cmd." + this.getName() + "." + flag.getName()
-                    + ".desc");
-        }
-        this.flags.put(flag.getName(), flag);
-    }
-
-    /**
-     * @return the arguments
-     */
-    public Map getArguments() {
-        return arguments;
-    }
-
-    /**
-     * @param arguments
-     *        the arguments to set
-     */
-    public void setArguments(Map arguments) {
-        this.arguments = arguments;
-    }
-
-    /**
-     * @return the alias
-     */
-    public Collection getAlias() {
-        return alias;
-    }
-
-    /**
-     * @param alias
-     *        the alias to set
-     */
-    public void setAlias(Collection alias) {
-        this.alias = alias;
-    }
-
-    /**
-     * @param alias the alias to add
-     */
-    public void addAlias(String alias) {
-        this.alias.add(alias);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public Object clone() {
-        CommandLine cl = new CommandLine();
-        cl.alias = this.alias;
-        // Arguments
-        Iterator iter = this.arguments.values().iterator();
-        while (iter.hasNext()) {
-            Argument arg = (Argument) iter.next();
-            cl.addArgument((Argument) arg.clone());
-        }
-        cl.description = this.description;
-        // Flags
-        iter = this.flags.values().iterator();
-        while (iter.hasNext()) {
-            Flag f = (Flag) iter.next();
-            cl.addFlag((Flag) f.clone());
-        }
-        cl.impl = this.impl;
-        cl.name = this.name;
-        // Flags
-        iter = this.options.values().iterator();
-        while (iter.hasNext()) {
-            Option o = (Option) iter.next();
-            cl.addOption((Option) o.clone());
-        }
-        return cl;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String toString() {
-        return "CommandLine-" + this.getName() + "(" + impl + ")";
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/CommandLineFactory.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/CommandLineFactory.java
deleted file mode 100644
index d67861e..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/CommandLineFactory.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.cli;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.ResourceBundle;
-import java.util.TreeMap;
-
-import org.apache.commons.digester.Digester;
-import org.apache.commons.digester.xmlrules.DigesterLoader;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-import org.xml.sax.SAXException;
-
-/**
- * Command line factory
- */
-public class CommandLineFactory {
-    /** logger */
-    private static Log log = LogFactory.getLog(CommandLineFactory.class);
-
-    /** resource bundle */
-    private static ResourceBundle bundle = CommandHelper.getBundle();
-
-    /** file name */
-    private static final String COMMAND_LINE_FILE = "command-line.xml";
-
-    /** rules file name */
-    private static final String COMMAND_LINE_RULES_FILE = "command-line-rules.xml";
-
-    /** singleton */
-    private static CommandLineFactory singleton;
-
-    /** command cache */
-    private Map cache = new TreeMap();
-
-    /** alias cache */
-    private Map alias = new HashMap();
-
-    /**
-     * private constructor
-     */
-    private CommandLineFactory() {
-        super();
-    }
-
-    /**
-     * @return singleton
-     */
-    public static CommandLineFactory getInstance() {
-        if (singleton == null) {
-            try {
-                CommandLineFactory factory = new CommandLineFactory();
-                factory.init();
-                singleton = factory;
-            } catch (Exception e) {
-                log.error(bundle.getString("exception.unabletoinit"), e);
-                e.printStackTrace();
-            }
-        }
-        return singleton;
-    }
-
-    /**
-     * @return all registered <code>Command</code> s
-     */
-    public Collection getCommandLines() {
-        List cls = new ArrayList();
-        Iterator iter = cache.values().iterator();
-        while (iter.hasNext()) {
-            CommandLine cl = (CommandLine) iter.next();
-            cls.add(cl.clone());
-        }
-        return cls;
-    }
-
-    /**
-     * Get the <code>Command</code> for the given name
-     * @param name
-     *        the <code>Command</code> name
-     * @return a new Command Line Instance for the given command name
-     * @throws JcrParserException
-     *         if there's no <code>Command</code> for the given name
-     */
-    public CommandLine getCommandLine(String name) throws JcrParserException {
-        log.debug("lookup command " + name);
-        // get Command line
-        CommandLine original = (CommandLine) cache.get(name);
-
-        if (original == null) {
-            log.debug("lookup alias " + name);
-            original = (CommandLine) alias.get(name);
-        }
-
-        if (original == null) {
-            log.warn("command not found " + name);
-            throw new JcrParserException("exception.no.command.for.name",
-                new String[] {
-                    name
-                });
-        }
-
-        // Return a clone
-        return (CommandLine) original.clone();
-    }
-
-    /**
-     * parses the configuration file
-     * @throws ConfigurationException
-     *         an <code>Exception</code> occurs while parsing
-     */
-    private void init() throws ConfigurationException {
-        try {
-            // Configure Digester from XML ruleset
-            URL rulesFile = getClass().getResource(COMMAND_LINE_RULES_FILE);
-            URL clFile = getClass().getResource(COMMAND_LINE_FILE);
-
-            // init digester
-            Digester digester = DigesterLoader.createDigester(rulesFile);
-
-            // Push empty List onto Digester's Stack
-            List cls = new ArrayList();
-            digester.push(cls);
-
-            // Parse the XML document
-            InputStream input = clFile.openStream();
-            digester.parse(input);
-            input.close();
-
-            // Add to cache
-            Iterator iter = cls.iterator();
-            while (iter.hasNext()) {
-                CommandLine cl = (CommandLine) iter.next();
-                cache.put(cl.getName(), cl);
-                // Add to alias cache
-                Iterator aliasIt = cl.getAlias().iterator();
-                while (aliasIt.hasNext()) {
-                    String aliasName = (String) aliasIt.next();
-                    if (alias.containsKey(aliasName)) {
-                        throw new ConfigurationException(
-                            "exception.alias.already.in.use", new String[] {
-                                    aliasName, cl.getName()
-                            });
-                    }
-                    alias.put(aliasName, cl);
-                }
-            }
-        } catch (IOException e) {
-            throw new ConfigurationException(e.getLocalizedMessage());
-        } catch (SAXException e) {
-            throw new ConfigurationException(e.getLocalizedMessage());
-        }
-    }
-
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/ConfigurationException.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/ConfigurationException.java
deleted file mode 100644
index fcee933..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/ConfigurationException.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.cli;
-
-import org.apache.jackrabbit.command.CommandException;
-
-/**
- * This Exception is thrown when there's an error in the command config file.
- */
-public class ConfigurationException extends CommandException {
-
-    /**
-     * <code>serialVersionUID</code>
-     */
-    private static final long serialVersionUID = 3257848770644621622L;
-
-    /**
-     * @param message
-     *        the message
-     */
-    public ConfigurationException(String message) {
-        super(message);
-    }
-
-    /**
-     * @param message
-     *        the message
-     * @param arguments
-     *        the arguments
-     */
-    public ConfigurationException(String message, Object[] arguments) {
-        super(message, arguments);
-    }
-
-    /**
-     * @param message
-     *        the message
-     * @param cause
-     *        the arguments
-     */
-    public ConfigurationException(String message, Throwable cause) {
-        super(message, cause);
-    }
-
-    /**
-     * @param message
-     *        the message
-     * @param cause
-     *        the cause
-     * @param arguments
-     *        the arguments
-     */
-    public ConfigurationException(String message, Throwable cause,
-        Object[] arguments) {
-        super(message, cause, arguments);
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/Flag.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/Flag.java
deleted file mode 100644
index 4386667..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/Flag.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.cli;
-
-/**
- * A command line flag <br>
- * A flag is a parameter that has no other value that the option name. e.g.
- * -[flag name].
- */
-public class Flag extends AbstractParameter {
-    /** true if flag is present in the user's input */
-    private boolean present = false;
-
-    /**
-     * @return true if the flag exists in the user's input
-     */
-    public boolean isPresent() {
-        return present;
-    }
-
-    /**
-     * @param present
-     *        the present to set
-     */
-    public void setPresent(boolean present) {
-        this.present = present;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getValue() {
-        return Boolean.toString(present);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void setValue(String value) {
-        present = Boolean.getBoolean(value);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public Object clone() {
-        Flag f = new Flag();
-        f.present = this.present;
-        this.clone(f);
-        return f;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean isRequired() {
-        return false;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getLocalizedArgName() {
-        return "";
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getLocalizedDescription() {
-        if (this.getDescription() == null) {
-            return bundle.getString("param.flag." + this.getName() + ".desc");
-        } else {
-            return bundle.getString(this.getDescription());
-        }
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/JcrClient.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/JcrClient.java
deleted file mode 100644
index 5fee8fd..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/JcrClient.java
+++ /dev/null
@@ -1,314 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.cli;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.PrintWriter;
-import java.util.Locale;
-import java.util.ResourceBundle;
-
-import javax.jcr.InvalidItemStateException;
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-
-import org.apache.commons.chain.Context;
-import org.apache.commons.chain.impl.ContextBase;
-import org.apache.commons.cli.BasicParser;
-import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.HelpFormatter;
-import org.apache.commons.cli.Options;
-import org.apache.commons.cli.ParseException;
-import org.apache.commons.cli.Parser;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandException;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Command line interface client
- */
-public class JcrClient {
-    /** logger */
-    private static Log log = LogFactory.getLog(JcrClient.class);
-
-    /** Resource bundle */
-    private ResourceBundle bundle = CommandHelper.getBundle();
-
-    /** exit control variable */
-    private boolean exit = false;
-
-    /** Execution context */
-    private Context ctx;
-
-    /** run options */
-    private Options options;
-
-    /**
-     * Constructor
-     */
-    JcrClient() {
-        super();
-        ctx = new ContextBase();
-        initOptions();
-        initContext();
-    }
-
-    /**
-     * Constructor
-     * @param ctx
-     *        the <code>Context</code>
-     */
-    JcrClient(Context ctx) {
-        super();
-        this.ctx = ctx;
-    }
-
-    /**
-     * @param args
-     *        the arguments
-     */
-    public static void main(String[] args) {
-        JcrClient client = new JcrClient();
-        client.run(args);
-    }
-
-    /**
-     * Run client
-     * @param args
-     *        the arguments
-     */
-    private void run(String[] args) {
-        try {
-            // parse arguments
-            Parser parser = new BasicParser();
-            CommandLine cl = parser.parse(options, args);
-
-            // Set locale
-            this.setLocale(cl);
-
-            // Welcome message
-            System.out.println(bundle.getString("word.welcome"));
-
-            // check interactive mode
-            if (cl.hasOption("source")) {
-                this.runNonInteractive(cl);
-            } else {
-                this.runInteractive(cl);
-            }
-        } catch (Exception e) {
-            HelpFormatter hf = new HelpFormatter();
-            hf.printHelp("jcrclient", options);
-            e.printStackTrace();
-            return;
-        }
-    }
-
-    /**
-     * Run in interactive mode
-     * @param cl
-     *        the <code>CommandLine</code>
-     * @throws Exception
-     *         if an Exception occurs
-     */
-    private void runInteractive(CommandLine cl) throws Exception {
-        // Prompt command
-        while (!exit) {
-            try {
-                System.out.print(this.getPrompt() + ">");
-                // Read input
-                BufferedReader br = new BufferedReader(new InputStreamReader(
-                    System.in));
-                String input = br.readLine();
-                log.debug("running: " + input);
-                if (input.trim().equals("exit") || input.trim().equals("quit")) { // exit?
-                    exit = true;
-                    System.out.println("Good bye..");
-                } else if (input.trim().length() == 0) {
-                    // Do nothing
-                } else {
-                    this.runCommand(input);
-                }
-            } catch (JcrParserException e) {
-                System.out.println(e.getLocalizedMessage());
-                System.out.println();
-            } catch (Exception e) {
-                handleException(e);
-            }
-        }
-    }
-
-    /**
-     * Run in non interactive mode
-     * @param cl
-     *        the <code>CommandLine</code>
-     * @throws Exception
-     *         if an <code>Exception</code> occurs while running the
-     *         <code>Command</code>
-     */
-    private void runNonInteractive(CommandLine cl) throws Exception {
-        this.runCommand("source " + cl.getOptionValue("source"));
-    }
-
-    /**
-     * Parses the input and runs the specified command
-     * @param input
-     *        the user's input
-     * @throws Exception
-     *         if an <code>Exception</code> occurs while running the
-     *         <code>Command</code>
-     */
-    void runCommand(String input) throws Exception {
-        if (input.startsWith("#") || input.length() == 0) {
-            return;
-        }
-
-        // Process user input
-        JcrParser parser = new JcrParser();
-        parser.parse(input);
-
-        // populate ctx
-        parser.populateContext(ctx);
-
-        // Execute command
-        long start = System.currentTimeMillis();
-        parser.getCommand().execute(ctx);
-        long elapsed = System.currentTimeMillis() - start;
-
-        // depopulate ctx
-        parser.depopulateContext(ctx);
-
-        // Display elapsed timed
-        System.out.println();
-        System.out.println(bundle.getString("phrase.elapsedtime") + ": "
-                + elapsed + " ms.");
-        System.out.println();
-    }
-
-    /**
-     * Handle the Exception. <br>
-     * Shows a short message and prompt the user to show the entire stacktrace.
-     * @param ex
-     *        the <code>Exception</code> to handle
-     */
-    private void handleException(Exception ex) {
-        System.out.println();
-        System.out.println(bundle.getString("exception.occurred"));
-        System.out.println();
-        System.out.println(bundle.getString("exception") + ": "
-                + ex.getClass().getName());
-        System.out.println(bundle.getString("word.message") + ": "
-                + ex.getLocalizedMessage());
-        System.out.println();
-        String prompt = bundle.getString("phrase.display.stacktrace")
-                + "? [y/n]";
-        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
-        String str = "";
-        int tries = 0;
-        while (!str.equals("y") && !str.equals("n") && tries < 3) {
-            tries++;
-            System.out.print(prompt);
-            try {
-                str = in.readLine();
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-        }
-        if (str.equals("y")) {
-            ex.printStackTrace();
-        }
-    }
-
-    /**
-     * Prompt message
-     * @return prompt the prompt message
-     * @throws RepositoryException
-     *         if the current <code>Repository</code> throws a
-     *         <code>RepositoryException</code>
-     */
-    private String getPrompt() throws RepositoryException {
-
-        try {
-            CommandHelper.getRepository(ctx);
-        } catch (CommandException e) {
-            return bundle.getString("phrase.not.connected");
-        }
-
-        try {
-            CommandHelper.getSession(ctx);
-        } catch (CommandException e) {
-            return bundle.getString("phrase.not.logged.in");
-        }
-
-        try {
-            Node n = CommandHelper.getCurrentNode(ctx);
-            // the current node might be Invalid
-            try {
-                return n.getPath();
-            } catch (InvalidItemStateException e) {
-                CommandHelper.setCurrentNode(ctx, CommandHelper.getSession(ctx)
-                    .getRootNode());
-                return CommandHelper.getCurrentNode(ctx).getPath();
-            }
-        } catch (CommandException e) {
-            return bundle.getString("phrase.not.logged.in");
-        }
-
-    }
-
-    /**
-     * Init allowed CommandLine options
-     */
-    private void initOptions() {
-        options = new Options();
-        options.addOption("lang", "code", true, "Language code");
-        options.addOption("country", "code", true, "Country code");
-        options.addOption("source", "path", true,
-            "Script for noninteractive mode");
-    }
-
-    /**
-     * Sets the default Locale for the given CommandLine
-     * @param cl
-     *        the CLI <code>CommandLine</code>
-     * @throws ParseException
-     *         if cl can't be parsed
-     */
-    private void setLocale(CommandLine cl) throws ParseException {
-        Locale locale = null;
-        if (cl.hasOption("lang") && cl.hasOption("country")) {
-            locale = new Locale(cl.getOptionValue("lang"), cl
-                .getOptionValue("country"));
-        }
-        if (cl.hasOption("lang") && !cl.hasOption("country")) {
-            locale = new Locale(cl.getOptionValue("lang"));
-        }
-        if (locale != null) {
-            Locale.setDefault(locale);
-        }
-    }
-
-    /**
-     * Init context. <br>
-     * Sets the Context Output to the console
-     */
-    private void initContext() {
-        CommandHelper.setOutput(ctx, new PrintWriter(System.out, true));
-    }
-
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/JcrParser.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/JcrParser.java
deleted file mode 100644
index 4c929f1..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/JcrParser.java
+++ /dev/null
@@ -1,294 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.cli;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.commons.chain.Catalog;
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.chain.config.ConfigParser;
-import org.apache.commons.chain.impl.CatalogFactoryBase;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * Input Parser
- */
-public class JcrParser {
-    /** parser */
-    private static Log log = LogFactory.getLog(JcrParser.class);
-
-    static {
-        try {
-            ConfigParser parser = new ConfigParser();
-            parser.parse(JcrParser.class.getResource("command.xml"));
-        } catch (Exception e) {
-            e.printStackTrace();
-            log.error(e);
-        }
-    }
-
-    /** catalog */
-    private Catalog catalog = CatalogFactoryBase.getInstance().getCatalog();
-
-    /** Command */
-    private Command cmd;
-
-    /** Command Line */
-    private CommandLine cl;
-
-    /**
-     * Constructor
-     */
-    public JcrParser() {
-        super();
-    }
-
-    /**
-     * Parse the user's input.
-     * @param input
-     *        user's input
-     * @throws JcrParserException
-     *         if the input is illegal
-     * @throws ConfigurationException
-     *         if the mapped command can't be mapped to a Commons Chain Command
-     */
-    public void parse(String input) throws JcrParserException,
-            ConfigurationException {
-        this.cl = null;
-        this.cmd = null;
-
-        // Validate input
-        if (input == null || input.length() == 0) {
-            throw new JcrParserException("exception.parse.input.empty");
-        }
-
-        // Extract arguments
-        LinkedList args = this.getArguments(input);
-
-        // The first arg is the command name
-        String cmdName = (String) args.getFirst();
-        args.removeFirst();
-
-        // Get the command line descriptor
-        cl = CommandLineFactory.getInstance().getCommandLine(cmdName);
-
-        // populate with the given params
-        populate(cl, args);
-
-        // validate the command line
-        validate(cl);
-
-        // Create Chain Command
-        String impl = cl.getImpl();
-        if (impl == null) {
-            impl = cl.getName();
-        }
-        cmd = catalog.getCommand(impl);
-
-        if (cmd == null) {
-            throw new JcrParserException("no chain command for name " + impl);
-        }
-
-    }
-
-    /**
-     * Tokenize user's input
-     * @param input
-     *        the user's input
-     * @return a <code>List</code> containing the arguments
-     */
-    private LinkedList getArguments(String input) {
-        LinkedList args = new LinkedList();
-        int length = input.length();
-
-        boolean insideSingleQuote = false;
-        boolean insideDoubleQuote = false;
-        int escape = -1;
-
-        StringBuffer arg = new StringBuffer();
-
-        for (int i = 0; i < length; ++i) {
-            char c = input.charAt(i);
-
-            // end of argument?
-            if ((!insideSingleQuote & !insideDoubleQuote & Character
-                .isWhitespace(c))) {
-                if (arg.toString().trim().length() > 0) {
-                    args.add(arg.toString().trim());
-                    arg = new StringBuffer();
-                }
-                continue;
-            }
-
-            if (i == escape) { // escaped char
-                arg.append(c);
-            } else { // unescaped char
-                switch (c) {
-                case '\\':
-                    escape = i + 1;
-                    break;
-                case '"':
-                    insideDoubleQuote = !insideDoubleQuote;
-                    break;
-                case '\'':
-                    insideSingleQuote = !insideSingleQuote;
-                    break;
-                default:
-                    arg.append(c);
-                    break;
-                }
-            }
-        }
-
-        if (arg.toString().trim().length() > 0) {
-            args.add(arg.toString());
-        }
-
-        return args;
-    }
-
-    /**
-     * Populate the <code>Context</code> with the attributes needed by the
-     * <code>Command</code>
-     * @param ctx
-     *        the <code>Context</code>
-     */
-    public void populateContext(Context ctx) {
-        Iterator iter = cl.getAllParameters();
-        while (iter.hasNext()) {
-            AbstractParameter param = (AbstractParameter) iter.next();
-            log.debug("add ctx attr: " + param.getContextKey() + "="
-                    + param.getValue());
-            ctx.put(param.getContextKey(), param.getValue());
-        }
-    }
-
-    /**
-     * Remove <code>Context</code> attribute specific to the parsed
-     * <code>Command</code>
-     * @param ctx
-     *        the <code>Context</code>
-     */
-    public void depopulateContext(Context ctx) {
-        Iterator iter = cl.getAllParameters();
-        while (iter.hasNext()) {
-            AbstractParameter param = (AbstractParameter) iter.next();
-            String ctxKey = param.getContextKey();
-            log.debug("remove ctx attr: " + ctxKey + "=" + param.getValue());
-            ctx.remove(ctxKey);
-        }
-    }
-
-    /**
-     * @return the <code>Command</code>
-     */
-    public Command getCommand() {
-        return cmd;
-    }
-
-    /**
-     * Populate the <code>CommandLine</code> with the given parameters
-     * @param cl
-     *        the <code>CommandLine</code>
-     * @param valList
-     *        the arguments
-     * @throws JcrParserException
-     *         if the user's input is illegal
-     */
-    private void populate(CommandLine cl, List valList)
-            throws JcrParserException {
-        String[] values = (String[]) valList
-            .toArray(new String[valList.size()]);
-
-        // Command Line parameters
-        Map options = cl.getOptions();
-        Map flags = cl.getFlags();
-        Map clArgs = cl.getArguments();
-
-        // Input arguments
-        List args = new ArrayList();
-
-        for (int i = 0; i < values.length; i++) {
-            String value = values[i];
-
-            if (value.startsWith("-")) {
-                // option
-                if (i + 1 < values.length && !values[i + 1].startsWith("-")) {
-                    Option opt = (Option) options.get(value.substring(1));
-                    if (opt == null) {
-                        throw new JcrParserException("exception.no.opt.for.name",
-                            new String[] {
-                                value.substring(1)
-                            });
-                    }
-                    opt.setValue(values[i + 1]);
-                    i++;
-                } else {
-                    // flag
-                    Flag flag = (Flag) flags.get(value.substring(1));
-                    if (flag == null) {
-                        throw new JcrParserException("exception.no.flag.for.name",
-                            new String[] {
-                                value
-                            });
-                    }
-                    flag.setPresent(true);
-                }
-            } else {
-                // collect arguments
-                args.add(value);
-            }
-        }
-
-        // set arguments
-        String[] argValues = (String[]) args.toArray(new String[args.size()]);
-        for (int j = 0; j < argValues.length; j++) {
-            Argument arg = (Argument) clArgs.get(new Integer(j));
-            if (arg == null) {
-                throw new JcrParserException("exception.more.arguments.than.expected");
-            }
-            arg.setValue(argValues[j]);
-        }
-
-    }
-
-    /**
-     * Validate the <code>CommandLine</code>
-     * @param cl
-     *        the <code>CommandLine</code>
-     * @throws JcrParserException
-     *         if a required parameter is not present in the user's input
-     */
-    private void validate(CommandLine cl) throws JcrParserException {
-        Iterator iter = cl.getRequiredParameters();
-        while (iter.hasNext()) {
-            AbstractParameter param = (AbstractParameter) iter.next();
-            if (param.getValue() == null) {
-                throw new JcrParserException("exception.missing.paramater", new String[] {
-                    param.getName()
-                });
-            }
-        }
-    }
-
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/JcrParserException.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/JcrParserException.java
deleted file mode 100644
index 27d3ff4..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/JcrParserException.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.cli;
-
-import org.apache.jackrabbit.command.CommandException;
-
-/**
- * Exception thrown if any error occurs while parsing the user's input.
- */
-public class JcrParserException extends CommandException {
-
-    /**
-     * <code>serialVersionUID</code>
-     */
-    private static final long serialVersionUID = 3761694498056713525L;
-
-    /**
-     * @param message the message
-     * @param arguments the arguments
-     */
-    public JcrParserException(String message, Object[] arguments) {
-        super(message, arguments);
-    }
-
-    /**
-     * @param message the message
-     * @param cause the cause
-     * @param arguments the arguments
-     */
-    public JcrParserException(String message, Throwable cause,
-        Object[] arguments) {
-        super(message, cause, arguments);
-    }
-
-    /**
-     * @param message the message
-     */
-    public JcrParserException(String message) {
-        super(message);
-    }
-
-    /**
-     * @param message the message
-     * @param cause the cause
-     */
-    public JcrParserException(String message, Throwable cause) {
-        super(message, cause);
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/Option.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/Option.java
deleted file mode 100644
index 1628e36..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/Option.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.cli;
-
-/**
- * Command Line option. <br>
- * An option is a pair with the following pattern -[option name] [option value]
- */
-public class Option extends AbstractParameter {
-
-    /** argument name */
-    private String argName;
-
-    /** required */
-    private boolean required = false;
-
-    /**
-     * @return true if this <code>Option</code> is required
-     */
-    public boolean isRequired() {
-        return required;
-    }
-
-    /**
-     * @param required
-     *        set required
-     */
-    public void setRequired(boolean required) {
-        this.required = required;
-    }
-
-    /**
-     * @return the argument name
-     */
-    public String getArgName() {
-        return argName;
-    }
-
-    /**
-     * @return the localized argument name
-     */
-    public String getLocalizedArgName() {
-        return bundle.getString(this.getArgName());
-    }
-
-    /**
-     * @param argName
-     *        the argument name to set
-     */
-    public void setArgName(String argName) {
-        this.argName = argName;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public Object clone() {
-        Option o = new Option();
-        this.clone(o);
-        return o;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    protected void clone(Option opt) {
-        super.clone(opt);
-        opt.argName = this.argName;
-        opt.required = this.required;
-
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getLocalizedDescription() {
-        return bundle.getString(this.getDescription());
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/SourceCommand.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/SourceCommand.java
deleted file mode 100644
index dc23b89..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/SourceCommand.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.cli;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-import java.io.PrintWriter;
-import java.util.ResourceBundle;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.jackrabbit.command.CommandHelper;
-import org.apache.jackrabbit.command.CommandException;
-
-/**
- * Executes a script from the given file
- */
-public class SourceCommand implements Command {
-    /** Resource bundle */
-    private ResourceBundle bundle = CommandHelper.getBundle();
-
-    /** file */
-    private String fileKey = "file";
-
-    /**
-     * @return Returns the file.
-     */
-    public String getFileKey() {
-        return fileKey;
-    }
-
-    /**
-     * @param file
-     *        The file to set.
-     */
-    public void setFileKey(String file) {
-        this.fileKey = file;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        File f = new File((String) ctx.get(this.fileKey));
-        if (!f.exists()) {
-            throw new CommandException("exception.file.not.found",
-                new String[] {
-                    f.getAbsolutePath()
-                });
-        }
-        // client
-        JcrClient client = new JcrClient(ctx);
-
-        BufferedReader in = new BufferedReader(new FileReader(f));
-        PrintWriter out = CommandHelper.getOutput(ctx);
-        String line = null;
-        while ((line = in.readLine()) != null) {
-            out.println(bundle.getString("word.running") + ": " + line);
-            client.runCommand(line);
-        }
-        in.close();
-        return false;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/command-line-rules.xml b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/command-line-rules.xml
deleted file mode 100644
index e844684..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/command-line-rules.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE digester-rules PUBLIC
- "-//Jakarta Apache //DTD digester-rules XML V1.0//EN"
- "digester-rules.dtd">
-<digester-rules>
-
-  <pattern value="commands/command">
-    <object-create-rule classname="org.apache.jackrabbit.command.cli.CommandLine"/>
-    <set-properties-rule/>
-	<call-method-rule pattern="alias" methodname="addAlias" paramcount="1" />
-	<call-param-rule pattern="alias" paramnumber="0" attrname="name"/>
-    <set-next-rule methodname="add" paramtype="java.lang.Object"/>
-  </pattern>
-
-  <pattern value="commands/command/argument">
-	<object-create-rule classname="org.apache.jackrabbit.command.cli.Argument" />
-	<set-next-rule methodname="addArgument" />
-    <set-properties-rule>
-		<alias attr-name="arg-name" prop-name="argName"/>
-		<alias attr-name="context-key" prop-name="contextKey"/>
-		<alias attr-name="default" prop-name="value"/>
-    </set-properties-rule>
-  </pattern>  
-  
-  <pattern value="commands/command/option">
-	<object-create-rule classname="org.apache.jackrabbit.command.cli.Option" />
-    <set-properties-rule>
-		<alias attr-name="arg-name" prop-name="argName"/>
-		<alias attr-name="context-key" prop-name="contextKey"/>
-		<alias attr-name="default" prop-name="value"/>
-    </set-properties-rule>
-	<set-next-rule methodname="addOption" />
-  </pattern>  
-
-  <pattern value="commands/command/flag">
-	<object-create-rule classname="org.apache.jackrabbit.command.cli.Flag" />
-    <set-properties-rule>
-		<alias attr-name="context-key" prop-name="contextKey"/>
-    </set-properties-rule>
-	<set-next-rule methodname="addFlag" />
-  </pattern>  
-  
-</digester-rules>
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/command-line.xml b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/command-line.xml
deleted file mode 100644
index f81242c..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/command-line.xml
+++ /dev/null
@@ -1,901 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE commands [
-  <!ELEMENT commands (command+)>
-
-  <!ELEMENT command (alias*, argument*, option*, flag*)>
-  <!ATTLIST command
-  name NMTOKEN #REQUIRED
-  description CDATA #IMPLIED
-  impl NMTOKEN #IMPLIED >
-
-  <!ELEMENT alias EMPTY>
-  <!ATTLIST alias
-    name NMTOKEN #REQUIRED>
-
-  <!ELEMENT option EMPTY>
-  <!ATTLIST option
-    name NMTOKEN #REQUIRED
-    context-key NMTOKEN #IMPLIED
-    arg-name CDATA #IMPLIED
-    required NMTOKEN #IMPLIED
-    default CDATA #IMPLIED
-    description CDATA #IMPLIED>
-
-  <!ELEMENT argument EMPTY>
-  <!ATTLIST argument
-    name NMTOKEN #REQUIRED
-    context-key NMTOKEN #IMPLIED
-    position NMTOKEN #REQUIRED
-    arg-name CDATA #IMPLIED
-    required NMTOKEN #IMPLIED
-    default CDATA #IMPLIED
-    description CDATA #IMPLIED>
-
-  <!ELEMENT flag EMPTY>
-  <!ATTLIST flag
-    name NMTOKEN #REQUIRED
-    context-key NMTOKEN #IMPLIED
-    description CDATA #IMPLIED>
-
-  ]>
-<commands>
-
-  <command name="addlocktoken" impl="addLockToken">
-    <alias name="addtoken"/>
-    <argument
-      name="token"
-      position="0"
-      required="true"/>
-  </command>
-
-  <command name="addmixin" impl="addMixin">
-    <alias name="addmix"/>
-    <argument
-      name="mixin"
-      position="0"
-      required="true"/>
-    <argument
-      name="path"
-      position="1"
-      arg-name="common.jcrpath"
-      description="common.jcrpath.desc"/>
-  </command>
-
-  <command name="addnode" impl="addNode">
-    <alias name="add"/>
-    <argument
-      name="name"
-      position="0"
-      context-key="relPath"
-      arg-name="common.jcrname"
-      description="common.jcrname.desc"
-      required="true"/>
-    <argument
-      name="type"
-      position="1"
-      arg-name="common.nodetype"
-      description="common.nodetype.desc" />
-  </command>
-
-  <command name="addversionlabel" impl="addVersionLabel">
-    <alias name="addvlabel"/>
-    <argument name="version"
-      position="0" />
-    <argument name="label"
-      position="1" />
-    <option name="path"
-      arg-name="common.jcrpath"
-      description="common.jcrpath.desc"/>
-    <flag name="moveLabel"/>
-  </command>
-
-  <command name="cat">
-    <argument
-      name="path"
-      position="0"
-      arg-name="common.jcrpath"
-      description="common.jcrpath.desc"
-      required="true"/>
-    <argument
-      name="idx"
-      position="1"
-      arg-name="common.index"
-      description="common.index.desc"
-      context-key="index"/>
-  </command>
-
-  <command name="checkin">
-    <argument
-      name="path"
-      position="0"
-      arg-name="common.jcrpath"
-      description="common.jcrpath.desc"/>
-  </command>
-
-  <command name="checkout">
-    <argument
-      name="path"
-      position="0"
-      arg-name="common.jcrpath"
-      description="common.jcrpath.desc"/>
-  </command>
-
-  <command name="clearworkspace" impl="clearWorkspace">
-    <alias name="clear"/>
-  </command>
-
-  <command name="createworkspace" impl="createWorkspace">
-    <alias name="createw"/>
-    <argument
-      name="name"
-      position="0"
-      required="true"/>
-  </command>
-
-  <command name="clone">
-    <argument
-      name="scrWorkspace"
-      position="0"
-      required="true"
-      arg-name="word.name"
-      description="common.source"/>
-    <argument
-      name="srcAbsPath"
-      position="1"
-      required="true"/>
-    <argument
-      name="destAbsPath"
-      position="2"
-      required="true"/>
-    <flag name="removeExisting"/>
-  </command>
-
-  <command name="copy">
-    <argument
-      name="srcAbsPath"
-      position="0"
-      arg-name="common.jcrabspath"
-      required="true"/>
-    <argument
-      name="destAbsPath"
-      position="1"
-      arg-name="common.jcrabspath"
-      required="true"/>
-    <option
-      name="fromWorkspace"
-      context-key="srcWorkspace"/>
-  </command>
-
-  <command name="connect" impl="connectToRmiServer">
-    <argument
-      name="url"
-      position="0"
-      required="true"/>
-  </command>
-
-  <command name="currentnode" impl="currentNode">
-    <alias name="cd"/>
-    <alias name="cn"/>
-    <argument
-      name="path"
-      position="0"
-      arg-name="common.jcrpath"
-      description="common.jcrpath.desc"/>
-  </command>
-
-  <command name="dump">
-    <argument
-      name="path"
-      position="0"
-      arg-name="common.jcrpath"
-      description="common.jcrpath.desc"/>
-  </command>
-
-  <command name="exportdocview" impl="exportDocViewToFile">
-    <alias name="exportdoc"/>
-    <argument
-      name="srcAbsPath"
-      position="0"
-      arg-name="common.jcrabspath"
-      description="common.exportview.from"
-      required="true"/>
-    <argument
-      name="desFsPath"
-      position="1"
-      arg-name="common.fspath"
-      description="common.exportview.to"
-      required="true"/>
-    <flag
-      name="overwrite"
-      description="word.overwrite"/>
-    <flag
-      name="skipBinary"
-      description="common.exportview.skipBinary" />
-    <flag
-      name="noRecurse"
-      description="common.exportview.noRecurse"/>
-  </command>
-
-  <command name="exportfilesystem" impl="exportFileSystem">
-    <alias name="exportfs"/>
-    <argument
-      name="srcJcrPath"
-      position="0"
-      arg-name="common.jcrpath"
-      description="common.jcrpath.desc"
-      required="true"/>
-    <argument
-      name="destFsPath"
-      position="1"
-      arg-name="common.fspath"
-      description="word.destination"
-      required="true"/>
-    <flag name="overwrite"
-      description="word.overwrite"/>
-  </command>
-
-  <command name="exportproperty" impl="exportPropertyToFile">
-    <alias name="exportprop"/>
-    <alias name="exportp"/>
-    <argument
-      name="name"
-      position="0"
-      arg-name="common.jcrpath"
-      description="common.jcrpath.desc"
-      required="true"/>
-    <argument
-      name="destFsPath"
-      position="1"
-      arg-name="common.fspath"
-      description="common.fspath.desc"
-      required="true"/>
-    <option
-      name="idx"
-      arg-name="common.index"
-      description="common.index.desc"
-      context-key="index"/>
-    <flag
-      name="overwrite"
-      description="word.overwrite"/>
-  </command>
-
-  <command name="exportsysview" impl="exportSysViewToFile">
-    <alias name="exportsys"/>
-    <argument
-      name="srcAbsPath"
-      position="0"
-      arg-name="common.jcrabspath"
-      description="common.exportview.from"
-      required="true"/>
-    <argument
-      name="desFsPath"
-      position="1"
-      arg-name="common.fspath"
-      description="common.exportview.to"
-      required="true"/>
-    <flag
-      name="overwrite"
-      description="word.overwrite"/>
-    <flag
-      name="skipBinary"
-      description="common.exportview.skipBinary"/>
-    <flag
-      name="noRecurse"
-      description="common.exportview.noRecurse"/>
-  </command>
-
-  <command name="help">
-    <argument
-      name="command"
-      position="0"
-      required="false" />
-  </command>
-
-  <command name="importfilesystem" impl="importFileSystem">
-    <alias name="importfs"/>
-    <argument
-      name="srcFsPath"
-      position="0"
-      arg-name="common.fspath"
-      description="common.fspath.desc"
-      required="true"/>
-  </command>
-
-  <command name="importxml" impl="importXmlFromFile">
-    <alias name="import"/>
-    <argument
-      name="srcFsPath"
-      position="0"
-      arg-name="common.fspath"
-      description="common.fspath.desc"
-      required="true"/>
-    <argument
-      name="destJcrPath"
-      arg-name="common.jcrpath"
-      description="common.jcrpath.desc"
-      position="1"/>
-    <option
-      name="uuidBehaviour"
-      arg-name="common.uuidBehaviour"
-      description="common.uuidBehaviour.desc"
-      default="0"/>
-  </command>
-
-  <command name="lock">
-    <argument
-      name="path"
-      position="0"
-      arg-name="common.jcrpath"
-      description="common.jcrpath.desc"/>
-    <flag name="deep"/>
-    <flag name="session" context-key="sessionScoped"/>
-  </command>
-
-  <command name="login">
-    <argument
-      name="user"
-      position="0"
-      arg-name="word.user"
-      default="anonymous"/>
-    <argument
-      name="password"
-      position="1"
-      arg-name="word.password"
-      default="anonymous"/>
-    <option
-      name="workspace"
-      arg-name="word.name"/>
-  </command>
-
-  <command name="logout"/>
-
-  <command name="lscollect" impl="lsCollect">
-    <alias name="collect"/>
-    <argument
-      name="pattern"
-      position="0"
-      arg-name="common.namepattern"
-      description="common.namepattern.desc"
-      required="true"/>
-    <option
-      name="path"
-      context-key="srcPath"
-      arg-name="common.jcrpath"
-      description="common.jcrpath.desc"/>
-    <option
-      name="depth"
-      arg-name="word.int"
-      description="word.int"
-      default="1"/>
-    <option
-      name="maxItems"
-      arg-name="word.int"
-      description="phrase.maxitems"/>
-  </command>
-
-  <command name="lscollectnodes" impl="lsCollectNodes">
-    <alias name="lscollectn"/>
-    <alias name="collectn"/>
-    <argument
-      name="pattern"
-      position="0"
-      arg-name="common.namepattern"
-      description="common.namepattern.desc"
-      required="true"/>
-    <option
-      name="depth"
-      arg-name="word.int"
-      description="word.int"
-      default="1"/>
-    <option
-      name="maxItems"
-      arg-name="word.int"
-      description="phrase.maxitems"/>
-    <flag name="uuid" description="cmd.lsnodes.uuid"/>
-    <flag name="nsize" description="cmd.lsnodes.nsize"/>
-    <flag name="psize" description="cmd.lsnodes.psize"/>
-    <flag name="rsize" description="cmd.lsnodes.rsize"/>
-    <flag name="m" description="cmd.lsnodes.m"/>
-    <flag name="v" description="cmd.lsnodes.v"/>
-    <flag name="l" description="cmd.lsnodes.l"/>
-    <flag name="r" description="cmd.lsnodes.r"/>
-    <flag name="locked" description="cmd.lsnodes.locked"/>
-    <flag name="hasLock" description="cmd.lsnodes.hasLock"/>
-    <flag name="locktoken"
-      context-key="lockToken"
-      description="cmd.lsnodes.locktoken"/>
-    <flag name="new" description="cmd.lsnodes.new"/>
-    <flag name="mod" description="cmd.lsnodes.mod"/>
-    <flag name="path" description="cmd.lsnodes.path"/>
-  </command>
-
-  <command name="lscollectproperties" impl="lsCollectProperties">
-    <alias name="collectp"/>
-    <alias name="collectprop"/>
-    <argument
-      name="pattern"
-      position="0"
-      arg-name="common.namepattern"
-      description="common.namepattern.desc"
-      required="true"/>
-    <option
-      name="depth"
-      arg-name="word.depth"
-      description="word.depth"
-      default="1"/>
-    <option
-      name="maxitems"
-      arg-name="word.int"
-      description="phrase.maxitems"/>
-  </command>
-
-  <command name="lsitems" impl="lsItems">
-    <alias name="ls"/>
-    <alias name="dir"/>
-    <argument
-      name="pattern"
-      position="0"
-      arg-name="common.namepattern"
-      description="common.namepattern.desc"/>
-    <option
-      name="maxItems"
-      arg-name="word.int"
-      description="phrase.maxitems"/>
-  </command>
-
-  <command name="lsproperties" impl="lsProperties">
-    <alias name="lsp"/>
-    <alias name="lsprop"/>
-    <argument
-      name="pattern"
-      position="0"
-      arg-name="common.namepattern"
-      description="common.namepattern.desc"/>
-    <option
-      name="maxItems"
-      arg-name="word.int"
-      description="phrase.maxitems"/>
-  </command>
-
-  <command name="lsnodes" impl="lsNodes">
-    <alias name="lsn"/>
-    <argument
-      name="pattern"
-      position="0"
-      arg-name="common.namepattern"
-      description="common.namepattern.desc"/>
-    <option
-      name="maxItems"
-      arg-name="word.int"
-      description="phrase.maxitems"/>
-    <flag name="path" description="cmd.lsnodes.path"/>
-    <flag name="uuid" description="cmd.lsnodes.uuid"/>
-    <flag name="m" context-key="mixin" description="cmd.lsnodes.m"/>
-    <flag name="nsize" context-key="nodeSize" description="cmd.lsnodes.nsize"/>
-    <flag name="psize" context-key="propertiesSize" description="cmd.lsnodes.psize"/>
-    <flag name="rsize" context-key="referencesSize" description="cmd.lsnodes.rsize"/>
-    <flag name="v" context-key="versionable" description="cmd.lsnodes.v"/>
-    <flag name="l" context-key="lockable" description="cmd.lsnodes.l"/>
-    <flag name="r" context-key="referenceable" description="cmd.lsnodes.r"/>
-    <flag name="locked" description="cmd.lsnodes.locked"/>
-    <flag name="haslock" context-key="hasLock" description="cmd.lsnodes.hasLock"/>
-    <flag name="locktoken" context-key="lockToken"/>
-    <flag name="new" description="cmd.lsnodes.new"/>
-    <flag name="mod" context-key="modified" description="cmd.lsnodes.mod"/>
-  </command>
-
-  <command name="lsreferences" impl="lsReferences">
-    <alias name="lsr"/>
-    <alias name="lsref"/>
-    <argument
-      name="path"
-      position="0"
-      arg-name="common.jcrpath"
-      description="common.jcrpath.desc"/>
-  </command>
-
-  <command name="lsversions" impl="lsVersions">
-    <alias name="lsv"/>
-    <alias name="lsver"/>
-    <argument
-      name="path"
-      position="0"
-      arg-name="common.jcrpath"
-      description="common.jcrpath.desc"/>
-  </command>
-
-  <command name="merge">
-    <argument
-      name="srcWorkspace"
-      arg-name="word.source"
-      description="word.source"
-      position="0" />
-    <argument name="path"
-      arg-name="common.jcrpath"
-      description="common.jcrpath.desc"
-      position="1" />
-    <flag name="bestEffort"/>
-  </command>
-
-  <command name="move">
-    <argument
-      name="srcAbsPath"
-      position="0"
-      arg-name="common.jcrabspath"
-      description="common.jcrabspath.desc"
-      required="true"/>
-    <argument
-      name="destAbsPath"
-      position="1"
-      arg-name="common.jcrabspath"
-      description="common.jcrabspath.desc"
-      required="true"/>
-  </command>
-
-  <command name="orderbefore" impl="orderBefore">
-    <alias name="order"/>
-    <argument
-      name="srcChild"
-      position="0"
-      arg-name="common.jcrpath"
-      description="common.jcrpath.desc"
-      required="true"/>
-    <argument
-      name="destChild"
-      position="1"
-      arg-name="common.jcrpath"
-      description="common.jcrpath.desc"
-      required="true"/>
-    <option
-      name="parent"
-      context-key="parentPath"
-      arg-name="common.jcrpath"
-      description="common.jcrpath.desc"/>
-  </command>
-
-  <command name="refresh">
-    <argument
-      name="path"
-      arg-name="common.jcrpath"
-      description="common.jcrpath.desc"
-      position="0"/>
-    <flag name="keepChanges" description="phrase.keepchanges"/>
-  </command>
-
-  <command name="refreshlock" impl="refreshLock">
-    <alias name="refreshl"/>
-    <argument
-      name="path"
-      position="0"
-      arg-name="common.jcrpath"
-      description="common.jcrpath.desc"/>
-  </command>
-
-  <command name="registernamespace" impl="registerNamespace">
-    <argument
-      name="prefix"
-      position="0"
-      arg-name="word.prefix"
-      description="word.prefix"/>
-    <argument
-      name="uri"
-      position="1"
-      arg-name="word.uri"
-      description="word.uri"/>
-  </command>
-
-  <command name="removeitem" impl="removeItem">
-    <alias name="remove"/>
-    <alias name="delete"/>
-    <alias name="rm"/>
-    <alias name="del"/>
-    <argument
-      name="path"
-      position="0"
-      arg-name="common.jcrpath"
-      description="common.jcrpath"/>
-  </command>
-
-  <command name="removeitems" impl="removeItems">
-    <alias name="rmitems"/>
-    <alias name="delitems"/>
-    <alias name="deleteitems"/>
-    <argument
-      name="pattern"
-      position="0"
-      arg-name="common.namepattern"
-      description="common.namepattern.desc"
-      required="true"/>
-    <option
-      name="root"
-      context-key="path"
-      arg-name="common.jcrpath"
-      description="common.jcrpath.desc"/>
-  </command>
-
-  <command name="removelocktoken" impl="removeLockToken">
-    <alias name="removetoken"/>
-    <argument
-      name="token"
-      position="0"
-      arg-name="phrase.locktoken"
-      description="phrase.locktoken"
-      required="true"/>
-  </command>
-
-  <command name="removemixin" impl="removeMixin">
-    <alias name="removemix"/>
-    <alias name="deletemix"/>
-    <alias name="delmix"/>
-    <argument
-      name="mixin"
-      position="0"
-      arg-name="word.mixin"
-      description="word.mixin"
-      required="true"/>
-    <argument
-      name="path"
-      position="1"
-      arg-name="common.jcrpath"
-      description="common.jcrpath.desc"/>
-  </command>
-
-  <command name="removeversion" impl="removeVersion">
-    <alias name="removev"/>
-    <argument name="name"
-      position="0"
-      arg-name="word.name"
-      description="word.name"/>
-    <option name="path"
-      arg-name="common.jcrpath"
-      description="common.jcrpath.desc"/>
-  </command>
-
-  <command name="removeversionlabel" impl="removeVersionLabel">
-    <alias name="removevlabel"/>
-    <alias name="delvlabel"/>
-    <argument name="label"
-      arg-name="word.label"
-      description="word.label"
-      position="0" />
-    <option name="path"
-      arg-name="common.jcrpath"
-      description="common.jcrpath.desc"/>
-  </command>
-
-  <command name="removeversionbylabel" impl="removeVersionByLabel">
-    <alias name="removevbylabel"/>
-    <alias name="delvbylabel"/>
-    <alias name="removevbyl"/>
-    <alias name="delvbyl"/>
-    <argument name="label"
-      arg-name="word.label"
-      description="word.label"
-      position="0" />
-    <option name="path"
-      arg-name="common.jcrpath"
-      description="common.jcrpath.desc"/>
-  </command>
-
-  <command name="rename">
-    <argument
-      name="srcPath"
-      position="0"
-      arg-name="common.jcrpath"
-      description="common.jcrpath.desc"
-      required="true"/>
-    <argument
-      name="destPath"
-      position="1"
-      arg-name="common.jcrpath"
-      description="common.jcrpath.desc"
-      required="true"/>
-  </command>
-
-  <command name="restore">
-    <argument name="version"
-      position="0"
-      arg-name="word.version"
-      description="word.version"/>
-    <option name="path"
-      arg-name="common.jcrpath"
-      description="common.jcrpath.desc"/>
-    <flag name="removeexisting"
-      context-key="removeExisting"
-      description="phrase.removeExisting"/>
-  </command>
-
-  <command name="restorebylabel" impl="restoreByLabel">
-    <alias name="restorebyl"/>
-    <argument name="label"
-      arg-name="word.label"
-      description="word.label"
-      position="0" />
-    <option name="path"
-      arg-name="common.jcrpath"
-      description="common.jcrpath.desc"/>
-    <flag name="removeexisting"
-      context-key="removeExisting"
-      description="phrase.removeExisting"/>
-  </command>
-
-  <command name="save">
-    <argument
-      name="path"
-      position="0"
-      arg-name="common.jcrpath"
-      description="common.jcrpath.desc"/>
-  </command>
-
-  <command name="setmultivalueproperty" impl="setMultiValueProperty">
-    <alias name="setmultiprop"/>
-    <argument
-      name="name"
-      position="0"
-      arg-name="word.name"
-      description="word.name"
-      required="true"/>
-    <argument
-      name="value"
-      position="1"
-      arg-name="word.value"
-      description="word.value"
-      required="true"/>
-    <option
-      name="type"
-      arg-name="common.nodetype"
-      description="common.nodetype.desc" />
-    <option
-      name="regexp"
-      context-key="regExp"
-      arg-name="phrase.regexp"
-      description="phrase.regexp"
-      default=","/>
-  </command>
-
-  <command name="setproperty" impl="setProperty">
-    <alias name="setprop"/>
-    <alias name="setp"/>
-    <argument
-      name="name"
-      position="0"
-      arg-name="word.name"
-      description="word.name"
-      required="true"/>
-    <argument
-      name="value"
-      position="1"
-      arg-name="word.value"
-      description="word.value"
-      required="true"/>
-    <option
-      name="type"
-      arg-name="common.nodetype"
-      description="common.nodetype.desc" />
-    <option
-      name="parent"
-      context-key="parentPath"
-      arg-name="common.jcrpath"
-      description="common.jcrpath.desc" />
-  </command>
-
-  <command name="setpropertyfromfile" impl="setPropertyFromFile">
-    <alias name="setpropfromfile"/>
-    <alias name="setfsprop"/>
-    <argument
-      name="name"
-      position="0"
-      arg-name="word.name"
-      description="word.name"
-      required="true"/>
-    <argument
-      name="fsPath"
-      position="1"
-      arg-name="common.fspath"
-      description="common.fspath.desc"
-      context-key="value"
-      required="true"/>
-    <option
-      name="type"
-      arg-name="common.nodetype"
-      description="common.nodetype"/>
-    <option
-      name="parentPath"
-      arg-name="common.jcrpath"
-      description="common.jcrpath.desc"/>
-  </command>
-
-  <command name="source">
-    <argument
-      name="file"
-      position="0"
-      arg-name="common.fspath"
-      description="common.fspath.desc"
-      required="true"/>
-  </command>
-
-  <command name="sqlquery" impl="sqlQuery">
-    <alias name="sql"/>
-    <argument
-      name="statement"
-      position="0"
-      arg-name="word.stmt"
-      description="word.stmt"
-      required="true"/>
-    <option
-      name="maxitems"
-      arg-name="word.int"
-      description="phrase.maxitems"/>
-    <flag name="uuid" description="cmd.lsnodes.uuid"/>
-    <flag name="nsize" description="cmd.lsnodes.nsize"/>
-    <flag name="psize" description="cmd.lsnodes.psize"/>
-    <flag name="rsize" description="cmd.lsnodes.rsize"/>
-    <flag name="m" description="cmd.lsnodes.m"/>
-    <flag name="v" description="cmd.lsnodes.v"/>
-    <flag name="l" description="cmd.lsnodes.l"/>
-    <flag name="r" description="cmd.lsnodes.r"/>
-    <flag name="locked" description="cmd.lsnodes.locked"/>
-    <flag name="hasLock" description="cmd.lsnodes.hasLock"/>
-    <flag name="new" description="cmd.lsnodes.new"/>
-    <flag name="mod" description="cmd.lsnodes.mod"/>
-    <flag name="path" description="cmd.lsnodes.path"/>
-    <flag name="locktocken" description="cmd.lsnodes.locktoken"/>
-  </command>
-
-  <command name="startjackrabbit" impl="startJackrabbit">
-    <alias name="start"/>
-    <argument
-      name="config"
-      position="0"
-      arg-name="common.fspath"
-      description="common.fspath.desc"
-      required="true"/>
-    <argument
-      name="home"
-      position="1"
-      arg-name="common.fspath"
-      description="common.fspath.desc"
-      required="true"/>
-  </command>
-
-  <command name="stopjackrabbit" impl="stopJackrabbit">
-    <alias name="stop"/>
-  </command>
-
-  <command name="unlock">
-    <argument
-      name="path"
-      position="0"
-      arg-name="common.jcrpath"
-      description="common.jcrpath.desc"/>
-  </command>
-
-  <command name="xpathquery" impl="xpathQuery">
-    <alias name="xpath"/>
-    <argument
-      name="statement"
-      position="0"
-      arg-name="word.stmt"
-      description="word.stmt"
-      required="true"/>
-    <option
-      name="maxitems"
-      arg-name="word.int"
-      description="phrase.maxitems"/>
-    <flag name="uuid" description="cmd.lsnodes.uuid"/>
-    <flag name="nsize" description="cmd.lsnodes.nsize"/>
-    <flag name="psize" description="cmd.lsnodes.psize"/>
-    <flag name="rsize" description="cmd.lsnodes.rsize"/>
-    <flag name="m" description="cmd.lsnodes.m"/>
-    <flag name="v" description="cmd.lsnodes.v"/>
-    <flag name="l" description="cmd.lsnodes.l"/>
-    <flag name="r" description="cmd.lsnodes.r"/>
-    <flag name="locked" description="cmd.lsnodes.locked"/>
-    <flag name="hasLock" description="cmd.lsnodes.hasLock"/>
-    <flag name="new" description="cmd.lsnodes.new"/>
-    <flag name="mod" description="cmd.lsnodes.mod"/>
-    <flag name="path" description="cmd.lsnodes.path"/>
-    <flag name="locktoken" description="cmd.lsnodes.locktoken"/>
-  </command>
-
-</commands>
\ No newline at end of file
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/command.xml b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/command.xml
deleted file mode 100644
index 60d1d3a..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/command.xml
+++ /dev/null
@@ -1,261 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<chains>
-	<catalog>
-
-		<command name="addMixin"
-			className="org.apache.jackrabbit.command.mixin.AddMixin"/>
-
-		<command name="addNode"
-			className="org.apache.jackrabbit.command.core.AddNode"/>
-					
-		<command name="addLockToken"
-			className="org.apache.jackrabbit.command.lock.AddLockToken"/>
-
-		<command name="addVersionLabel"
-			className="org.apache.jackrabbit.command.version.AddVersionLabel"/>
-
-		<command name="cat"
-			className="org.apache.jackrabbit.command.info.Cat"/>
-
-		<command name="checkin"
-			className="org.apache.jackrabbit.command.version.Checkin"/>
-
-		<command name="checkout"
-			className="org.apache.jackrabbit.command.version.Checkout"/>
-
-		<command name="clearWorkspace"
-			className="org.apache.jackrabbit.command.core.ClearWorkspace"/>
-
-		<command name="clone"
-			className="org.apache.jackrabbit.command.core.Clone"/>
-
-		<command name="collectItems"
-			className="org.apache.jackrabbit.command.collect.CollectItems"/>
-
-		<command name="collectNodes"
-			className="org.apache.jackrabbit.command.collect.CollectNodes"/>
-
-		<command name="collectProperties"
-			className="org.apache.jackrabbit.command.collect.CollectProperties"/>
-
-		<command name="connectToRmiServer"
-			className="org.apache.jackrabbit.command.ext.ConnectToRmiServer"/>
-
-		<command name="copy"
-			className="org.apache.jackrabbit.command.core.Copy"/>
-
-		<command name="createWorkspace"
-			className="org.apache.jackrabbit.command.ext.CreateWorkspace"/>
-
-		<command name="currentNode"
-			className="org.apache.jackrabbit.command.core.CurrentNode"/>
-
-		<command name="describe"
-			className="org.apache.jackrabbit.command.info.Describe"/>
-
-		<command name="dump"
-			className="org.apache.jackrabbit.command.info.Dump"/>
-
-		<command name="exportFileSystem"
-			className="org.apache.jackrabbit.command.fs.ExportFileSystem"/>
-
-		<command name="exportPropertyToFile"
-			className="org.apache.jackrabbit.command.fs.ExportPropertyToFile"/>
-
-		<command name="exportDocViewToFile"
-			className="org.apache.jackrabbit.command.xml.ExportDocViewToFile"/>
-
-		<command name="exportSysViewToFile"
-			className="org.apache.jackrabbit.command.xml.ExportSysViewToFile"/>
-
-		<command name="help"
-			className="org.apache.jackrabbit.command.info.Help"/>
-
-		<command name="importFileSystem"
-			className="org.apache.jackrabbit.command.fs.ImportFileSystem"/>
-
-		<command name="importXmlFromFile"
-			className="org.apache.jackrabbit.command.xml.ImportXmlFromFile"/>
-
-		<command name="lock"
-			className="org.apache.jackrabbit.command.lock.Lock"/>
-
-		<command name="login"
-			className="org.apache.jackrabbit.command.core.Login"/>
-
-		<command name="logout"
-			className="org.apache.jackrabbit.command.core.Logout"/>
-			
-		<chain name="lsCollect">
-			<command name="collectItems"
-				className="org.apache.jackrabbit.command.collect.CollectItems"
-				destKey="collected"/>
-			<command name="lsCollectedItems"
-				className="org.apache.jackrabbit.command.info.LsCollectedItems"
-				fromKey="collected"/>
-			<command name="remove"
-				className="org.apache.commons.chain.generic.RemoveCommand"
-				fromKey="collected"/>
-		</chain>
-		
-		<chain name="lsCollectNodes">
-			<command name="collectNodes"
-				className="org.apache.jackrabbit.command.collect.CollectNodes"
-				destKey="collected"/>
-			<command name="lsCollectedNodes"
-				className="org.apache.jackrabbit.command.info.LsCollectedNodes"
-				fromKey="collected"/>
-			<command name="remove"
-				className="org.apache.commons.chain.generic.RemoveCommand"
-				fromKey="collected"/>
-		</chain>
-		
-		<chain name="lsCollectProperties">
-			<command name="collectProperties"
-				className="org.apache.jackrabbit.command.collect.CollectProperties"
-				destKey="collected"/>
-			<command name="lsCollectedNodes"
-				className="org.apache.jackrabbit.command.info.LsCollectedProperties"
-				fromKey="collected"/>
-			<command name="remove"
-				className="org.apache.commons.chain.generic.RemoveCommand"
-				fromKey="collected"/>
-		</chain>
-
-		<command name="lsCollectedItems"
-			className="org.apache.jackrabbit.command.info.LsCollectedItems"/>
-
-		<command name="lsCollectedNodes"
-			className="org.apache.jackrabbit.command.info.LsCollectedNodes"/>
-
-		<command name="lsCollectedItems"
-			className="org.apache.jackrabbit.command.info.LsCollectedProperties"/>
-
-		<command name="lsItems"
-			className="org.apache.jackrabbit.command.info.LsItems"/>
-
-		<command name="lsNamespaces"
-			className="org.apache.jackrabbit.command.info.LsNamespaces"/>
-
-		<command name="lsNodes"
-			className="org.apache.jackrabbit.command.info.LsNodes"/>
-
-		<command name="lsProperties"
-			className="org.apache.jackrabbit.command.info.LsProperties"/>
-
-		<command name="lsReferences"
-			className="org.apache.jackrabbit.command.info.LsReferences"/>
-
-		<command name="lsVersions"
-			className="org.apache.jackrabbit.command.info.LsVersions"/>
-
-		<command name="merge"
-			className="org.apache.jackrabbit.command.version.Merge"/>
-
-		<command name="move"
-			className="org.apache.jackrabbit.command.core.Move"/>
-
-		<command name="orderBefore"
-			className="org.apache.jackrabbit.command.core.OrderBefore"/>
-
-		<command name="readValue"
-			className="org.apache.jackrabbit.command.core.ReadValue"/>
-
-		<command name="refresh"
-			className="org.apache.jackrabbit.command.core.Refresh"/>
-
-		<command name="refreshLock"
-			className="org.apache.jackrabbit.command.lock.RefreshLock"/>
-
-		<command name="registerNamespace"
-			className="org.apache.jackrabbit.command.namespace.RegisterNamespace"/>
-
-		<command name="removeItem"
-			className="org.apache.jackrabbit.command.core.RemoveItem"/>
-						
-		<command name="removeItems"
-			className="org.apache.jackrabbit.command.core.RemoveItems"/>
-			
-		<command name="removeLock"
-			className="org.apache.jackrabbit.command.lock.RemoveLockToken"/>
-
-		<command name="removeLockToken"
-			className="org.apache.jackrabbit.command.lock.RemoveLockToken"/>
-
-		<command name="removeMixin"
-			className="org.apache.jackrabbit.command.mixin.RemoveMixin"/>
-
-		<command name="removeVersion"
-			className="org.apache.jackrabbit.command.version.RemoveVersion"/>
-
-		<command name="removeVersionByLabel"
-			className="org.apache.jackrabbit.command.version.RemoveVersionByLabel"/>
-		
-		<command name="removeVersionLabel"
-			className="org.apache.jackrabbit.command.version.RemoveVersionLabel"/>
-
-		<command name="rename"
-			className="org.apache.jackrabbit.command.core.Rename"/>
-
-		<command name="restore"
-			className="org.apache.jackrabbit.command.version.Restore"/>
-
-		<command name="restoreByLabel"
-			className="org.apache.jackrabbit.command.version.RestoreByLabel"/>
-
-		<command name="save"
-			className="org.apache.jackrabbit.command.core.Save"/>
-
-		<command name="setMultiValueProperty"
-			className="org.apache.jackrabbit.command.core.SetMultivalueProperty"/>
-
-		<command name="setProperty"
-			className="org.apache.jackrabbit.command.core.SetProperty"/>
-			
-		<command name="setPropertyFromFile"
-			className="org.apache.jackrabbit.command.fs.SetPropertyFromFile"/>
-
-		<command name="source"
-			className="org.apache.jackrabbit.command.cli.SourceCommand"/>
-
-		<chain name="sqlQuery">
-			<command name="sqlQuery"
-				className="org.apache.jackrabbit.command.query.SQLQuery"
-				destKey="collected"/>
-			<command name="lsCollectedItems"
-				className="org.apache.jackrabbit.command.info.LsCollectedItems"
-				fromKey="collected"/>
-			<command name="remove"
-				className="org.apache.commons.chain.generic.RemoveCommand"
-				fromKey="collected"/>
-		</chain>
-
-		<command name="startJackrabbit"
-			className="org.apache.jackrabbit.command.ext.StartJackrabbit"/>
-
-		<command name="startJackrabbitSingleton"
-			className="org.apache.jackrabbit.command.ext.StartJackrabbitSingleton"/>
-						
-		<command name="stopJackrabbit"
-			className="org.apache.jackrabbit.command.ext.StopJackrabbit"/>
-
-		<command name="unlock"
-			className="org.apache.jackrabbit.command.lock.Unlock"/>
-
-		<command name="unregisterNamespace"
-			className="org.apache.jackrabbit.command.namespace.UnregisterNamespace"/>
-
-		<chain name="xpathQuery">
-			<command name="xpathQuery"
-				className="org.apache.jackrabbit.command.query.XPathQuery"
-				destKey="collected"/>
-			<command name="lsCollectedItems"
-				className="org.apache.jackrabbit.command.info.LsCollectedItems"
-				fromKey="collected"/>
-			<command name="remove"
-				className="org.apache.commons.chain.generic.RemoveCommand"
-				fromKey="collected"/>
-		</chain>
-
-	</catalog>
-</chains>
\ No newline at end of file
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/digester-rules.dtd b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/digester-rules.dtd
deleted file mode 100644
index b568864..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/digester-rules.dtd
+++ /dev/null
@@ -1,211 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<!-- $Id: digester-rules.dtd 155412 2005-02-26 12:58:36Z dirkv $
-  
- Copyright 2001-2005 The Apache Software Foundation.
- 
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-  
-       http://www.apache.org/licenses/LICENSE-2.0
-  
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
---> 
-
-<!--
-        "Digester" component of the Jakarta Commons Subproject
-        DTD for the definition of Digester rules in XML.
-        $Id: digester-rules.dtd 155412 2005-02-26 12:58:36Z dirkv $
-
-        Applications wishing to reference this DTD in their own documents
-        should use the following DOCTYPE declaration:
-
-        <!DOCTYPE digester-rules PUBLIC
-         "-//Jakarta Apache //DTD digester-rules XML V1.0//EN"
-         "digester-rules.dtd">
-
--->
-
-<!-- This document type defines an XML format for defining Digester rules.
-     Digester is a framework for pattern-matching-based parsing of XML into
-     Java objects. See http://jakarta.apache.org/commons/digester.html.  -->
-
-<!ENTITY % rule-elements "bean-property-setter-rule | call-method-rule |
-                   call-param-rule | object-param-rule |
-                   factory-create-rule | object-create-rule |
-                   set-properties-rule | set-nested-properties-rule |
-                   set-property-rule | set-top-rule |
-                   set-next-rule | set-root-rule" >
-
-<!-- digester-rules is the root element. -->
-<!ELEMENT digester-rules (pattern | include | %rule-elements; )*>
-
-
-<!-- <pattern> defines a matching pattern, or part of a matching pattern. Any
-     rule nested in a pattern element prepends its parent's to its pattern.
-     Patterns may be recursively nested.
-     Example:
-       <pattern value="foo">
-          <pattern value="bar">
-            <object-create-rule pattern="baz" classname="Fubar" />
-          </pattern>
-       </pattern>
-
-     The above sample fragment defines an ObjectCreateRule associated
-     with the pattern "foo/bar/baz".
-
-  Note that the use of pattern elements is optional; an alternative is for
-  each rule element to contain a 'pattern' attribute.   -->
-<!ELEMENT pattern (pattern | include | %rule-elements; )*>
-<!ATTLIST pattern
-    value CDATA #REQUIRED>
-
-
-<!--
-  <include> allows one set of digester rules to be included inside
-  another. The 'path' attribute contains the URI of the document to
-  include. Inclusion behaves as if the included rules document is
-  'macro-expanded' within the outer document.
-  Programmatically initialized rules can be included as well, via the
-  'class' attribute. The 'class' attribute should contain the name
-  of a class that implements
-  org.apache.commons.digester.xmlrules.DigesterRulesSource.
--->
-<!ELEMENT include EMPTY>
-<!ATTLIST include
-    path  CDATA #IMPLIED
-    class CDATA #IMPLIED>
-
-
-<!-- Each 'rule' element below corresponds to a concrete subclass
-     of org.apache.framework.digester.Rule.
-     Each 'rule' element has an optional 'pattern' attribute, which
-     defines the pattern for that rule instance. If the rule element
-     is nested inside one or more <pattern> elements, those patterns
-     will be prepended to the pattern specified in the rule's 'pattern'
-     attribute. -->
-
-<!-- Bean Property Setter Rule -->
-<!ELEMENT bean-property-setter-rule EMPTY>
-<!ATTLIST bean-property-setter-rule
-    pattern      CDATA #IMPLIED
-    propertyname CDATA #IMPLIED>
-
-<!-- CallMethodRule
-  -
-  - Note that paramtypes is ignored unless paramcount is defined.
-  -->
-<!ELEMENT call-method-rule EMPTY>
-<!ATTLIST call-method-rule
-    pattern      CDATA #IMPLIED
-    targetoffset CDATA #IMPLIED
-    methodname   CDATA #REQUIRED
-    paramcount   CDATA #IMPLIED
-    paramtypes   CDATA #IMPLIED>
-
-<!-- 
-    CallParamRule 
-    attrname - set param from attribute value (cannot be combined with from-stack)
-    from-stack - set param from stack (cannot be combined with attrname)
-    -->
-<!ELEMENT call-param-rule EMPTY>
-<!ATTLIST call-param-rule
-    pattern  CDATA #IMPLIED
-    paramnumber CDATA #REQUIRED
-    attrname CDATA #IMPLIED
-    from-stack CDATA #IMPLIED
-    stack-index CDATA #IMPLIED>
-    
-<!--
-    ObjectParamRule
-    attrname  
-           - an arbitrary Object defined programatically, assigned if the 
-             element pattern AND specified attribute name are matched
-    param 
-           - an arbitrary Object defined programatically, assigned when the 
-             element pattern associated with the Rule is matched
-    type 
-           - class name for object
-    value 
-           - initial value for the object
-    -->
-<!ELEMENT object-param-rule EMPTY>
-<!ATTLIST object-param-rule
-    pattern  CDATA #IMPLIED
-    paramnumber CDATA #REQUIRED
-    param CDATA #REQUIRED
-    attrname CDATA #IMPLIED
-    type CDATA #REQUIRED
-    value CDATA #IMPLIED>
-
-<!-- 
-    FactoryCreateRule 
-    
-    ignore-exceptions - if this attribute is (ignore case) 'true' then any exceptions
-                        thrown by the object create rule will be ignore.
-                        This will allow processing to continue.
-    -->
-<!ELEMENT factory-create-rule EMPTY>
-<!ATTLIST factory-create-rule
-    pattern   CDATA #IMPLIED
-    classname CDATA #REQUIRED
-    attrname  CDATA #IMPLIED
-    ignore-exceptions  CDATA #IMPLIED> 
-
-<!-- ObjectCreateRule -->
-<!ELEMENT object-create-rule EMPTY>
-<!ATTLIST object-create-rule
-    pattern   CDATA #IMPLIED
-    classname CDATA #REQUIRED
-    attrname  CDATA #IMPLIED>
-
-<!-- SetPropertiesRule -->
-<!ELEMENT set-properties-rule (alias)*>
-<!ATTLIST set-properties-rule
-    pattern   CDATA #IMPLIED>
-
-<!-- SetNestedPropertiesRule -->
-<!ELEMENT set-nested-properties-rule (alias)*>
-<!ATTLIST set-nested-properties-rule
-    pattern                       CDATA #IMPLIED
-    allow-unknown-child-elements  CDATA #IMPLIED>
-
-<!-- An alias is a custom attribute->property name mapping -->
-<!ELEMENT alias EMPTY>
-<!ATTLIST alias
- attr-name CDATA #REQUIRED
- prop-name CDATA #IMPLIED>
-
-<!-- SetPropertyRule -->
-<!ELEMENT set-property-rule EMPTY>
-<!ATTLIST set-property-rule
-    pattern   CDATA #IMPLIED
-    name      CDATA #IMPLIED
-    value     CDATA #IMPLIED>
-
-<!-- SetTopRule -->
-<!ELEMENT set-top-rule EMPTY>
-<!ATTLIST set-top-rule
-    pattern    CDATA #IMPLIED
-    methodname CDATA #REQUIRED
-    paramtype  CDATA #IMPLIED>
-
-<!-- SetNextRule -->
-<!ELEMENT set-next-rule EMPTY>
-<!ATTLIST set-next-rule
-    pattern    CDATA #IMPLIED
-    methodname CDATA #REQUIRED
-    paramtype  CDATA #IMPLIED>
-
-<!-- SetRootRule -->
-<!ELEMENT set-root-rule EMPTY>
-<!ATTLIST set-root-rule
-    pattern    CDATA #IMPLIED
-    methodname CDATA #REQUIRED
-    paramtype  CDATA #IMPLIED>
-
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/package.html b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/package.html
deleted file mode 100644
index 4c12ce2..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/package.html
+++ /dev/null
@@ -1,2 +0,0 @@
-<p>This package contains a JCR Command Line Interface backed by Commons chain 
-	commands.</p>
\ No newline at end of file
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/collect/AbstractCollect.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/collect/AbstractCollect.java
deleted file mode 100644
index cb58d13..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/collect/AbstractCollect.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.collect;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-import javax.jcr.Node;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-import org.apache.jackrabbit.util.ChildrenCollectorFilter;
-
-/**
- * Collect the children items from the given node and store them under the given
- * key.
- */
-public abstract class AbstractCollect implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(AbstractCollect.class);
-
-    // ---------------------------- < keys >
-
-    /** path key. Default value is "." */
-    private String srcPathKey = "srcPath";
-
-    /** context attribute key for the depth attribute. */
-    private String depthKey = "depth";
-
-    /**
-     * context attribute key for the name pattern attribute. Default value is
-     * "*"
-     */
-    private String namePatternKey = "namePattern";
-
-    /** context attribute key for the destination attribute */
-    private String destKey = "collected";
-
-    /**
-     * {@inheritDoc}
-     */
-    public final boolean execute(Context ctx) throws Exception {
-        if (this.destKey == null || this.destKey.length() == 0) {
-            throw new IllegalStateException("target variable is not set");
-        }
-        String relPath = (String) ctx.get(this.srcPathKey);
-        if (relPath == null) {
-            relPath = ".";
-        }
-        String namePattern = (String) ctx.get(this.namePatternKey);
-        if (namePattern == null || namePattern.length() == 0) {
-            namePattern = "*";
-        }
-
-        int depth = Integer.parseInt((String) ctx.get(this.depthKey));
-
-        Node node = CommandHelper.getNode(ctx, relPath);
-        if (log.isDebugEnabled()) {
-            log.debug("collecting nodes from " + node.getPath() + " depth="
-                    + depth + " pattern=" + namePattern
-                    + " into target variable " + this.destKey);
-        }
-
-        Collection items = new ArrayList();
-        ChildrenCollectorFilter collector = new ChildrenCollectorFilter(
-            namePattern, items, isCollectNodes(), isCollectProperties(), depth);
-        collector.visit(node);
-        ctx.put(this.destKey, items.iterator());
-
-        return false;
-    }
-
-    /**
-     * @return Returns the depthKey.
-     */
-    public String getDepthKey() {
-        return depthKey;
-    }
-
-    /**
-     * @param depthKey
-     *        Set the context attribute key for the depth attribute
-     */
-    public void setDepthKey(String depthKey) {
-        this.depthKey = depthKey;
-    }
-
-    /**
-     * @return Returns the namePatternKey.
-     */
-    public String getNamePatternKey() {
-        return namePatternKey;
-    }
-
-    /**
-     * @param namePatternKey
-     *        context attribute key for the name pattern attribute
-     */
-    public void setNamePatternKey(String namePatternKey) {
-        this.namePatternKey = namePatternKey;
-    }
-
-    /**
-     * Collect nodes flag
-     * @return true if <code>Node</code> s must be collected
-     */
-    protected abstract boolean isCollectNodes();
-
-    /**
-     * Collect properties flag
-     * @return true if <code>Property</code> s must be collected
-     */
-    protected abstract boolean isCollectProperties();
-
-    /**
-     * @return the destination key
-     */
-    public String getDestKey() {
-        return destKey;
-    }
-
-    /**
-     * Sets the destination key
-     * @param destKey
-     *        the detination key
-     */
-    public void setDestKey(String destKey) {
-        this.destKey = destKey;
-    }
-
-    /**
-     * @return the source path key
-     */
-    public String getSrcPathKey() {
-        return srcPathKey;
-    }
-
-    /**
-     * Sets the source path key
-     * @param srcPathKey
-     *        the source path key
-     */
-    public void setSrcPathKey(String srcPathKey) {
-        this.srcPathKey = srcPathKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/collect/CollectItems.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/collect/CollectItems.java
deleted file mode 100644
index dfac3d3..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/collect/CollectItems.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.collect;
-
-/**
- * Collect children, either nodes or properties
- */
-public class CollectItems extends AbstractCollect {
-
-    /**
-     * {@inheritDoc}
-     */
-    protected boolean isCollectNodes() {
-        return true;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    protected boolean isCollectProperties() {
-        return true;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/collect/CollectNodes.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/collect/CollectNodes.java
deleted file mode 100644
index 64bab7d..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/collect/CollectNodes.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.collect;
-
-/**
- * Collect nodes only
- */
-public class CollectNodes extends AbstractCollect {
-
-    /**
-     * {@inheritDoc}
-     */
-    protected boolean isCollectNodes() {
-        return true;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    protected boolean isCollectProperties() {
-        return false;
-    }
-
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/collect/CollectProperties.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/collect/CollectProperties.java
deleted file mode 100644
index 6ea69c2..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/collect/CollectProperties.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.collect;
-
-/**
- * Collect properties only
- */
-public class CollectProperties extends AbstractCollect {
-
-    /**
-     * {@inheritDoc}
-     */
-    protected boolean isCollectNodes() {
-        return false;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    protected boolean isCollectProperties() {
-        return true;
-    }
-
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/AbstractSetProperty.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/AbstractSetProperty.java
deleted file mode 100644
index 3dcef34..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/AbstractSetProperty.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.core;
-
-import org.apache.commons.chain.Command;
-
-/**
- * SetProperty superclass.
- */
-public abstract class AbstractSetProperty implements Command {
-    // ---------------------------- < keys >
-
-    /** destination node path key */
-    protected String parentPathKey = "parentPath";
-
-    /** Property name key */
-    protected String nameKey = "name";
-
-    /** Propety type key */
-    protected String typeKey = "type";
-
-    /** Property value key */
-    protected String valueKey = "value";
-
-    /**
-     * @return Returns the valueKey.
-     */
-    public String getValueKey() {
-        return valueKey;
-    }
-
-    /**
-     * @param valueKey
-     *        Set the context attribute key for the value attribute.
-     */
-    public void setValueKey(String valueKey) {
-        this.valueKey = valueKey;
-    }
-
-    /**
-     * @return the parent path key
-     */
-    public String getParentPathKey() {
-        return parentPathKey;
-    }
-
-    /**
-     * Sets the parent path key
-     * @param parentPathKey
-     *        the parent path key
-     */
-    public void setParentPathKey(String parentPathKey) {
-        this.parentPathKey = parentPathKey;
-    }
-
-    /**
-     * @return the name key
-     */
-    public String getNameKey() {
-        return nameKey;
-    }
-
-    /**
-     * Sets the name key
-     * @param nameKey
-     *        the name key
-     */
-    public void setNameKey(String nameKey) {
-        this.nameKey = nameKey;
-    }
-
-    /**
-     * @return the type key
-     */
-    public String getTypeKey() {
-        return typeKey;
-    }
-
-    /**
-     * Sets the type key
-     * @param typeKey
-     *        the type key
-     */
-    public void setTypeKey(String typeKey) {
-        this.typeKey = typeKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/AddNode.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/AddNode.java
deleted file mode 100644
index 45adb6b..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/AddNode.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.core;
-
-import javax.jcr.Node;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Add a node to the current working <code>Node</code>
- */
-public class AddNode implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(AddNode.class);
-
-    // ---------------------------- < keys >
-
-    /** Node type key */
-    private String typeKey = "type";
-
-    /** Node name key */
-    private String relPathKey = "relPath";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        Node node = CommandHelper.getCurrentNode(ctx);
-        String nodeType = (String) ctx.get(this.typeKey);
-        String name = (String) ctx.get(this.relPathKey);
-
-        if (log.isDebugEnabled()) {
-            log.debug("adding node at " + node.getPath() + "/" + name);
-        }
-
-        if (nodeType == null) {
-            node.addNode(name);
-        } else {
-            node.addNode(name, nodeType);
-        }
-        return false;
-    }
-
-    /**
-     * @return the nodeTypeKey.
-     */
-    public String getTypeKey() {
-        return typeKey;
-    }
-
-    /**
-     * @param nodeTypeKey
-     *        Set the context attribute key for the node type attribute.
-     */
-    public void setTypeKey(String nodeTypeKey) {
-        this.typeKey = nodeTypeKey;
-    }
-
-    /**
-     * @return the relative path.
-     */
-    public String getRelPathKey() {
-        return relPathKey;
-    }
-
-    /**
-     * @param relPathKey
-     *        the relative path key to set
-     */
-    public void setRelPathKey(String relPathKey) {
-        this.relPathKey = relPathKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/ClearWorkspace.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/ClearWorkspace.java
deleted file mode 100644
index ac5ee0a..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/ClearWorkspace.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.core;
-
-import javax.jcr.Node;
-import javax.jcr.NodeIterator;
-import javax.jcr.Property;
-import javax.jcr.PropertyIterator;
-import javax.jcr.Session;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.JcrConstants;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Remove all the content from the current working <code>Workspace</code>
- */
-public class ClearWorkspace implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(ClearWorkspace.class);
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        Session s = CommandHelper.getSession(ctx);
-
-        if (log.isDebugEnabled()) {
-            log.debug("removing all content from workspace "
-                    + s.getWorkspace().getName());
-        }
-
-        // Set current node to root
-        CommandHelper.setCurrentNode(ctx, s.getRootNode());
-        NodeIterator iter = s.getRootNode().getNodes();
-        while (iter.hasNext()) {
-            Node n = (Node) iter.next();
-            if (!n.getName().equals(JcrConstants.JCR_SYSTEM)) {
-                n.remove();
-            }
-        }
-        PropertyIterator pIter = s.getRootNode().getProperties();
-        while (pIter.hasNext()) {
-            Property p = pIter.nextProperty();
-            if (!p.getName().equals(JcrConstants.JCR_PRIMARYTYPE)) {
-                p.remove();
-            }
-        }
-        return false;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/Clone.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/Clone.java
deleted file mode 100644
index 156ef88..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/Clone.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.core;
-
-import javax.jcr.Workspace;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Clone the given <code>Node</code> to another <code>Workspace</code>
- */
-public class Clone implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(Clone.class);
-
-    // ---------------------------- < keys >
-    /** Source workspace */
-    private String srcWorkspaceKey = "scrWorkspace";
-
-    /** target workspace */
-    private String srcAbsPathKey = "srcAbsPath";
-
-    /** source node */
-    private String destAbsPathKey = "destAbsPath";
-
-    /** target node */
-    private String removeExistingKey = "removeExisting";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String srcWorkspace = (String) ctx.get(this.srcWorkspaceKey);
-        String srcAbsPath = (String) ctx.get(this.srcAbsPathKey);
-        String destAbsPath = (String) ctx.get(this.destAbsPathKey);
-        Boolean removeExisting = Boolean.valueOf((String) ctx
-            .get(this.removeExistingKey));
-
-        Workspace w = CommandHelper.getSession(ctx).getWorkspace();
-
-        if (log.isDebugEnabled()) {
-            log.debug("cloning node. from [" + srcWorkspace + ":" + srcAbsPath
-                    + "] to [" + w.getName() + ":" + destAbsPath + "]");
-        }
-
-        w.clone(srcWorkspace, srcAbsPath, destAbsPath, removeExisting
-            .booleanValue());
-
-        return false;
-    }
-
-    /**
-     * @return the destination absolute path key
-     */
-    public String getDestAbsPathKey() {
-        return destAbsPathKey;
-    }
-
-    /**
-     * Sets the destination absolute path key
-     * @param destAbsPathKey
-     *        the destination absolute path key
-     */
-    public void setDestAbsPathKey(String destAbsPathKey) {
-        this.destAbsPathKey = destAbsPathKey;
-    }
-
-    /**
-     * @return the remove existing key option
-     */
-    public String getRemoveExistingKey() {
-        return removeExistingKey;
-    }
-
-    /**
-     * Set the remove existing key option
-     * @param removeExistingKey
-     *        the remove existing key option
-     */
-    public void setRemoveExistingKey(String removeExistingKey) {
-        this.removeExistingKey = removeExistingKey;
-    }
-
-    /**
-     * @return the source absolute path key
-     */
-    public String getSrcAbsPathKey() {
-        return srcAbsPathKey;
-    }
-
-    /**
-     * Sets the source absolute path key
-     * @param srcAbsPathKey
-     *        the source absolute path key
-     */
-    public void setSrcAbsPathKey(String srcAbsPathKey) {
-        this.srcAbsPathKey = srcAbsPathKey;
-    }
-
-    /**
-     * @return the source <code>Workspace</code> key
-     */
-    public String getSrcWorkspaceKey() {
-        return srcWorkspaceKey;
-    }
-
-    /**
-     * Sets the source <code>Workspace</code> key
-     * @param srcWorkspaceKey
-     *        the source <code>Workspace</code> key
-     */
-    public void setSrcWorkspaceKey(String srcWorkspaceKey) {
-        this.srcWorkspaceKey = srcWorkspaceKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/Copy.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/Copy.java
deleted file mode 100644
index c9a7483..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/Copy.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.core;
-
-import javax.jcr.Workspace;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Copy a Node. <br>
- * If the source <code>Workspace</code> is unset it will create a copy of the
- * given <code>Node</code> from the current working <code>Workspace</code>.
- */
-public class Copy implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(Copy.class);
-
-    // ---------------------------- < keys >
-    /**
-     * Source workspace.
-     */
-    private String srcWorkspaceKey = "srcWorkspace";
-
-    /** source path */
-    private String srcAbsPathKey = "srcAbsPath";
-
-    /** destination path */
-    private String destAbsPathKey = "destAbsPath";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String srcWorkspace = (String) ctx.get(this.srcWorkspaceKey);
-        String srcAbsPath = (String) ctx.get(this.srcAbsPathKey);
-        String destAbsPath = (String) ctx.get(this.destAbsPathKey);
-
-        Workspace w = CommandHelper.getSession(ctx).getWorkspace();
-
-        if (srcWorkspace == null) {
-            srcWorkspace = w.getName();
-        }
-
-        if (log.isDebugEnabled()) {
-            log.debug("copying node from [" + srcWorkspace + ":" + srcAbsPath
-                    + "] to [" + w.getName() + ":" + destAbsPath + "]");
-        }
-
-        w.copy(srcWorkspace, srcAbsPath, destAbsPath);
-
-        return false;
-    }
-
-    /**
-     * @return the destination absolute path key
-     */
-    public String getDestAbsPathKey() {
-        return destAbsPathKey;
-    }
-
-    /**
-     * sets the destination absolute path key
-     * @param destAbsPathKey
-     *        the destination absolute path key
-     */
-    public void setDestAbsPathKey(String destAbsPathKey) {
-        this.destAbsPathKey = destAbsPathKey;
-    }
-
-    /**
-     * @return the source absolute path key
-     */
-    public String getSrcAbsPathKey() {
-        return srcAbsPathKey;
-    }
-
-    /**
-     * Sets the source absolute path key
-     * @param srcAbsPathKey
-     *        the source absolute path key
-     */
-    public void setSrcAbsPathKey(String srcAbsPathKey) {
-        this.srcAbsPathKey = srcAbsPathKey;
-    }
-
-    /**
-     * @return the source <code>Workspace</code> key
-     */
-    public String getSrcWorkspaceKey() {
-        return srcWorkspaceKey;
-    }
-
-    /**
-     * Sets the source <code>Workspace</code> key
-     * @param srcWorkspaceKey
-     *        the source <code>Workspace</code> key
-     */
-    public void setSrcWorkspaceKey(String srcWorkspaceKey) {
-        this.srcWorkspaceKey = srcWorkspaceKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/CurrentNode.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/CurrentNode.java
deleted file mode 100644
index bc409df..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/CurrentNode.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.core;
-
-import javax.jcr.Node;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Set the current working <code>Node</code>
- */
-public class CurrentNode implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(CurrentNode.class);
-
-    // ---------------------------- < keys >
-
-    /** context attribute key for the path attribute */
-    private String pathKey = "path";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String dest = (String) ctx.get(this.pathKey);
-        Node n = CommandHelper.getNode(ctx, dest);
-        if (log.isDebugEnabled()) {
-            log.debug("set current working node to " + n.getPath());
-        }
-        CommandHelper.setCurrentNode(ctx, n);
-        return false;
-    }
-
-    /**
-     * @return the path key
-     */
-    public String getPathKey() {
-        return pathKey;
-    }
-
-    /**
-     * @param pathKey
-     *        the path key to set
-     */
-    public void setPathKey(String pathKey) {
-        this.pathKey = pathKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/Login.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/Login.java
deleted file mode 100644
index 8eaf5aa..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/Login.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.core;
-
-import javax.jcr.Credentials;
-import javax.jcr.Repository;
-import javax.jcr.Session;
-import javax.jcr.SimpleCredentials;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Login to the current working <code>Repository<code>
- */
-public class Login implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(Login.class);
-
-    // ---------------------------- < keys >
-    /** user key */
-    private String userKey = "user";
-
-    /** password key */
-    private String passwordKey = "password";
-
-    /** workspace key */
-    private String workspaceKey = "workspace";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String anon = "anonymous";
-
-        String user = (String) ctx.get(this.userKey);
-        String password = (String) ctx.get(this.passwordKey);
-        String workspace = (String) ctx.get(this.workspaceKey);
-
-        if (user == null) {
-            user = anon;
-        }
-
-        if (password == null) {
-            password = anon;
-        }
-
-        if (log.isDebugEnabled()) {
-            log.debug("logging in as " + user);
-        }
-
-        Session session = null;
-        Repository repo = CommandHelper.getRepository(ctx);
-
-        Credentials credentials = new SimpleCredentials(user, password
-            .toCharArray());
-
-        if (workspace == null) {
-            session = repo.login(credentials);
-        } else {
-            session = repo.login(credentials, workspace);
-        }
-        CommandHelper.setSession(ctx, session);
-        CommandHelper.setCurrentNode(ctx, session.getRootNode());
-        return false;
-    }
-
-    /**
-     * @return the password key
-     */
-    public String getPasswordKey() {
-        return passwordKey;
-    }
-
-    /**
-     * @param passwordKey
-     *        the password key to set
-     */
-    public void setPasswordKey(String passwordKey) {
-        this.passwordKey = passwordKey;
-    }
-
-    /**
-     * @return the user key.
-     */
-    public String getUserKey() {
-        return userKey;
-    }
-
-    /**
-     * @param userKey
-     *        the user key to set
-     */
-    public void setUserKey(String userKey) {
-        this.userKey = userKey;
-    }
-
-    /**
-     * @return the <code>Workspace</code>.
-     */
-    public String getWorkspaceKey() {
-        return workspaceKey;
-    }
-
-    /**
-     * @param workspaceKey
-     *        the <code>Workspace<code> key to set
-     */
-    public void setWorkspaceKey(String workspaceKey) {
-        this.workspaceKey = workspaceKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/Logout.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/Logout.java
deleted file mode 100644
index d5f025e..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/Logout.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.core;
-
-import javax.jcr.Session;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Logout from the current working <code>Repository</code>
- */
-public class Logout implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(Logout.class);
-
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        Session s = CommandHelper.getSession(ctx);
-        if (log.isDebugEnabled()) {
-            log.debug("logging out user " + s.getUserID());
-        }
-        s.logout();
-        CommandHelper.setCurrentNode(ctx, null);
-        CommandHelper.setSession(ctx, null);
-        return false;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/Move.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/Move.java
deleted file mode 100644
index 5492fab..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/Move.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.core;
-
-import java.util.ResourceBundle;
-
-import javax.jcr.Workspace;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Move a <code>Node</code>
- */
-public class Move implements Command {
-    /** resource bundle */
-    private static ResourceBundle bundle = CommandHelper.getBundle();
-
-    /** logger */
-    private static Log log = LogFactory.getLog(Move.class);
-
-    // ---------------------------- < keys >
-    /** source path */
-    private String srcAbsPathKey = "srcAbsPath";
-
-    /** destination path */
-    private String destAbsPathKey = "destAbsPath";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String srcAbsPath = (String) ctx.get(this.srcAbsPathKey);
-        String destAbsPath = (String) ctx.get(this.destAbsPathKey);
-
-        if (!srcAbsPath.startsWith("/") || !destAbsPath.startsWith("/")) {
-            throw new IllegalArgumentException(bundle
-                .getString("exception.illegalargument")
-                    + ". "
-                    + bundle.getString("exception.only.absolute.path")
-                    + ".");
-        }
-
-        Workspace w = CommandHelper.getSession(ctx).getWorkspace();
-
-        if (log.isDebugEnabled()) {
-            log.debug("moving node from " + srcAbsPath + " to " + destAbsPath);
-        }
-
-        w.move(srcAbsPath, destAbsPath);
-
-        return false;
-    }
-
-    /**
-     * @return the destintation absolute path key
-     */
-    public String getDestAbsPathKey() {
-        return destAbsPathKey;
-    }
-
-    /**
-     * @param destAbsPathKey
-     *        the destintation absolute path key to set
-     */
-    public void setDestAbsPathKey(String destAbsPathKey) {
-        this.destAbsPathKey = destAbsPathKey;
-    }
-
-    /**
-     * @return the source absolute path key
-     */
-    public String getSrcAbsPathKey() {
-        return srcAbsPathKey;
-    }
-
-    /**
-     * @param srcAbsPathKey
-     *        the source absolute path key to set
-     */
-    public void setSrcAbsPathKey(String srcAbsPathKey) {
-        this.srcAbsPathKey = srcAbsPathKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/OrderBefore.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/OrderBefore.java
deleted file mode 100644
index 03f8359..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/OrderBefore.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.core;
-
-import javax.jcr.Node;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Set the order of the given <code>Node</code>
- */
-public class OrderBefore implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(OrderBefore.class);
-
-    // ---------------------------- < keys >
-    /** node path */
-    private String parentPathKey = "parentPath";
-
-    /** source path */
-    private String srcChildKey = "srcChild";
-
-    /** destination path */
-    private String destChildKey = "destChild";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String parentPath = (String) ctx.get(this.parentPathKey);
-        Node n = CommandHelper.getNode(ctx, parentPath);
-
-        String srcChildPath = (String) ctx.get(this.srcChildKey);
-        String destChildPath = (String) ctx.get(this.destChildKey);
-
-        if (log.isDebugEnabled()) {
-            log
-                .debug("ordering before. from " + n.getPath() + "/"
-                        + srcChildPath + " to " + n.getPath() + "/"
-                        + destChildPath);
-        }
-
-        n.orderBefore(srcChildPath, destChildPath);
-
-        return false;
-    }
-
-    /**
-     * @return the destination child key
-     */
-    public String getDestChildKey() {
-        return destChildKey;
-    }
-
-    /**
-     * @param destChildRelPathKey
-     *        the destination child key to set
-     */
-    public void setDestChildKey(String destChildRelPathKey) {
-        this.destChildKey = destChildRelPathKey;
-    }
-
-    /**
-     * @return the source child key
-     */
-    public String getSrcChildKey() {
-        return srcChildKey;
-    }
-
-    /**
-     * @param srcChildRelPathKey
-     *        the source child key to set
-     */
-    public void setSrcChildKey(String srcChildRelPathKey) {
-        this.srcChildKey = srcChildRelPathKey;
-    }
-
-    /**
-     * @return the parent path key
-     */
-    public String getParentPathKey() {
-        return parentPathKey;
-    }
-
-    /**
-     * @param parentPathKey
-     *        the parent path key to set
-     */
-    public void setParentPathKey(String parentPathKey) {
-        this.parentPathKey = parentPathKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/ReadValue.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/ReadValue.java
deleted file mode 100644
index 05df6ee..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/ReadValue.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.core;
-
-import javax.jcr.Property;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Read the <code>Value</code> of the given <code>Property</code> and store
- * it under the given <code>Context</code> attribute.
- */
-public class ReadValue implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(ReadValue.class);
-
-    // ---------------------------- < keys >
-
-    /** property path key */
-    private String srcPathKey = "srcPath";
-
-    /** value index key */
-    private String srcIndexKey = "srcIndex";
-
-    /** destination context attribute */
-    private String destKey = "dest";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String path = (String) ctx.get(this.srcPathKey);
-        int index = 1;
-        if (ctx.get(this.srcIndexKey) != null) {
-            index = Integer.valueOf(((String) ctx.get(this.srcIndexKey)))
-                .intValue();
-        }
-
-        String dest = (String) ctx.get(this.destKey);
-
-        if (log.isDebugEnabled()) {
-            log.debug("reading value from " + path + "[" + index + "] to "
-                    + dest);
-        }
-
-        Property p = (Property) CommandHelper.getItem(ctx, path);
-
-        if (p.getDefinition().isMultiple()) {
-            ctx.put(dest, p.getValues()[index].getString());
-        } else {
-            ctx.put(dest, p.getValue().getString());
-        }
-        return false;
-    }
-
-    /**
-     * @return the destination key
-     */
-    public String getDestKey() {
-        return destKey;
-    }
-
-    /**
-     * @param destKey
-     *        the destination key to set
-     */
-    public void setDestKey(String destKey) {
-        this.destKey = destKey;
-    }
-
-    /**
-     * @return the source index key
-     */
-    public String getSrcIndexKey() {
-        return srcIndexKey;
-    }
-
-    /**
-     * @param srcIndexKey
-     *        the source index key to set
-     */
-    public void setSrcIndexKey(String srcIndexKey) {
-        this.srcIndexKey = srcIndexKey;
-    }
-
-    /**
-     * @return the source path key
-     */
-    public String getSrcPathKey() {
-        return srcPathKey;
-    }
-
-    /**
-     * @param srcPathKey
-     *        the source path key to set
-     */
-    public void setSrcPathKey(String srcPathKey) {
-        this.srcPathKey = srcPathKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/Refresh.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/Refresh.java
deleted file mode 100644
index 73540ec..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/Refresh.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.core;
-
-import javax.jcr.Item;
-import javax.jcr.Session;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Refresh the <code>Item</code> if specified or the <code>Session</code> to
- * reflect the current saved state.
- */
-public class Refresh implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(Refresh.class);
-
-    // ---------------------------- < keys >
-    /** keep changes key */
-    private String keepChangesKey = "keepChanges";
-
-    /** path to the node to refresh key */
-    private String pathKey = "path";
-
-    /**
-     * @return the keep changes key
-     */
-    public String getKeepChangesKey() {
-        return keepChangesKey;
-    }
-
-    /**
-     * @param keepChangesKey
-     *        the keep changes key to set
-     */
-    public void setKeepChangesKey(String keepChangesKey) {
-        this.keepChangesKey = keepChangesKey;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        boolean keepChanges = Boolean.valueOf(
-            (String) ctx.get(this.keepChangesKey)).booleanValue();
-
-        String path = (String) ctx.get(this.pathKey);
-
-        if (log.isDebugEnabled()) {
-            log.debug("refreshing. from node " + path);
-        }
-
-        if (path == null) {
-            Session s = CommandHelper.getSession(ctx);
-            s.refresh(keepChanges);
-        } else {
-            Item i = CommandHelper.getItem(ctx, path);
-            i.refresh(keepChanges);
-        }
-
-        return false;
-    }
-
-    /**
-     * @return the path key
-     */
-    public String getPathKey() {
-        return pathKey;
-    }
-
-    /**
-     * @param pathKey
-     *        the path key to set
-     */
-    public void setPathKey(String pathKey) {
-        this.pathKey = pathKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/RemoveItem.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/RemoveItem.java
deleted file mode 100644
index 6b7e20a..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/RemoveItem.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.core;
-
-import javax.jcr.Item;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Remove the <code>Item</code> at the given path
- */
-public class RemoveItem implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(RemoveItem.class);
-
-    // ---------------------------- < keys >
-
-    /** context attribute key for the path attribute */
-    private String pathKey = "path";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String path = (String) ctx.get(this.pathKey);
-        if (log.isDebugEnabled()) {
-            log.debug("removing item from " + path);
-        }
-        Item item = CommandHelper.getItem(ctx, path);
-        if (item.isSame(CommandHelper.getCurrentNode(ctx))
-                && item.getDepth() > 0) {
-            CommandHelper.setCurrentNode(ctx, item.getParent());
-        }
-        item.remove();
-        return false;
-    }
-
-    /**
-     * @return the path key
-     */
-    public String getPathKey() {
-        return pathKey;
-    }
-
-    /**
-     * @param pathKey
-     *        the path key to set
-     */
-    public void setPathKey(String pathKey) {
-        this.pathKey = pathKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/RemoveItems.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/RemoveItems.java
deleted file mode 100644
index 3c51b45..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/RemoveItems.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.core;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.jcr.Item;
-import javax.jcr.Node;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-import org.apache.jackrabbit.util.ChildrenCollectorFilter;
-
-/**
- * Remove any <code>Item</code> under the given <code>Node</code> that match
- * the given name pattern.
- */
-public class RemoveItems implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(RemoveItems.class);
-
-    // ---------------------------- < keys >
-    /** path key */
-    private String pathKey = "path";
-
-    /** item pattern key */
-    private String patternKey = "pattern";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String pattern = (String) ctx.get(this.patternKey);
-        String path = (String) ctx.get(this.pathKey);
-
-        Node n = CommandHelper.getNode(ctx, path);
-
-        if (log.isDebugEnabled()) {
-            log.debug("removing nodes from " + n.getPath()
-                    + " that match pattern " + pattern);
-        }
-
-        List children = new ArrayList();
-        ChildrenCollectorFilter collector = new ChildrenCollectorFilter(
-            pattern, children, true, true, 1);
-        collector.visit(n);
-
-        Iterator items = children.iterator();
-
-        while (items.hasNext()) {
-            Item item = (Item) items.next();
-            if (item.isSame(CommandHelper.getCurrentNode(ctx))
-                    && item.getDepth() > 0) {
-                CommandHelper.setCurrentNode(ctx, item.getParent());
-            }
-            item.remove();
-        }
-
-        return false;
-    }
-
-    /**
-     * @return the pattern key
-     */
-    public String getPatternKey() {
-        return patternKey;
-    }
-
-    /**
-     * @param patternKey
-     *        the pattern key to set
-     */
-    public void setPatternKey(String patternKey) {
-        this.patternKey = patternKey;
-    }
-
-    /**
-     * @return the path key
-     */
-    public String getPathKey() {
-        return pathKey;
-    }
-
-    /**
-     * @param pathKey
-     *        the path key to set
-     */
-    public void setPathKey(String pathKey) {
-        this.pathKey = pathKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/Rename.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/Rename.java
deleted file mode 100644
index f8ed855..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/Rename.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.core;
-
-import javax.jcr.Node;
-import javax.jcr.Session;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Rename a <code>Node<code>
- */
-public class Rename implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(Rename.class);
-
-    // ---------------------------- < keys >
-    /** source path */
-    private String srcPathKey = "srcPath";
-
-    /** destination path */
-    private String destPathKey = "destPath";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String from = (String) ctx.get(this.srcPathKey);
-        String to = (String) ctx.get(this.destPathKey);
-
-        if (log.isDebugEnabled()) {
-            log.debug("renaming node from " + from + " to " + to);
-        }
-
-        Session s = CommandHelper.getSession(ctx);
-        Node nodeFrom = CommandHelper.getNode(ctx, from);
-        if (nodeFrom.getDepth() == 1) {
-            s.move(nodeFrom.getPath(), "/" + to);
-        } else {
-            s.move(nodeFrom.getPath(), nodeFrom.getParent().getPath() + "/"
-                    + to);
-        }
-
-        return false;
-    }
-
-    /**
-     * @return the destination path key
-     */
-    public String getDestPathKey() {
-        return destPathKey;
-    }
-
-    /**
-     * @param destPathKey
-     *        the destination path key to set
-     */
-    public void setDestPathKey(String destPathKey) {
-        this.destPathKey = destPathKey;
-    }
-
-    /**
-     * @return the source path key
-     */
-    public String getSrcPathKey() {
-        return srcPathKey;
-    }
-
-    /**
-     * @param srcPathKey
-     *        the source path key to set
-     */
-    public void setSrcPathKey(String srcPathKey) {
-        this.srcPathKey = srcPathKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/Save.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/Save.java
deleted file mode 100644
index 02d46e6..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/Save.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.core;
-
-import javax.jcr.Node;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Save the current working <code>Node</code> if specified, or the current
- * working <code>Session</code>
- */
-public class Save implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(Save.class);
-
-    // ---------------------------- < keys >
-    /** path key */
-    private String pathKey = "path";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String path = (String) ctx.get(this.pathKey);
-
-        if (path == null) {
-            log.debug("saving session");
-            CommandHelper.getSession(ctx).save();
-        } else {
-            log.debug("saving node at " + path);
-            Node n = CommandHelper.getNode(ctx, path);
-            n.save();
-        }
-
-        return false;
-    }
-
-    /**
-     * @return the path key
-     */
-    public String getPathKey() {
-        return pathKey;
-    }
-
-    /**
-     * @param pathKey
-     *        the path key to set
-     */
-    public void setPathKey(String pathKey) {
-        this.pathKey = pathKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/SetMultivalueProperty.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/SetMultivalueProperty.java
deleted file mode 100644
index c63458c..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/SetMultivalueProperty.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.core;
-
-import javax.jcr.Node;
-import javax.jcr.PropertyType;
-
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Set a multivalue <code>Property</code> to the current working
- * <code>Node</code>.<br>
- * The default regular expression is ",".
- */
-public class SetMultivalueProperty extends AbstractSetProperty {
-    /** logger */
-    private static Log log = LogFactory.getLog(SetMultivalueProperty.class);
-
-    // ---------------------------- < keys >
-
-    /** regular expression key */
-    private String regExpKey = "regExp";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String regExp = (String) ctx.get(this.regExpKey);
-        String value = (String) ctx.get(this.valueKey);
-        String name = (String) ctx.get(this.nameKey);
-        String type = (String) ctx.get(this.typeKey);
-        String parent = (String) ctx.get(this.parentPathKey);
-
-        Node node = CommandHelper.getNode(ctx, parent);
-
-        if (log.isDebugEnabled()) {
-            log.debug("setting multivalue property from node at "
-                    + node.getPath() + ". regexp=" + regExp + " value=" + value
-                    + " property=" + name);
-        }
-
-        String[] values = value.split(regExp);
-
-        if (type == null) {
-            node.setProperty(name, values);
-        } else {
-            node.setProperty(name, values, PropertyType.valueFromName(type));
-        }
-
-        return false;
-    }
-
-    /**
-     * @return the regular expression key
-     */
-    public String getRegExpKey() {
-        return regExpKey;
-    }
-
-    /**
-     * @param regExpKey
-     *        the regular expression key to set
-     */
-    public void setRegExpKey(String regExpKey) {
-        this.regExpKey = regExpKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/SetProperty.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/SetProperty.java
deleted file mode 100644
index 73f312d..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/SetProperty.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.core;
-
-import javax.jcr.Node;
-import javax.jcr.PropertyType;
-
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Set a <code>Property</code> <code>Value</code> to the current working
- * <code>Node</code>
- */
-public class SetProperty extends AbstractSetProperty {
-    /** logger */
-    private static Log log = LogFactory.getLog(SetProperty.class);
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String value = (String) ctx.get(this.valueKey);
-        String name = (String) ctx.get(this.nameKey);
-        String propertyType = (String) ctx.get(this.typeKey);
-        String parent = (String) ctx.get(this.parentPathKey);
-
-        Node node = CommandHelper.getNode(ctx, parent);
-        if (log.isDebugEnabled()) {
-            log.debug("setting property to node at " + node.getPath()
-                    + ". property=" + name + " value=" + value);
-        }
-        if (propertyType == null) {
-            node.setProperty(name, value);
-        } else {
-            node.setProperty(name, value, PropertyType
-                .valueFromName(propertyType));
-        }
-        return false;
-    }
-
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/ext/ConnectToRmiServer.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/ext/ConnectToRmiServer.java
deleted file mode 100644
index feae008..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/ext/ConnectToRmiServer.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.ext;
-
-import javax.jcr.Repository;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-import org.apache.jackrabbit.rmi.client.ClientRepositoryFactory;
-
-/**
- * Connect to a JCR-RMI server
- */
-public class ConnectToRmiServer implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(ConnectToRmiServer.class);
-
-    // ---------------------------- < keys >
-    /** url key */
-    private String urlKey = "url";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String url = (String) ctx.get(this.urlKey);
-        if (log.isDebugEnabled()) {
-            log.debug("connecting to jcr-rmi server at " + url);
-        }
-        ClientRepositoryFactory factory = new ClientRepositoryFactory();
-        Repository repository = factory.getRepository(url);
-        CommandHelper.setRepository(ctx, repository);
-        return false;
-    }
-
-    /**
-     * @return the url key
-     */
-    public String getUrlKey() {
-        return urlKey;
-    }
-
-    /**
-     * @param urlKey
-     *            the url key to set
-     */
-    public void setUrlKey(String urlKey) {
-        this.urlKey = urlKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/ext/CreateWorkspace.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/ext/CreateWorkspace.java
deleted file mode 100644
index 37a9711..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/ext/CreateWorkspace.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.ext;
-
-import java.util.ResourceBundle;
-
-import javax.jcr.Workspace;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-import org.apache.jackrabbit.core.WorkspaceImpl;
-
-/**
- * Creates a Workspace.<br>
- * Note that this Command uses Jackrabbit specific API.
- */
-public class CreateWorkspace implements Command {
-    /** bundle */
-    private ResourceBundle bundle = CommandHelper.getBundle();
-
-    /** logger */
-    private static Log log = LogFactory.getLog(CreateWorkspace.class);
-
-    // ---------------------------- < keys >
-    /** workspace name key */
-    private String nameKey = "name";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String name = (String) ctx.get(this.nameKey);
-        if (log.isDebugEnabled()) {
-            log.debug("creating workspace for name " + name);
-        }
-        Workspace w = CommandHelper.getSession(ctx).getWorkspace();
-        if (!(w instanceof WorkspaceImpl)) {
-            throw new IllegalStateException(bundle
-                    .getString("phrase.jackrabbit.command"));
-        }
-
-        WorkspaceImpl jrw = (WorkspaceImpl) w;
-        jrw.createWorkspace(name);
-        return false;
-    }
-
-    /**
-     * @return the name key
-     */
-    public String getNameKey() {
-        return nameKey;
-    }
-
-    /**
-     * @param nameKey
-     *            the name key to set
-     */
-    public void setNameKey(String nameKey) {
-        this.nameKey = nameKey;
-    }
-
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/ext/RegisterNodeType.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/ext/RegisterNodeType.java
deleted file mode 100644
index eb8b39a..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/ext/RegisterNodeType.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.ext;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-
-/**
- * Register a node type
- */
-public class RegisterNodeType implements Command {
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context arg0) throws Exception {
-        throw new UnsupportedOperationException("not implemented yet");
-    }
-
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/ext/StartJackrabbit.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/ext/StartJackrabbit.java
deleted file mode 100644
index 055ea53..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/ext/StartJackrabbit.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.ext;
-
-import javax.jcr.Repository;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-import org.apache.jackrabbit.core.RepositoryImpl;
-import org.apache.jackrabbit.core.config.RepositoryConfig;
-
-/**
- * Set a new Jackrabbit instance as the current working <code>Repository</code>
- */
-public class StartJackrabbit implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(StartJackrabbit.class);
-
-    /** config file */
-    private String configKey = "config";
-
-    /** home folder */
-    private String homeKey = "home";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String config = (String) ctx.get(this.configKey);
-        String home = (String) ctx.get(this.homeKey);
-        if (log.isDebugEnabled()) {
-            log
-                    .debug("starting jackrabbit. config=" + config + " home="
-                            + home);
-        }
-        RepositoryConfig conf = RepositoryConfig.create(config, home);
-        Repository repo = RepositoryImpl.create(conf);
-        CommandHelper.setRepository(ctx, repo);
-        return false;
-    }
-
-    /**
-     * @return the config key
-     */
-    public String getConfigKey() {
-        return configKey;
-    }
-
-    /**
-     * @param configKey
-     *            the config key to set
-     */
-    public void setConfigKey(String configKey) {
-        this.configKey = configKey;
-    }
-
-    /**
-     * @return the home key
-     */
-    public String getHomeKey() {
-        return homeKey;
-    }
-
-    /**
-     * @param homeKey
-     *            the home key to set
-     */
-    public void setHomeKey(String homeKey) {
-        this.homeKey = homeKey;
-    }
-
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/ext/StartJackrabbitSingleton.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/ext/StartJackrabbitSingleton.java
deleted file mode 100644
index 6facd9c..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/ext/StartJackrabbitSingleton.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.ext;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.jcr.Repository;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-import org.apache.jackrabbit.core.RepositoryImpl;
-import org.apache.jackrabbit.core.config.RepositoryConfig;
-
-/**
- * <p>
- * Get a Jackrabbit instance and put it in the <code>Context</code>.<br>
- * This commands maintains a cache with already created instances.<br>
- * if there's no Repository for the given config and home settings a new
- * instance will be created and cached.
- * </p>
- */
-public class StartJackrabbitSingleton implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(StartJackrabbitSingleton.class);
-
-    /** cache */
-    private static Map cache = new HashMap();
-
-    /** config file */
-    private String configKey = "config";
-
-    /** home folder */
-    private String homeKey = "home";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String config = (String) ctx.get(this.configKey);
-        String home = (String) ctx.get(this.homeKey);
-
-        if (log.isDebugEnabled()) {
-            log
-                    .debug("starting jackrabbit. config=" + config + " home="
-                            + home);
-        }
-
-        try {
-            synchronized (cache) {
-                String key = config + "@" + home;
-                Repository repo = (Repository) cache.get(key);
-                if (repo == null) {
-                    String msg = "Starting Jakrabbit instance";
-                    log.info(msg);
-                    RepositoryConfig conf = RepositoryConfig.create(config,
-                            home);
-                    repo = RepositoryImpl.create(conf);
-                    cache.put(key, repo);
-                }
-                CommandHelper.setRepository(ctx, repo);
-            }
-        } catch (Exception e) {
-            log.error("Unable to start jackrabbit", e);
-            throw e;
-        }
-        return false;
-    }
-
-    /**
-     * @return the config key
-     */
-    public String getConfigKey() {
-        return configKey;
-    }
-
-    /**
-     * @param configKey
-     *            the config key to set
-     */
-    public void setConfigKey(String configKey) {
-        this.configKey = configKey;
-    }
-
-    /**
-     * @return the home key
-     */
-    public String getHomeKey() {
-        return homeKey;
-    }
-
-    /**
-     * @param homeKey
-     *            the home key to set
-     */
-    public void setHomeKey(String homeKey) {
-        this.homeKey = homeKey;
-    }
-
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/ext/StopJackrabbit.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/ext/StopJackrabbit.java
deleted file mode 100644
index c3fd4b1..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/ext/StopJackrabbit.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.ext;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-import org.apache.jackrabbit.core.RepositoryImpl;
-
-/**
- * Stop Jackrabbit
- */
-public class StopJackrabbit implements Command {
-
-    /** logger */
-    private static Log log = LogFactory.getLog(StopJackrabbit.class);
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        if (log.isDebugEnabled()) {
-            log.debug("stopping jackrabbit");
-        }
-        RepositoryImpl repo = (RepositoryImpl) CommandHelper.getRepository(ctx);
-        if (repo == null) {
-            throw new IllegalStateException("No current working repository");
-        }
-        if (!(repo instanceof RepositoryImpl)) {
-            throw new IllegalStateException(
-                    "Jackrabbit is not the current working repository");
-        }
-        repo.shutdown();
-        CommandHelper.setRepository(ctx, null);
-        return false;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/ext/package.html b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/ext/package.html
deleted file mode 100644
index 9ba68fa..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/ext/package.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<body>
-	Commands in this package are Jackrabbit specific.
-</body>
\ No newline at end of file
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/fs/ExportFileSystem.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/fs/ExportFileSystem.java
deleted file mode 100644
index 3615302..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/fs/ExportFileSystem.java
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.fs;
-
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-import javax.jcr.Node;
-import javax.jcr.NodeIterator;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.RepositoryException;
-import javax.jcr.ValueFormatException;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandException;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Export a <code>Node</code> of type nt:file or nt:folder to the given file
- * system path.
- */
-public class ExportFileSystem implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(ExportFileSystem.class);
-
-    // ---------------------------- < keys >
-
-    /** Node path key */
-    private String srcJcrPathKey = "srcJcrPath";
-
-    /** File system path key */
-    private String destFsPathKey = "destFsPath";
-
-    /** Overwrite flag key */
-    private String overwriteKey = "overwrite";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String from = (String) ctx.get(this.srcJcrPathKey);
-        String to = (String) ctx.get(this.destFsPathKey);
-        boolean overwrite = Boolean
-            .valueOf((String) ctx.get(this.overwriteKey)).booleanValue();
-
-        if (log.isDebugEnabled()) {
-            log.debug("exporting node at " + from + " to the filesystem (" + to
-                    + ") overwrite=" + overwrite);
-        }
-
-        Node node = CommandHelper.getNode(ctx, from);
-
-        File f = new File(to);
-
-        // check if the file exists
-        if (f.exists() && !overwrite) {
-            throw new CommandException("exception.file.exists", new String[] {
-                to
-            });
-        }
-
-        // export either a file or a folder
-        if (node.isNodeType("nt:file")) {
-            this.createFile(node, f);
-        } else if (node.isNodeType("nt:folder")) {
-            this.addFolder(node, f);
-        } else {
-            throw new CommandException("exception.not.file.or.folder",
-                new String[] {
-                    node.getPrimaryNodeType().getName()
-                });
-        }
-
-        return false;
-    }
-
-    /**
-     * Exports an nt:file to the file system
-     * @param node
-     *        the <code>Node</code>
-     * @param file
-     *        the <code>File</code>
-     * @throws IOException
-     *         if an IOException occurs
-     * @throws CommandException
-     *         if the <code>File</code> can't be created
-     * @throws ValueFormatException
-     *         if a <code>Value</code> can't be retrieved
-     * @throws PathNotFoundException
-     *         if the <code>Node</code> can't be found
-     * @throws RepositoryException
-     *         if the current working <code>Repository</code> throws an
-     *         <code>Exception</code>
-     */
-    private void createFile(Node node, File file) throws IOException,
-            CommandException, ValueFormatException, PathNotFoundException,
-            RepositoryException {
-
-        boolean created = file.createNewFile();
-        if (!created) {
-            throw new CommandException("exception.file.not.created",
-                new String[] {
-                    file.getPath()
-                });
-        }
-        BufferedOutputStream out = new BufferedOutputStream(
-            new FileOutputStream(file));
-        InputStream in = node.getNode("jcr:content").getProperty("jcr:data")
-            .getStream();
-
-        int c;
-
-        while ((c = in.read()) != -1) {
-            out.write(c);
-        }
-        in.close();
-        out.flush();
-        out.close();
-    }
-
-    /**
-     * Exports a nt:folder and all its children to the file system
-     * @param node
-     *        the <code>Node</code>
-     * @param file
-     *        <code>File</code>
-     * @throws CommandException
-     *         if the <code>File</code> can't be created
-     * @throws RepositoryException
-     *         if the current working <code>Repository</code> throws an
-     *         <code>Exception</code>
-     * @throws IOException
-     *         if an IOException occurs
-     */
-    private void addFolder(Node node, File file) throws CommandException,
-            RepositoryException, IOException {
-        boolean created = file.mkdir();
-
-        if (!created) {
-            throw new CommandException("exception.folder.not.created",
-                new String[] {
-                    file.getPath()
-                });
-        }
-
-        NodeIterator iter = node.getNodes();
-        while (iter.hasNext()) {
-            Node child = iter.nextNode();
-            // File
-            if (child.isNodeType("nt:file")) {
-                File childFile = new File(file, child.getName());
-                createFile(child, childFile);
-            } else if (child.isNodeType("nt:folder")) {
-                File childFolder = new File(file, child.getName());
-                addFolder(child, childFolder);
-            }
-        }
-    }
-
-    /**
-     * @return the overwrite key
-     */
-    public String getOverwriteKey() {
-        return overwriteKey;
-    }
-
-    /**
-     * @param overwriteKey
-     *        the overwrite key to set
-     */
-    public void setOverwriteKey(String overwriteKey) {
-        this.overwriteKey = overwriteKey;
-    }
-
-    /**
-     * @return the source jcr path key
-     */
-    public String getSrcJcrPathKey() {
-        return srcJcrPathKey;
-    }
-
-    /**
-     * @param srcJcrPathKey
-     *        the source jcr path key to set
-     */
-    public void setSrcJcrPathKey(String srcJcrPathKey) {
-        this.srcJcrPathKey = srcJcrPathKey;
-    }
-
-    /**
-     * @return the destination file system path key
-     */
-    public String getDestFsPathKey() {
-        return destFsPathKey;
-    }
-
-    /**
-     * @param toFsPathKey
-     *        the destination file system path key to set
-     */
-    public void setDestFsPathKey(String toFsPathKey) {
-        this.destFsPathKey = toFsPathKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/fs/ExportPropertyToFile.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/fs/ExportPropertyToFile.java
deleted file mode 100644
index 3502c1c..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/fs/ExportPropertyToFile.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.fs;
-
-import java.io.BufferedOutputStream;
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Reader;
-import java.io.StringReader;
-
-import javax.jcr.Node;
-import javax.jcr.Property;
-import javax.jcr.PropertyType;
-import javax.jcr.RepositoryException;
-import javax.jcr.Value;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandException;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Exports a <code>Property</code> <code>Value</code> of the current working
- * <code>Node<code> to the file system.
- */
-public class ExportPropertyToFile implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(ExportPropertyToFile.class);
-
-    // ---------------------------- < keys >
-
-    /** property name */
-    private String nameKey = "name";
-
-    /** value index */
-    private String indexKey = "index";
-
-    /** target file */
-    private String destFsPathKey = "destFsPath";
-
-    /** overwrite the target file if necessary */
-    private String overwriteKey = "overwrite";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String name = (String) ctx.get(this.nameKey);
-        Integer index = (Integer) ctx.get(this.indexKey);
-        String to = (String) ctx.get(this.destFsPathKey);
-
-        Node n = CommandHelper.getCurrentNode(ctx);
-
-        if (log.isDebugEnabled()) {
-            log.debug("exporting property value from " + n.getPath() + "/"
-                    + name + " to the filesystem: " + to);
-        }
-
-        Property p = n.getProperty(name);
-        if (p.getDefinition().isMultiple()) {
-            exportValue(ctx, p.getValues()[index.intValue()], to);
-        } else {
-            exportValue(ctx, p.getValue(), to);
-        }
-        return false;
-    }
-
-    /**
-     * Export th given value to a File
-     * @param ctx
-     *        the <code>Context</code>
-     * @param value
-     *        the <code>Value</code>
-     * @param to
-     *        the target file system path
-     * @throws CommandException
-     *         if the <code>File</code> already exists
-     * @throws IOException
-     *         if an <code>IOException</code> occurs
-     * @throws RepositoryException
-     *         if the current working <code>Repository</code> throws an
-     *         <code>Exception</code>
-     */
-    private void exportValue(Context ctx, Value value, String to)
-            throws CommandException, IOException, RepositoryException {
-        boolean overwrite = Boolean
-            .valueOf((String) ctx.get(this.overwriteKey)).booleanValue();
-
-        File file = new File(to);
-
-        // Check if there's a file at the given target path
-        if (file.exists() && !overwrite) {
-            throw new CommandException("exception.file.exists", new String[] {
-                to
-            });
-        }
-
-        // If it doesn't exists create the file
-        if (!file.exists()) {
-            file.createNewFile();
-        }
-
-        if (value.getType() == PropertyType.BINARY) {
-            InputStream in = value.getStream();
-            BufferedOutputStream out = new BufferedOutputStream(
-                new FileOutputStream(file));
-            int c;
-            while ((c = in.read()) != -1) {
-                out.write(c);
-            }
-            in.close();
-            out.flush();
-            out.close();
-        } else {
-            Reader in = new StringReader(value.getString());
-            BufferedWriter out = new BufferedWriter(new FileWriter(file));
-            int c;
-            while ((c = in.read()) != -1) {
-                out.write(c);
-            }
-            in.close();
-            out.flush();
-            out.close();
-        }
-    }
-
-    /**
-     * @return the index key
-     */
-    public String getIndexKey() {
-        return indexKey;
-    }
-
-    /**
-     * @param indexKey
-     *        the index key to set
-     */
-    public void setIndexKey(String indexKey) {
-        this.indexKey = indexKey;
-    }
-
-    /**
-     * @return the name key
-     */
-    public String getNameKey() {
-        return nameKey;
-    }
-
-    /**
-     * @param nameKey
-     *        the name key to set
-     */
-    public void setNameKey(String nameKey) {
-        this.nameKey = nameKey;
-    }
-
-    /**
-     * @return the overwrite key
-     */
-    public String getOverwriteKey() {
-        return overwriteKey;
-    }
-
-    /**
-     * @param overwriteKey
-     *        the overwrite key to set
-     */
-    public void setOverwriteKey(String overwriteKey) {
-        this.overwriteKey = overwriteKey;
-    }
-
-    /**
-     * @return the destination file system path key
-     */
-    public String getDestFsPathKey() {
-        return destFsPathKey;
-    }
-
-    /**
-     * @param destFsPathKey
-     *        the destination file system path key to set
-     */
-    public void setDestFsPathKey(String destFsPathKey) {
-        this.destFsPathKey = destFsPathKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/fs/ImportFileSystem.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/fs/ImportFileSystem.java
deleted file mode 100644
index 0091737..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/fs/ImportFileSystem.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.fs;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.util.Calendar;
-import java.util.Properties;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-import org.apache.jackrabbit.command.CommandException;
-
-/**
- * Import data from the file system. <br>
- * If the given path refers to a file it's imported to a <code>Node</code> of
- * type nt:file under the current working <code>Node<code>.<br>
- * If the given path refers to a folder, the given folder and all the subtree is
- * imported.
- */
-public class ImportFileSystem implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(ImportFileSystem.class);
-
-    /** extension to mime type mapping */
-    private static Properties mimeTypes;
-
-    static {
-        try {
-            mimeTypes = new Properties();
-            mimeTypes.load(ImportFileSystem.class
-                .getResourceAsStream("mimetypes.properties"));
-        } catch (Exception e) {
-            log.error("unable to load mime types", e);
-        }
-    }
-
-    // ---------------------------- < keys >
-
-    /** File system path key */
-    private String srcFsPathKey = "srcFsPath";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String file = (String) ctx.get(this.srcFsPathKey);
-        Node parent = CommandHelper.getCurrentNode(ctx);
-
-        if (log.isDebugEnabled()) {
-            log.debug("importing filesystem from " + file + " to node "
-                    + parent);
-        }
-
-        if (file == null) {
-            throw new CommandException("exception.fspath.is.null");
-        }
-
-        File f = new File(file);
-
-        if (!f.exists()) {
-            throw new CommandException("exception.file.not.found",
-                new String[] {
-                    file
-                });
-        }
-
-        if (f.isFile()) {
-            this.importFile(parent, f);
-        } else {
-            Node folder = parent.addNode(f.getName(), "nt:folder");
-            this.importFolder(folder, f);
-        }
-
-        return false;
-    }
-
-    /**
-     * Imports a File.
-     * @param parentnode
-     *        Parent <code>Node</code>
-     * @param file
-     *        <code>File</code> to be imported
-     * @throws RepositoryException
-     *         on <code>Repository</code> errors
-     * @throws IOException
-     *         on io errors
-     */
-
-    private void importFile(Node parentnode, File file)
-            throws RepositoryException, IOException {
-        String mimeType = null;
-        String extension = getExtension(file.getName());
-        if (extension != null) {
-            mimeType = mimeTypes.getProperty(extension);
-        }
-        if (mimeType == null) {
-            mimeType = "application/octet-stream";
-        }
-
-        Node fileNode = parentnode.addNode(file.getName(), "nt:file");
-        Node resNode = fileNode.addNode("jcr:content", "nt:resource");
-        resNode.setProperty("jcr:mimeType", mimeType);
-        resNode.setProperty("jcr:encoding", "");
-        resNode.setProperty("jcr:data", new FileInputStream(file));
-        Calendar lastModified = Calendar.getInstance();
-        lastModified.setTimeInMillis(file.lastModified());
-        resNode.setProperty("jcr:lastModified", lastModified);
-    }
-
-    /**
-     * Import a Folder.
-     * @param parentnode
-     *        Parent <code>Node</code>
-     * @param directory
-     *        File system directory to traverse
-     * @throws RepositoryException
-     *         on repository errors
-     * @throws IOException
-     *         on io errors
-     */
-    private void importFolder(Node parentnode, File directory)
-            throws RepositoryException, IOException {
-        File[] direntries = directory.listFiles();
-        for (int i = 0; i < direntries.length; i++) {
-            File direntry = direntries[i];
-            if (direntry.isDirectory()) {
-                Node childnode = parentnode.addNode(direntry.getName(),
-                    "nt:folder");
-                importFolder(childnode, direntry);
-            } else {
-                importFile(parentnode, direntry);
-            }
-        }
-    }
-
-    /**
-     * @param name
-     *        the file name
-     * @return the extension for the given file name
-     */
-    private String getExtension(String name) {
-        String ext = null;
-        if (name.lastIndexOf('.') != -1) {
-            ext = name.substring(name.lastIndexOf('.') + 1);
-        }
-        return ext;
-    }
-
-    /**
-     * @return the from key
-     */
-    public String getSrcFsPathKey() {
-        return srcFsPathKey;
-    }
-
-    /**
-     * @param fromKey
-     *        the from key to set
-     */
-    public void setSrcFsPathKey(String fromKey) {
-        this.srcFsPathKey = fromKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/fs/SetPropertyFromFile.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/fs/SetPropertyFromFile.java
deleted file mode 100644
index ba08f11..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/fs/SetPropertyFromFile.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.fs;
-
-import java.io.BufferedReader;
-import java.io.CharArrayWriter;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileReader;
-import java.io.PrintWriter;
-
-import javax.jcr.Node;
-import javax.jcr.PropertyType;
-
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandException;
-import org.apache.jackrabbit.command.CommandHelper;
-import org.apache.jackrabbit.command.core.AbstractSetProperty;
-
-/**
- * Set a <code>Property</code> <code>Value</code> with the content of the
- * given file.
- */
-public class SetPropertyFromFile extends AbstractSetProperty {
-    /** logger */
-    private static Log log = LogFactory.getLog(SetPropertyFromFile.class);
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String value = (String) ctx.get(this.valueKey);
-        String name = (String) ctx.get(this.nameKey);
-        String propertyType = (String) ctx.get(this.typeKey);
-        String parent = (String) ctx.get(this.parentPathKey);
-
-        Node node = CommandHelper.getNode(ctx, parent);
-
-        if (log.isDebugEnabled()) {
-            log.debug("setting property " + node.getPath() + "/" + name
-                    + " with content of file " + value);
-        }
-
-        File f = new File(value);
-        if (!f.exists()) {
-            throw new CommandException("exception.file.not.found",
-                new String[] {
-                    value
-                });
-        }
-        if (propertyType.equals(PropertyType.TYPENAME_BINARY)) {
-            node.setProperty(name, new FileInputStream(f));
-        } else {
-            CharArrayWriter cw = new CharArrayWriter();
-            PrintWriter out = new PrintWriter(cw);
-            BufferedReader in = new BufferedReader(new FileReader(f));
-            String str;
-            while ((str = in.readLine()) != null) {
-                out.println(str);
-            }
-            in.close();
-            node.setProperty(name, cw.toString(), PropertyType
-                .valueFromName(propertyType));
-        }
-        return false;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/fs/mimetypes.properties b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/fs/mimetypes.properties
deleted file mode 100644
index 9048c3b..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/fs/mimetypes.properties
+++ /dev/null
@@ -1,133 +0,0 @@
-ai=application/postscript	
-aif=audio/x-aiff
-aifc=audio/x-aiff
-aiff=audio/x-aiff
-any=text/any
-asc=text/plain
-au=audio/basic
-avi=video/x-msvideo
-bcpio=application/x-bcpio
-bin=application/octet-stream
-bz2=application/x-bzip2
-cdf=application/x-netcdf
-class=application/octet-stream
-cpio=application/x-cpio
-cpt=application/mac-compactpro
-cq=application/cq-durboser
-crx=application/crx-durboser
-csh=application/x-csh
-css=text/css
-dcr=application/x-director
-dir=application/x-director
-dms=application/octet-stream
-doc=application/msword
-dvi=application/x-dvi
-dxr=application/x-director
-ecma=text/qhtml
-eps=application/postscript
-esp=text/qhtml
-etx=text/x-setext
-exe=application/octet-stream
-ez=application/andrew-inset
-gif=image/gif
-gtar=application/x-gtar
-gz=application/x-gzip
-hdf=application/x-hdf
-hqx=application/mac-binhex40
-htm=text/html
-html=text/html
-ice=x-conference/x-cooltalk
-ief=image/ief
-iges=model/iges
-igs=model/iges
-jpe=image/jpeg
-jpeg=image/jpeg
-jpg=image/jpeg
-js=application/x-javascript
-kar=audio/midi
-latex=application/x-latex
-lha=application/octet-stream
-lzh=application/octet-stream
-man=application/x-troff-man
-mdb=application/msaccess
-me=application/x-troff-me
-mesh=model/mesh
-mid=audio/midi
-midi=audio/midi
-mif=application/vnd=mif
-mov=video/quicktime
-movie=video/x-sgi-movie
-mp2=audio/mpeg
-mp3=audio/mpeg
-mpe=video/mpeg
-mpeg=video/mpeg
-mpg=video/mpeg
-mpga=audio/mpeg
-ms=application/x-troff-ms
-msh=model/mesh
-nc=application/x-netcdf
-oda=application/oda
-pbm=image/x-portable-bitmap
-pdb=chemical/x-pdb
-pdf=application/pdf
-pgm=image/x-portable-graymap
-pgn=application/x-chess-pgn
-png=image/png
-pnm=image/x-portable-anymap
-ppm=image/x-portable-pixmap
-ppt=application/vnd=ms-powerpoint
-ps=application/postscript
-qhtml=text/qhtml
-qt=video/quicktime
-ra=audio/x-realaudio
-ram=audio/x-pn-realaudio
-ras=image/x-cmu-raster
-rgb=image/x-rgb
-rm=audio/x-pn-realaudio
-roff=application/x-troff
-rpm=application/x-rpm
-rtf=application/rtf
-rtf=text/rtf
-rtx=text/richtext
-sgm=text/sgml
-sgml=text/sgml
-sh=application/x-sh
-shar=application/x-shar
-silo=model/mesh
-sit=application/x-stuffit
-skd=application/x-koan
-skm=application/x-koan
-skp=application/x-koan
-skt=application/x-koan
-smi=application/smil
-smil=application/smil
-snd=audio/basic
-spl=application/x-futuresplash
-src=application/x-wais-source
-sv4cpio=application/x-sv4cpio
-sv4crc=application/x-sv4crc
-swf=application/x-shockwave-flash
-t=application/x-troff
-tar=application/x-tar
-tcl=application/x-tcl
-tex=application/x-tex
-texi=application/x-texinfo
-texinfo=application/x-texinfo
-tgz=application/x-gzip
-tif=image/tiff
-tiff=image/tiff
-tr=application/x-troff
-tsv=text/tab-separated-values
-txt=text/plain
-ustar=application/x-ustar
-vcd=application/x-cdlink
-vrml=model/vrml
-wav=audio/x-wav
-wrl=model/vrml
-xbm=image/x-xbitmap
-xls=application/msexcel
-xml=text/xml
-xpm=image/x-xpixmap
-xwd=image/x-xwindowdump
-xyz=chemical/x-pdb
-zip=application/zip
\ No newline at end of file
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/AbstractLs.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/AbstractLs.java
deleted file mode 100644
index 78ee82b..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/AbstractLs.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.info;
-
-import java.util.Iterator;
-import java.util.ResourceBundle;
-
-import javax.jcr.NodeIterator;
-import javax.jcr.PropertyIterator;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Ls superclass
- */
-public abstract class AbstractLs implements Command {
-    /** bundle */
-    private static ResourceBundle bundle = CommandHelper.getBundle();
-
-    /** long width */
-    protected int longWidth = 9;
-
-    /** max items to list */
-    private int defaultMaxItems = 100;
-
-    /** max number of items */
-    private String maxItemsKey = "maxItems";
-
-    /** show path flag */
-    private boolean path;
-
-    /**
-     * Print the footer
-     * @param ctx
-     *        the <code>Context</code>
-     * @param iter
-     *        the <code>Iterator</code>
-     */
-    protected void printFooter(Context ctx, Iterator iter) {
-        CommandHelper.getOutput(ctx).println();
-        CommandHelper.getOutput(ctx).println(bundle.getString("word.total"));
-        if (iter instanceof NodeIterator) {
-            printFooter(ctx, (NodeIterator) iter);
-        } else if (iter instanceof PropertyIterator) {
-            printFooter(ctx, (PropertyIterator) iter);
-        }
-    }
-
-    /**
-     * Print footer
-     * @param ctx
-     *        the <code>Context</code>
-     * @param iter
-     *        the <code>Iterator</code>
-     */
-    private void printFooter(Context ctx, NodeIterator iter) {
-        CommandHelper.getOutput(ctx).println(
-            iter.getSize() + " " + bundle.getString("word.nodes"));
-    }
-
-    /**
-     * Print footer
-     * @param ctx
-     *        the <code>Context</code>
-     * @param iter
-     *        the <code>Iterator</code>
-     */
-    private void printFooter(Context ctx, PropertyIterator iter) {
-        CommandHelper.getOutput(ctx).println(
-            iter.getSize() + " " + bundle.getString("word.properties"));
-    }
-
-    /**
-     * @return the default max number of <code>Items</code> s to show
-     */
-    public int getDefaultMaxItems() {
-        return defaultMaxItems;
-    }
-
-    /**
-     * @param maxItems
-     *        the default max number of <code>Items</code> s to set
-     */
-    public void setDefaultMaxItems(int maxItems) {
-        this.defaultMaxItems = maxItems;
-    }
-
-    /**
-     * @return the path
-     */
-    public boolean isPath() {
-        return path;
-    }
-
-    /**
-     * @param path
-     *        the path to set
-     */
-    public void setPath(boolean path) {
-        this.path = path;
-    }
-
-    /**
-     * @return the max number of items key
-     */
-    public String getMaxItemsKey() {
-        return maxItemsKey;
-    }
-
-    /**
-     * @param maxItemsKey
-     *        the max number of items key to set
-     */
-    public void setMaxItemsKey(String maxItemsKey) {
-        this.maxItemsKey = maxItemsKey;
-    }
-
-    /**
-     * @param ctx
-     *        the <code>Context</code>
-     * @return the max number of <code>Item</code> s to show
-     */
-    protected int getMaxItems(Context ctx) {
-        String maxItems = (String) ctx.get(this.maxItemsKey);
-        if (maxItems == null) {
-            maxItems = new Integer(this.defaultMaxItems).toString();
-        }
-        return Integer.valueOf(maxItems).intValue();
-    }
-
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/AbstractLsItems.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/AbstractLsItems.java
deleted file mode 100644
index 89f4417..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/AbstractLsItems.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.info;
-
-import java.util.Iterator;
-import java.util.ResourceBundle;
-
-import javax.jcr.Item;
-import javax.jcr.Node;
-import javax.jcr.Property;
-import javax.jcr.PropertyType;
-import javax.jcr.RepositoryException;
-
-import org.apache.commons.chain.Context;
-import org.apache.jackrabbit.command.CommandException;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * List items superclass
- */
-public abstract class AbstractLsItems extends AbstractLs {
-    /** bundle */
-    private static ResourceBundle bundle = CommandHelper.getBundle();
-
-    /** name width */
-    private int nameWidth = 30;
-
-    /** node type width */
-    private int typeWidth = 15;
-
-    /**
-     * @param ctx
-     *        the <code>Context</code>
-     * @return Iterator containing the Items to list
-     * @throws CommandException
-     *         if an errors occurs
-     * @throws RepositoryException
-     *         if the current <code>Repository</code> throws a
-     *         <code>RepositoryException<code>
-     */
-    protected abstract Iterator getItems(Context ctx) throws CommandException,
-            RepositoryException;
-
-    /**
-     * {@inheritDoc}
-     */
-    public final boolean execute(Context ctx) throws Exception {
-        int nodes = 0;
-        int properties = 0;
-
-        // header
-        int[] width = new int[] {
-                nameWidth, typeWidth, longWidth, longWidth, longWidth
-        };
-        String[] header = new String[] {
-                bundle.getString("word.name"), bundle.getString("word.type"),
-                bundle.getString("word.node"), bundle.getString("word.new"),
-                bundle.getString("word.modified")
-        };
-
-        // print header
-        PrintHelper.printRow(ctx, width, header);
-
-        // print separator
-        PrintHelper.printSeparatorRow(ctx, width, '-');
-
-        // nodes
-        Iterator iter = getItems(ctx);
-
-        int index = 0;
-
-        int maxItems = getMaxItems(ctx);
-
-        // Print nodes
-        while (iter.hasNext() && index < maxItems) {
-            Item i = (Item) iter.next();
-
-            String type = null;
-
-            // Show name or path
-            String name = null;
-            if (this.isPath()) {
-                name = i.getPath();
-            } else {
-                name = i.getName();
-            }
-
-            if (i.isNode()) {
-                nodes++;
-                // name
-                Node n = (Node) i;
-                if (!isPath() && n.getIndex() > 1) {
-                    name = n.getName() + "[" + n.getIndex() + "]";
-                }
-                // type
-                type = n.getPrimaryNodeType().getName();
-            } else {
-                properties++;
-                type = PropertyType.nameFromValue(((Property) i).getType());
-            }
-
-            PrintHelper.printRow(ctx, width, new String[] {
-                    name, type, Boolean.toString(i.isNode()),
-                    Boolean.valueOf(i.isNew()).toString(),
-                    Boolean.valueOf(i.isModified()).toString()
-            });
-            index++;
-        }
-
-        // Footer
-        printFooter(ctx, iter);
-
-        return false;
-    }
-
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/AbstractLsNodes.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/AbstractLsNodes.java
deleted file mode 100644
index 68a109f..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/AbstractLsNodes.java
+++ /dev/null
@@ -1,783 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.info;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.ResourceBundle;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-import javax.jcr.nodetype.NodeType;
-
-import org.apache.commons.chain.Context;
-import org.apache.jackrabbit.JcrConstants;
-import org.apache.jackrabbit.command.CommandHelper;
-import org.apache.jackrabbit.command.CommandException;
-
-/**
- * List nodes. <br>
- * The following attributes will be used in order to customize the output:
- * <ul>
- * <li>pathKey</li>
- * <li>uuidKey</li>
- * <li>mixinKey</li>
- * <li>nodesSizeKey</li>
- * <li>propertiesSizeKey</li>
- * <li>referencesSizeKey</li>
- * <li>versionableKey</li>
- * <li>lockableKey</li>
- * <li>referenceableKey</li>
- * <li>lockedKey</li>
- * <li>hasLockKey</li>
- * <li>new_Key</li>
- * <li>modifiedKey</li>
- * </ul>
- */
-public abstract class AbstractLsNodes extends AbstractLs {
-    /** bundle */
-    private static final ResourceBundle bundle = CommandHelper.getBundle();
-
-    /** show path */
-    private String pathKey = "path";
-
-    /** show uuid */
-    private String uuidKey = "uuid";
-
-    /** show mixin */
-    private String mixinKey = "mixin";
-
-    /** show node size */
-    private String nodesSizeKey = "nodeSize";
-
-    /** show properties size */
-    private String propertiesSizeKey = "propertiesSize";
-
-    /** show references size */
-    private String referencesSizeKey = "referencesSize";
-
-    /** show is versionable */
-    private String versionableKey = "versionable";
-
-    /** show is lockable */
-    private String lockableKey = "lockable";
-
-    /** show is referenceable */
-    private String referenceableKey = "referenceable";
-
-    /** show is locked */
-    private String lockedKey = "locked";
-
-    /** show has lock */
-    private String hasLockKey = "hasLock";
-
-    /** show is new */
-    private String new_Key = "new";
-
-    /** show is modified */
-    private String modifiedKey = "modified";
-
-    /** show lock tocken */
-    private String lockTokenKey = "lockToken";
-
-    /** uuid width */
-    private int uuidWidth = 36;
-
-    /** path width */
-    private int nameWidth = 30;
-
-    /** node type width */
-    private int nodeTypeWidth = 20;
-
-    /** node type width */
-    private int pathWidth = 40;
-
-    /** referenceable width */
-    private int mixinWidth = 30;
-
-    /**
-     * {@inheritDoc}
-     */
-    public final boolean execute(Context ctx) throws Exception {
-        OptionHolder oh = new OptionHolder(ctx);
-
-        // Get children
-        Iterator iter = getNodes(ctx);
-
-        // write header
-        writeHeader(ctx, oh);
-
-        int index = 0;
-
-        int maxItems = getMaxItems(ctx);
-
-        // Write item
-        while (iter.hasNext() && index < maxItems) {
-            Node n = (Node) iter.next();
-            writeItem(ctx, n, oh);
-            index++;
-        }
-
-        // Write footer
-        printFooter(ctx, iter);
-
-        return false;
-    }
-
-    /**
-     * @param ctx
-     *        the <code>Context</code>
-     * @return the <code>Node<code>s to show
-     * @throws RepositoryException if the current working <code>Repository</code> throws a <code>RepositoryException</code>
-     * @throws CommandException
-     */
-    protected abstract Iterator getNodes(Context ctx) throws CommandException,
-            RepositoryException;
-
-    /**
-     * Write a node to the current output
-     * @param ctx
-     *        the <code>Context</code>
-     * @param n
-     *        the <code>Node</code>
-     * @throws RepositoryException
-     * @throws CommandException
-     */
-    void writeItem(Context ctx, Node n, OptionHolder oh)
-            throws RepositoryException, CommandException {
-        // TODO do something with this long piece of code
-        Collection widths = new ArrayList();
-        Collection texts = new ArrayList();
-
-        widths.add(new Integer(this.nameWidth));
-
-        String name = n.getName();
-        if (n.getIndex() > 1) {
-            name += "[" + n.getIndex() + "]";
-        }
-        texts.add(name);
-
-        widths.add(new Integer(this.nodeTypeWidth));
-        texts.add(n.getPrimaryNodeType().getName());
-
-        // uuid
-        if (oh.isUuid()) {
-            widths.add(new Integer(this.uuidWidth));
-            if (n.isNodeType(JcrConstants.MIX_REFERENCEABLE)) {
-                texts.add(n.getUUID());
-            } else {
-                texts.add("");
-            }
-        }
-
-        // is new
-        if (oh.isNew_()) {
-            widths.add(new Integer(this.longWidth));
-            texts.add(Boolean.toString(n.isNew()));
-        }
-
-        // is new
-        if (oh.isModified()) {
-            widths.add(new Integer(this.longWidth));
-            texts.add(Boolean.toString(n.isModified()));
-        }
-
-        // mixin
-        if (oh.isMixin()) {
-            widths.add(new Integer(this.mixinWidth));
-            Collection mixins = new ArrayList();
-            // Assigned mixin types
-            NodeType[] assigned = n.getMixinNodeTypes();
-            for (int i = 0; i < assigned.length; i++) {
-                mixins.add(assigned[i].getName());
-            }
-
-            // Inherited mixin types
-            NodeType[] nt = n.getPrimaryNodeType().getSupertypes();
-            for (int i = 0; i < nt.length; i++) {
-                if (nt[i].isMixin()) {
-                    mixins.add(nt[i].getName());
-                }
-            }
-            texts.add(mixins);
-        }
-
-        // node size
-        if (oh.isNodesSize()) {
-            widths.add(new Integer(this.longWidth));
-            texts.add(Long.toString(n.getNodes().getSize()));
-        }
-
-        // prop size
-        if (oh.isPropertiesSize()) {
-            widths.add(new Integer(this.longWidth));
-            texts.add(Long.toString(n.getProperties().getSize()));
-        }
-
-        // ref size
-        if (oh.isReferencesSize()) {
-            widths.add(new Integer(this.longWidth));
-            texts.add(Long.toString(n.getReferences().getSize()));
-        }
-
-        // is versionable
-        if (oh.isVersionable()) {
-            widths.add(new Integer(this.longWidth));
-            texts.add(Boolean.toString(n
-                .isNodeType(JcrConstants.MIX_VERSIONABLE)));
-        }
-
-        // is lockable
-        if (oh.isLockable()) {
-            widths.add(new Integer(this.longWidth));
-            texts
-                .add(Boolean.toString(n.isNodeType(JcrConstants.MIX_LOCKABLE)));
-        }
-
-        // is referenceable
-        if (oh.isReferenceable()) {
-            widths.add(new Integer(this.longWidth));
-            texts.add(Boolean.toString(n
-                .isNodeType(JcrConstants.MIX_REFERENCEABLE)));
-        }
-
-        // is locked
-        if (oh.isLocked()) {
-            widths.add(new Integer(this.longWidth));
-            texts.add(Boolean.toString(n.isLocked()));
-        }
-
-        // has lock
-        if (oh.isHasLock()) {
-            widths.add(new Integer(this.longWidth));
-            texts.add(Boolean.toString(n.holdsLock()));
-        }
-
-        // path
-        if (oh.isPath()) {
-            widths.add(new Integer(this.pathWidth));
-            texts.add(n.getPath());
-        }
-
-        // lock token
-        if (oh.isLockToken()) {
-            widths.add(new Integer(this.nameWidth));
-            if (n.isLocked()) {
-                texts.add(n.getLock().getLockToken());
-            } else {
-                texts.add("");
-            }
-        }
-
-        PrintHelper.printRow(ctx, widths, texts);
-    }
-
-    /**
-     * Prints the header
-     * @param ctx
-     *        the <code>Context</code>
-     * @throws CommandException
-     */
-    void writeHeader(Context ctx, OptionHolder oh) throws CommandException {
-        // TODO do something with this long piece of code
-        Collection widths = new ArrayList();
-        Collection texts = new ArrayList();
-        widths.add(new Integer(this.nameWidth));
-        texts.add(bundle.getString("word.name"));
-        widths.add(new Integer(this.nodeTypeWidth));
-        texts.add(bundle.getString("word.nodetype"));
-
-        // uuid
-        if (oh.isUuid()) {
-            widths.add(new Integer(this.uuidWidth));
-            texts.add("uuid");
-        }
-
-        // is new
-        if (oh.isNew_()) {
-            widths.add(new Integer(this.longWidth));
-            texts.add(bundle.getString("word.new"));
-        }
-
-        // is new
-        if (oh.isModified()) {
-            widths.add(new Integer(this.longWidth));
-            texts.add(bundle.getString("word.modified"));
-        }
-
-        // mixin
-        if (oh.isMixin()) {
-            widths.add(new Integer(this.mixinWidth));
-            texts.add("mixin");
-        }
-
-        // node size
-        if (oh.isNodesSize()) {
-            widths.add(new Integer(this.longWidth));
-            texts.add(bundle.getString("word.nodes"));
-        }
-
-        // prop size
-        if (oh.isPropertiesSize()) {
-            widths.add(new Integer(this.longWidth));
-            texts.add(bundle.getString("word.properties"));
-        }
-
-        // ref size
-        if (oh.isReferencesSize()) {
-            widths.add(new Integer(this.longWidth));
-            texts.add(bundle.getString("word.references"));
-        }
-
-        // is versionable
-        if (oh.isVersionable()) {
-            widths.add(new Integer(this.longWidth));
-            texts.add(bundle.getString("word.versionable"));
-        }
-
-        // is lockable
-        if (oh.isLockable()) {
-            widths.add(new Integer(this.longWidth));
-            texts.add(bundle.getString("word.lockable"));
-        }
-
-        // is referenceable
-        if (oh.isReferenceable()) {
-            widths.add(new Integer(this.longWidth));
-            texts.add(bundle.getString("word.referenceable"));
-        }
-
-        // is locked
-        if (oh.isLocked()) {
-            widths.add(new Integer(this.longWidth));
-            texts.add(bundle.getString("word.locked"));
-        }
-
-        // has lock
-        if (oh.isHasLock()) {
-            widths.add(new Integer(this.longWidth));
-            texts.add(bundle.getString("phrase.haslock"));
-        }
-
-        // path
-        if (oh.isPath()) {
-            widths.add(new Integer(this.pathWidth));
-            texts.add(bundle.getString("word.path"));
-        }
-
-        if (oh.isLockToken()) {
-            widths.add(new Integer(this.nameWidth));
-            texts.add(bundle.getString("word.locktoken"));
-        }
-
-        PrintHelper.printRow(ctx, widths, texts);
-        PrintHelper.printSeparatorRow(ctx, widths, '-');
-    }
-
-    /**
-     * option holder
-     */
-    private class OptionHolder {
-        /** show path */
-        private boolean path = false;
-
-        /** show uuid */
-        private boolean uuid = false;
-
-        /** show mixin */
-        private boolean mixin = false;
-
-        /** show node size */
-        private boolean nodesSize = false;
-
-        /** show properties size */
-        private boolean propertiesSize = false;
-
-        /** show references size */
-        private boolean referencesSize = false;
-
-        /** show is versionable */
-        private boolean versionable = false;
-
-        /** show is lockable */
-        private boolean lockable = false;
-
-        /** show is referenceable */
-        private boolean referenceable = false;
-
-        /** show is locked */
-        private boolean locked = false;
-
-        /** show has lock */
-        private boolean hasLock = false;
-
-        /** show is new */
-        private boolean new_ = false;
-
-        /** show is modified */
-        private boolean modified = false;
-
-        /** lock tokeb */
-        private boolean lockToken = false;
-
-        /** context */
-        private Context ctx;
-
-        /**
-         * @param key
-         *        the key the flag key
-         * @return the boolean value for the given key
-         */
-        private boolean getFlag(String key) {
-            boolean flag = false;
-            if (ctx.containsKey(key)) {
-                flag = Boolean.valueOf((String) ctx.get(key)).booleanValue();
-            }
-            return flag;
-        }
-
-        /**
-         * Constructor
-         * @param ctx
-         *        the <code>Context</code>
-         */
-        public OptionHolder(Context ctx) {
-            super();
-            this.ctx = ctx;
-            path = getFlag(pathKey);
-            uuid = getFlag(uuidKey);
-            mixin = getFlag(mixinKey);
-            nodesSize = getFlag(nodesSizeKey);
-            propertiesSize = getFlag(propertiesSizeKey);
-            referencesSize = getFlag(referencesSizeKey);
-            versionable = getFlag(versionableKey);
-            lockable = getFlag(lockableKey);
-            referenceable = getFlag(referenceableKey);
-            locked = getFlag(lockedKey);
-            hasLock = getFlag(hasLockKey);
-            new_ = getFlag(new_Key);
-            modified = getFlag(modifiedKey);
-            lockToken = getFlag(lockTokenKey);
-        }
-
-        /**
-         * @return the has lock
-         */
-        public boolean isHasLock() {
-            return hasLock;
-        }
-
-        /**
-         * @return Returns the lockable.
-         */
-        public boolean isLockable() {
-            return lockable;
-        }
-
-        /**
-         * @return Returns the locked.
-         */
-        public boolean isLocked() {
-            return locked;
-        }
-
-        /**
-         * @return Returns the mixin.
-         */
-        public boolean isMixin() {
-            return mixin;
-        }
-
-        /**
-         * @return Returns the modified.
-         */
-        public boolean isModified() {
-            return modified;
-        }
-
-        /**
-         * @return Returns the new_.
-         */
-        public boolean isNew_() {
-            return new_;
-        }
-
-        /**
-         * @return Returns the nodesSize.
-         */
-        public boolean isNodesSize() {
-            return nodesSize;
-        }
-
-        /**
-         * @return Returns the propertiesSize.
-         */
-        public boolean isPropertiesSize() {
-            return propertiesSize;
-        }
-
-        /**
-         * @return Returns the referenceable.
-         */
-        public boolean isReferenceable() {
-            return referenceable;
-        }
-
-        /**
-         * @return Returns the referencesSize.
-         */
-        public boolean isReferencesSize() {
-            return referencesSize;
-        }
-
-        /**
-         * @return Returns the uuid.
-         */
-        public boolean isUuid() {
-            return uuid;
-        }
-
-        /**
-         * @return Returns the versionable.
-         */
-        public boolean isVersionable() {
-            return versionable;
-        }
-
-        /**
-         * @return Returns the path.
-         */
-        public boolean isPath() {
-            return path;
-        }
-
-        public boolean isLockToken() {
-            return lockToken;
-        }
-    }
-
-    /**
-     * @return Returns the hasLockKey.
-     */
-    public String getHasLockKey() {
-        return hasLockKey;
-    }
-
-    /**
-     * @param hasLockKey
-     *        The hasLockKey to set.
-     */
-    public void setHasLockKey(String hasLockKey) {
-        this.hasLockKey = hasLockKey;
-    }
-
-    /**
-     * @return Returns the lockableKey.
-     */
-    public String getLockableKey() {
-        return lockableKey;
-    }
-
-    /**
-     * @param lockableKey
-     *        The lockableKey to set.
-     */
-    public void setLockableKey(String lockableKey) {
-        this.lockableKey = lockableKey;
-    }
-
-    /**
-     * @return Returns the lockedKey.
-     */
-    public String getLockedKey() {
-        return lockedKey;
-    }
-
-    /**
-     * @param lockedKey
-     *        The lockedKey to set.
-     */
-    public void setLockedKey(String lockedKey) {
-        this.lockedKey = lockedKey;
-    }
-
-    /**
-     * @return Returns the mixinKey.
-     */
-    public String getMixinKey() {
-        return mixinKey;
-    }
-
-    /**
-     * @param mixinKey
-     *        The mixinKey to set.
-     */
-    public void setMixinKey(String mixinKey) {
-        this.mixinKey = mixinKey;
-    }
-
-    /**
-     * @return Returns the modifiedKey.
-     */
-    public String getModifiedKey() {
-        return modifiedKey;
-    }
-
-    /**
-     * @param modifiedKey
-     *        The modifiedKey to set.
-     */
-    public void setModifiedKey(String modifiedKey) {
-        this.modifiedKey = modifiedKey;
-    }
-
-    /**
-     * @return Returns the new_Key.
-     */
-    public String getNew_Key() {
-        return new_Key;
-    }
-
-    /**
-     * @param new_Key
-     *        The new_Key to set.
-     */
-    public void setNew_Key(String new_Key) {
-        this.new_Key = new_Key;
-    }
-
-    /**
-     * @return Returns the nodesSizeKey.
-     */
-    public String getNodesSizeKey() {
-        return nodesSizeKey;
-    }
-
-    /**
-     * @param nodesSizeKey
-     *        The nodesSizeKey to set.
-     */
-    public void setNodesSizeKey(String nodesSizeKey) {
-        this.nodesSizeKey = nodesSizeKey;
-    }
-
-    /**
-     * @return Returns the pathKey.
-     */
-    public String getPathKey() {
-        return pathKey;
-    }
-
-    /**
-     * @param pathKey
-     *        The pathKey to set.
-     */
-    public void setPathKey(String pathKey) {
-        this.pathKey = pathKey;
-    }
-
-    /**
-     * @return Returns the propertiesSizeKey.
-     */
-    public String getPropertiesSizeKey() {
-        return propertiesSizeKey;
-    }
-
-    /**
-     * @param propertiesSizeKey
-     *        The propertiesSizeKey to set.
-     */
-    public void setPropertiesSizeKey(String propertiesSizeKey) {
-        this.propertiesSizeKey = propertiesSizeKey;
-    }
-
-    /**
-     * @return Returns the referenceableKey.
-     */
-    public String getReferenceableKey() {
-        return referenceableKey;
-    }
-
-    /**
-     * @param referenceableKey
-     *        The referenceableKey to set.
-     */
-    public void setReferenceableKey(String referenceableKey) {
-        this.referenceableKey = referenceableKey;
-    }
-
-    /**
-     * @return Returns the referencesSizeKey.
-     */
-    public String getReferencesSizeKey() {
-        return referencesSizeKey;
-    }
-
-    /**
-     * @param referencesSizeKey
-     *        The referencesSizeKey to set.
-     */
-    public void setReferencesSizeKey(String referencesSizeKey) {
-        this.referencesSizeKey = referencesSizeKey;
-    }
-
-    /**
-     * @return Returns the uuidKey.
-     */
-    public String getUuidKey() {
-        return uuidKey;
-    }
-
-    /**
-     * @param uuidKey
-     *        The uuidKey to set.
-     */
-    public void setUuidKey(String uuidKey) {
-        this.uuidKey = uuidKey;
-    }
-
-    /**
-     * @return Returns the versionableKey.
-     */
-    public String getVersionableKey() {
-        return versionableKey;
-    }
-
-    /**
-     * @param versionableKey
-     *        The versionableKey to set.
-     */
-    public void setVersionableKey(String versionableKey) {
-        this.versionableKey = versionableKey;
-    }
-
-    /**
-     * @return the lock token key
-     */
-    public String getLockTokenKey() {
-        return lockTokenKey;
-    }
-
-    /**
-     * @param lockTokenKey
-     *        the lock token to set
-     */
-    public void setLockTokenKey(String lockTokenKey) {
-        this.lockTokenKey = lockTokenKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/AbstractLsProperties.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/AbstractLsProperties.java
deleted file mode 100644
index 266a700..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/AbstractLsProperties.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.info;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.ResourceBundle;
-
-import javax.jcr.Property;
-import javax.jcr.PropertyType;
-import javax.jcr.RepositoryException;
-import javax.jcr.Value;
-import javax.jcr.ValueFormatException;
-
-import org.apache.commons.chain.Context;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * List properties superclass
- */
-public abstract class AbstractLsProperties extends AbstractLs {
-
-    /** bundle */
-    private static ResourceBundle bundle = CommandHelper.getBundle();
-
-    /** length of length field */
-    private static final int LENGTH_LENGTH = 8;
-
-    /**
-     * {@inheritDoc}
-     */
-    public final boolean execute(Context ctx) throws Exception {
-        int[] width = new int[] {
-                30, longWidth, longWidth, LENGTH_LENGTH, 18
-        };
-
-        String header[] = new String[] {
-                bundle.getString("word.name"),
-                bundle.getString("word.multiple"),
-                bundle.getString("word.type"), bundle.getString("word.length"),
-                bundle.getString("word.preview")
-        };
-
-        PrintHelper.printRow(ctx, width, header);
-        PrintHelper.printSeparatorRow(ctx, width, '-');
-
-        int index = 0;
-        Iterator iter = getProperties(ctx);
-
-        int maxItems = getMaxItems(ctx);
-
-        while (iter.hasNext() && index < maxItems) {
-            Property p = (Property) iter.next();
-
-            long length = 0;
-
-            if (p.getDefinition().isMultiple()) {
-                long[] lengths = p.getLengths();
-                for (int i = 0; i < lengths.length; i++) {
-                    length += lengths[i];
-                }
-            } else {
-                length = p.getLength();
-            }
-
-            String multiple = Boolean.toString(p.getDefinition().isMultiple());
-            if (p.getDefinition().isMultiple()) {
-                multiple += "[" + p.getValues().length + "]";
-            }
-
-            Collection row = new ArrayList();
-            row.add(p.getName());
-            row.add(multiple);
-            row.add(PropertyType.nameFromValue(p.getType()));
-            row.add(Long.toString(length));
-            // preview
-            if (p.getDefinition().isMultiple()) {
-                row.add(this.getMultiplePreview(p));
-            } else {
-                row.add(this.getPreview(p));
-            }
-
-            PrintHelper.printRow(ctx, width, row);
-            index++;
-        }
-
-        CommandHelper.getOutput(ctx).println();
-
-        // Write footer
-        printFooter(ctx, iter);
-
-        return false;
-    }
-
-    /**
-     * @param ctx
-     *        the <code>Context</code>
-     * @return collected <code>Property</code> s to display
-     * @throws Exception
-     *         if the <code>Property</code> s can't be retrieved
-     */
-    protected abstract Iterator getProperties(Context ctx) throws Exception;
-
-    /**
-     * @param property
-     * @return the first 50 characters of single value properties
-     * @throws RepositoryException
-     */
-    private String getPreview(Property p) throws RepositoryException {
-        String value = p.getValue().getString();
-        return value.substring(0, Math.min(value.length(), 50));
-    }
-
-    /**
-     * @param property
-     * @return a <code>Collection</code> in which element contains the first
-     *         50 characters of the <code>Value</code>'s string
-     *         representation
-     * @throws RepositoryException
-     * @throws ValueFormatException
-     */
-    private Collection getMultiplePreview(Property p)
-            throws ValueFormatException, RepositoryException {
-        Collection c = new ArrayList();
-        Value[] values = p.getValues();
-        for (int i = 0; i < values.length; i++) {
-            try {
-                String value = values[i].getString();
-                c.add(value.substring(0, Math.min(value.length(), 50)));
-            } catch (ValueFormatException e) {
-                c.add(bundle.getString("phrase.notavailable"));
-            }
-        }
-        return c;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/Cat.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/Cat.java
deleted file mode 100644
index 134cbba..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/Cat.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.info;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringReader;
-
-import javax.jcr.Item;
-import javax.jcr.Node;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.Property;
-import javax.jcr.RepositoryException;
-import javax.jcr.Value;
-import javax.jcr.ValueFormatException;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.jackrabbit.command.CommandHelper;
-import org.apache.jackrabbit.command.CommandException;
-
-/**
- * Display the content of a <code>Property</code> or a <code>Node</code> of
- * type nt:file or nt:resource.
- */
-public class Cat implements Command {
-    /** property name */
-    private String pathKey = "path";
-
-    /** index. [optional] argument to display multivalue properties */
-    private String indexKey = "index";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String path = (String) ctx.get(this.pathKey);
-        Item item = CommandHelper.getItem(ctx, path);
-        if (item.isNode()) {
-            printNode(ctx, (Node) item);
-        } else {
-            printProperty(ctx, (Property) item);
-        }
-        return false;
-    }
-
-    /**
-     * @return the path key
-     */
-    public String getPathKey() {
-        return pathKey;
-    }
-
-    /**
-     * @param path
-     *        the path key to set
-     */
-    public void setPathKey(String path) {
-        this.pathKey = path;
-    }
-
-    /**
-     * @param ctx
-     *        the <code>Context</code>
-     * @param n
-     *        the <code>Node</code>
-     * @throws PathNotFoundException
-     * @throws CommandException
-     * @throws RepositoryException
-     * @throws IllegalStateException
-     * @throws IOException
-     */
-    private void printNode(Context ctx, Node n) throws PathNotFoundException,
-            CommandException, RepositoryException, IllegalStateException,
-            IOException {
-        if (n.isNodeType("nt:file")) {
-            printValue(ctx, n.getNode("jcr:content").getProperty("jcr:data")
-                .getValue());
-        } else if (n.isNodeType("nt:resource")) {
-            printValue(ctx, n.getProperty("jcr:data").getValue());
-        } else {
-            throw new CommandException("exception.cat.unsupported.type",
-                new String[] {
-                    n.getPrimaryNodeType().getName()
-                });
-        }
-    }
-
-    /**
-     * @param ctx
-     *        the <code>Context</code>
-     * @param p
-     *        the <code>Property</code>
-     * @throws CommandException
-     * @throws ValueFormatException
-     * @throws IllegalStateException
-     * @throws RepositoryException
-     * @throws IOException
-     */
-    private void printProperty(Context ctx, Property p)
-            throws CommandException, ValueFormatException,
-            IllegalStateException, RepositoryException, IOException {
-        String indexStr = (String) ctx.get(this.indexKey);
-        int index = 0;
-        if (indexStr != null) {
-            index = Integer.parseInt(indexStr);
-        }
-        if (p.getDefinition().isMultiple()) {
-            printValue(ctx, p.getValues()[index]);
-        } else {
-            printValue(ctx, p.getValue());
-        }
-    }
-
-    /**
-     * Read the value
-     * @param ctx
-     *        the <code>Context</code>
-     * @param value
-     *        the <code>Value</code>
-     * @throws ValueFormatException
-     * @throws IllegalStateException
-     * @throws RepositoryException
-     * @throws IOException
-     */
-    private void printValue(Context ctx, Value value)
-            throws ValueFormatException, IllegalStateException,
-            RepositoryException, IOException {
-        PrintWriter out = CommandHelper.getOutput(ctx);
-        out.println();
-        BufferedReader in = new BufferedReader(new StringReader(value
-            .getString()));
-        String str = null;
-        while ((str = in.readLine()) != null) {
-            out.println(str);
-        }
-    }
-
-    /**
-     * @return the index key
-     */
-    public String getIndexKey() {
-        return indexKey;
-    }
-
-    /**
-     * @param indexKey
-     *        the index key to set
-     */
-    public void setIndexKey(String indexKey) {
-        this.indexKey = indexKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/Describe.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/Describe.java
deleted file mode 100644
index 045d710..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/Describe.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.info;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-
-/**
- * Describes the given <code>Node</code>.
- */
-public class Describe implements Command {
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context arg0) throws Exception {
-        throw new UnsupportedOperationException();
-    }
-
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/Dump.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/Dump.java
deleted file mode 100644
index d4f7b05..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/Dump.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.info;
-
-import java.io.PrintWriter;
-
-import javax.jcr.Node;
-import javax.jcr.NodeIterator;
-import javax.jcr.Property;
-import javax.jcr.PropertyIterator;
-import javax.jcr.RepositoryException;
-import javax.jcr.Value;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Dump stored data from the current working <code>Node</code>
- */
-public class Dump implements Command {
-    /** root node to dump */
-    private String pathKey = "path";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String path = (String) ctx.get(this.pathKey);
-        PrintWriter out = CommandHelper.getOutput(ctx);
-        dump(out, CommandHelper.getNode(ctx, path));
-        return false;
-    }
-
-    /**
-     * Dumps the given <code>Node</code> to the given <code>PrintWriter</code>
-     * @param out
-     *        the <code>PrintWriter</code>
-     * @param n
-     *        the <code>Node</code>
-     * @throws RepositoryException
-     */
-    public void dump(PrintWriter out, Node n) throws RepositoryException {
-        out.println(n.getPath());
-        PropertyIterator pit = n.getProperties();
-        while (pit.hasNext()) {
-            Property p = pit.nextProperty();
-            out.print(p.getPath() + "=");
-            if (p.getDefinition().isMultiple()) {
-                Value[] values = p.getValues();
-                for (int i = 0; i < values.length; i++) {
-                    if (i > 0)
-                        out.println(",");
-                    out.println(values[i].getString());
-                }
-            } else {
-                out.print(p.getString());
-            }
-            out.println();
-        }
-        NodeIterator nit = n.getNodes();
-        while (nit.hasNext()) {
-            Node cn = nit.nextNode();
-            dump(out, cn);
-        }
-    }
-
-    /**
-     * @return the path key
-     */
-    public String getPathKey() {
-        return pathKey;
-    }
-
-    /**
-     * @param pathKey
-     *        the path key to set
-     */
-    public void setPathKey(String pathKey) {
-        this.pathKey = pathKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/Help.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/Help.java
deleted file mode 100644
index b065e43..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/Help.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.info;
-
-import java.io.PrintWriter;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.ResourceBundle;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.cli.HelpFormatter;
-import org.apache.jackrabbit.command.CommandException;
-import org.apache.jackrabbit.command.CommandHelper;
-import org.apache.jackrabbit.command.cli.AbstractParameter;
-import org.apache.jackrabbit.command.cli.Argument;
-import org.apache.jackrabbit.command.cli.CommandLine;
-import org.apache.jackrabbit.command.cli.CommandLineFactory;
-import org.apache.jackrabbit.command.cli.Flag;
-import org.apache.jackrabbit.command.cli.Option;
-
-/**
- * Show available <code>Command</code>s. If a <code>Command</code> is
- * specified it will show its description, usage and parameters.
- */
-public class Help implements Command {
-    /** bundle */
-    private static ResourceBundle bundle = CommandHelper.getBundle();
-
-    /** Command factory */
-    private CommandLineFactory factory = CommandLineFactory.getInstance();
-
-    /** Help formatter */
-    private HelpFormatter hf = new HelpFormatter();
-
-    /** command key */
-    private String commandKey = "command";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String command = (String) ctx.get(this.commandKey);
-        PrintWriter out = CommandHelper.getOutput(ctx);
-        out.println();
-        if (command == null) {
-            helpAll(ctx);
-        } else {
-            helpCommand(ctx);
-        }
-        return false;
-    }
-
-    /**
-     * Writes help for all the commands
-     * @param ctx
-     *        the current working <code>Context</code>
-     * @throws CommandException
-     */
-    private void helpAll(Context ctx) throws CommandException {
-        PrintWriter out = CommandHelper.getOutput(ctx);
-        Collection descriptors = factory.getCommandLines();
-        Iterator iter = descriptors.iterator();
-
-        // Tab position
-        int tabPos = 20;
-        while (iter.hasNext()) {
-            CommandLine desc = (CommandLine) iter.next();
-            if (desc.getName().length() > tabPos) {
-                tabPos = desc.getName().length() + 1;
-            }
-        }
-
-        iter = descriptors.iterator();
-        while (iter.hasNext()) {
-            CommandLine desc = (CommandLine) iter.next();
-            StringBuffer buf = new StringBuffer(desc.getName());
-            buf.setLength(tabPos);
-            for (int i = desc.getName().length(); i < buf.length(); i++) {
-                buf.setCharAt(i, ' ');
-            }
-            buf.append(desc.getLocalizedDescription());
-            hf.printWrapped(out, 70, tabPos, buf.toString());
-        }
-    }
-
-    /**
-     * Writes detailed help for the given command
-     * @param ctx
-     *        the current working <code>Context</code>
-     * @throws CommandException
-     */
-    private void helpCommand(Context ctx) throws CommandException {
-        PrintWriter out = CommandHelper.getOutput(ctx);
-
-        String cmdName = (String) ctx.get(this.commandKey);
-
-        CommandLine desc = factory.getCommandLine(cmdName);
-
-        out.println(bundle.getString("word.description") + ": ");
-        out.println(desc.getLocalizedDescription());
-        out.println();
-
-        // Usage
-        out.print(bundle.getString("word.usage") + ":");
-        out.print(desc.getName() + " ");
-
-        // Arguments
-        Iterator iter = desc.getArguments().values().iterator();
-        while (iter.hasNext()) {
-            Argument arg = (Argument) iter.next();
-            out.print("<" + arg.getLocalizedArgName() + "> ");
-        }
-
-        // Options
-        iter = desc.getOptions().values().iterator();
-        while (iter.hasNext()) {
-            Option arg = (Option) iter.next();
-            out.print("-" + arg.getName() + " <" + arg.getLocalizedArgName()
-                    + "> ");
-        }
-
-        // flags
-        iter = desc.getFlags().values().iterator();
-        while (iter.hasNext()) {
-            Flag arg = (Flag) iter.next();
-            out.print("-" + arg.getName() + " ");
-        }
-        out.println();
-
-        // Alias
-        if (desc.getAlias().size() > 0) {
-            out.print(bundle.getString("word.alias") + ":");
-            iter = desc.getAlias().iterator();
-            while (iter.hasNext()) {
-                out.print((String) iter.next() + " ");
-
-            }
-            out.println();
-        }
-        out.println();
-
-        // Arguments details
-        if (desc.getArguments().size() > 0) {
-            out.println("<" + bundle.getString("word.arguments") + ">");
-            printParam(ctx, desc.getArguments().values());
-        }
-
-        // Options details
-        if (desc.getOptions().values().size() > 0) {
-            out.println();
-            out.println("<" + bundle.getString("word.options") + ">");
-            printParam(ctx, desc.getOptions().values());
-        }
-
-        // flag details
-        if (desc.getFlags().values().size() > 0) {
-            out.println();
-            out.println("<" + bundle.getString("word.flags") + ">");
-            printParam(ctx, desc.getFlags().values());
-        }
-
-    }
-
-    /**
-     * @param ctx
-     *        the current working <code>Context</code>
-     * @param params
-     *        the parameters
-     */
-    private void printParam(Context ctx, Collection params) {
-        int[] width = new int[] {
-                10, 10, 10, 40
-        };
-
-        String[] header = new String[] {
-                bundle.getString("word.name"),
-                bundle.getString("word.argument"),
-                bundle.getString("word.required"),
-                bundle.getString("word.description")
-        };
-
-        PrintHelper.printRow(ctx, width, header);
-        PrintHelper.printSeparatorRow(ctx, width, '-');
-
-        Iterator iter = params.iterator();
-        while (iter.hasNext()) {
-            AbstractParameter p = (AbstractParameter) iter.next();
-            String[] item = new String[] {
-                    p.getName(), p.getLocalizedArgName(),
-                    Boolean.toString(p.isRequired()),
-                    p.getLocalizedDescription()
-            };
-            PrintHelper.printRow(ctx, width, item);
-        }
-
-    }
-
-    /**
-     * @return the command key
-     */
-    public String getCommandKey() {
-        return commandKey;
-    }
-
-    /**
-     * @param commandKey
-     *        the command key to set
-     */
-    public void setCommandKey(String commandKey) {
-        this.commandKey = commandKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/JcrInfoCommandException.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/JcrInfoCommandException.java
deleted file mode 100644
index ef8a7ec..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/JcrInfoCommandException.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.info;
-
-import org.apache.jackrabbit.command.CommandException;
-
-/**
- * Exception thrown by Info Commands
- */
-public class JcrInfoCommandException extends CommandException {
-    /**
-     * Comment for <code>serialVersionUID</code>
-     */
-    private static final long serialVersionUID = 3257854259679866933L;
-
-    /**
-     * @param message
-     *        the message
-     */
-    public JcrInfoCommandException(String message) {
-        super(message);
-    }
-
-    /**
-     * @param message
-     *        the message
-     * @param arguments
-     *        the arguments
-     */
-    public JcrInfoCommandException(String message, Object[] arguments) {
-        super(message, arguments);
-    }
-
-    /**
-     * @param message
-     *        the message
-     * @param cause
-     *        the cause
-     */
-    public JcrInfoCommandException(String message, Throwable cause) {
-        super(message, cause);
-    }
-
-    /**
-     * @param message
-     *        the message
-     * @param cause
-     *        the cause
-     * @param arguments
-     *        the arguments
-     */
-    public JcrInfoCommandException(String message, Throwable cause,
-        Object[] arguments) {
-        super(message, cause, arguments);
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/LsCollectedItems.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/LsCollectedItems.java
deleted file mode 100644
index 513eb25..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/LsCollectedItems.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.info;
-
-import java.util.Iterator;
-
-import javax.jcr.RepositoryException;
-
-import org.apache.commons.chain.Context;
-import org.apache.jackrabbit.command.CommandException;
-
-/**
- * Lists collected <code>Item</code>s.<br>
- * This <code>Command</code> looks for an <code>Iterator</code> under the
- * given <code>Context</code> variable and lists its <code>Item<code>s.
- */
-public class LsCollectedItems extends AbstractLsItems {
-    /** Context variable that holds the Iterator */
-    private String fromKey = "collected";
-
-    /**
-     * @return the context variable
-     */
-    public String getFromKey() {
-        return fromKey;
-    }
-
-    /**
-     * Sets the context variable
-     * @param from
-     *        from key to set
-     */
-    public void setFromKey(String from) {
-        this.fromKey = from;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    protected Iterator getItems(Context ctx) throws CommandException,
-            RepositoryException {
-        // Always show the path
-        this.setPath(true);
-        Object o = ctx.get(this.fromKey);
-        if (o == null || !(o instanceof Iterator)) {
-            throw new JcrInfoCommandException(
-                "illegalargument.no.iterator.under", new String[] {
-                    fromKey
-                });
-        }
-        return (Iterator) o;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/LsCollectedNodes.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/LsCollectedNodes.java
deleted file mode 100644
index c476e20..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/LsCollectedNodes.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.info;
-
-import java.util.Iterator;
-
-import javax.jcr.RepositoryException;
-
-import org.apache.commons.chain.Context;
-import org.apache.jackrabbit.command.CommandException;
-
-/**
- * Lists collected <code>Node</code>s.<br>
- * This <code>Command</code> looks for an <code>Iterator</code> under the
- * given <code>Context</code> variable and lists its <code>Node</code>s.
- */
-public class LsCollectedNodes extends AbstractLsNodes {
-    /** Context variable that holds the Iterator */
-    private String fromKey = "collected";
-
-    /**
-     * @return the context variable
-     */
-    public String getFromKey() {
-        return fromKey;
-    }
-
-    /**
-     * Sets the <code>Context<code> variable
-     * @param contextVariable
-     *        the context variable
-     */
-    public void setFromKey(String contextVariable) {
-        this.fromKey = contextVariable;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    protected Iterator getNodes(Context ctx) throws CommandException,
-            RepositoryException {
-        this.setPath(true);
-        Object o = ctx.get(this.fromKey);
-        if (o == null || !(o instanceof Iterator)) {
-            throw new JcrInfoCommandException(
-                "illegalargument.no.iterator.under", new String[] {
-                    fromKey
-                });
-        }
-        return (Iterator) o;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/LsCollectedProperties.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/LsCollectedProperties.java
deleted file mode 100644
index 4df5ed5..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/LsCollectedProperties.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.info;
-
-import java.util.Iterator;
-
-import javax.jcr.RepositoryException;
-
-import org.apache.commons.chain.Context;
-import org.apache.jackrabbit.command.CommandException;
-
-/**
- * Lists collected <code>Property</code>s.<br>
- * This <code>Command</code> looks for an <code>Iterator</code> under the
- * given <code>Context</code> variable and lists its <code>Property</code>s.
- */
-public class LsCollectedProperties extends AbstractLsProperties {
-    /** Context variable that holds the Iterator */
-    private String fromKey = "collected";
-
-    /**
-     * @return the from key
-     */
-    public String getFromKey() {
-        return fromKey;
-    }
-
-    /**
-     * @param fromKey
-     *        from key to set
-     */
-    public void setFromKey(String fromKey) {
-        this.fromKey = fromKey;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    protected Iterator getProperties(Context ctx) throws CommandException,
-            RepositoryException {
-        // show the path
-        this.setPath(true);
-        Object o = ctx.get(fromKey);
-        if (o == null || !(o instanceof Iterator)) {
-            throw new JcrInfoCommandException(
-                "illegalargument.no.iterator.under", new String[] {
-                    fromKey
-                });
-        }
-        return (Iterator) o;
-    }
-
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/LsItems.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/LsItems.java
deleted file mode 100644
index 7e7c918..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/LsItems.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.info;
-
-import java.util.Iterator;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-
-import org.apache.commons.chain.Context;
-import org.apache.jackrabbit.command.CommandHelper;
-import org.apache.jackrabbit.command.CommandException;
-
-/**
- * List items
- * <p>
- * <ul>
- * <li>name</li>
- * <li>type</li>
- * <li>isNode</li>
- * <li>isNew</li>
- * <li>isModified</li>
- * </ul>
- * </p>
- */
-public class LsItems extends AbstractLsItems {
-
-    /** name pattern key */
-    private String patternKey = "pattern";
-
-    /**
-     * @return the name pattern
-     */
-    public String getPatternKey() {
-        return patternKey;
-    }
-
-    /**
-     * @param pattern
-     *        the pattern
-     */
-    public void setPatternKey(String pattern) {
-        this.patternKey = pattern;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    protected Iterator getItems(Context ctx) throws CommandException,
-            RepositoryException {
-        String pattern = (String) ctx.get(this.patternKey);
-        Node n = CommandHelper.getCurrentNode(ctx);
-        return CommandHelper.getItems(ctx, n, pattern);
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/LsNamespaces.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/LsNamespaces.java
deleted file mode 100644
index bcdb414..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/LsNamespaces.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.info;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-
-/**
- * Lists the registered namespaces.
- */
-public class LsNamespaces implements Command {
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        throw new UnsupportedOperationException();
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/LsNodes.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/LsNodes.java
deleted file mode 100644
index 63c19cc..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/LsNodes.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.info;
-
-import java.util.Iterator;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-
-import org.apache.commons.chain.Context;
-import org.apache.jackrabbit.command.CommandHelper;
-import org.apache.jackrabbit.command.CommandException;
-
-/**
- * List the <code>Node</code>s under the current working <code>Node</code>
- * that match the given pattern.
- */
-public class LsNodes extends AbstractLsNodes {
-
-    /** name pattern key */
-    private String patternKey = "pattern";
-
-    /**
-     * {@inheritDoc}
-     */
-    protected Iterator getNodes(Context ctx) throws CommandException,
-            RepositoryException {
-        String pattern = (String) ctx.get(this.patternKey);
-        Node n = CommandHelper.getCurrentNode(ctx);
-        return CommandHelper.getNodes(ctx, n, pattern);
-    }
-
-    /**
-     * @return the pattern key
-     */
-    public String getPatternKey() {
-        return patternKey;
-    }
-
-    /**
-     * @param patternKey
-     *        the pattern key to set
-     */
-    public void setPatternKey(String patternKey) {
-        this.patternKey = patternKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/LsProperties.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/LsProperties.java
deleted file mode 100644
index e001004..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/LsProperties.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.info;
-
-import java.util.Iterator;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-
-import org.apache.commons.chain.Context;
-import org.apache.jackrabbit.command.CommandHelper;
-import org.apache.jackrabbit.command.CommandException;
-
-/**
- * <p>
- * Property fields:
- * <ul>
- * <li>name</li>
- * <li>multiple</li>
- * <li>type</li>
- * <li>length</li>
- * </ul>
- * </p>
- */
-public class LsProperties extends AbstractLsProperties {
-
-    /** property name pattern key */
-    private String patternKey = "pattern";
-
-    /**
-     * @return name pattern
-     */
-    public String getPatternKey() {
-        return patternKey;
-    }
-
-    /**
-     * Sets the name pattern
-     * @param pattern the pattern key
-     */
-    public void setPatternKey(String pattern) {
-        this.patternKey = pattern;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    protected Iterator getProperties(Context ctx) throws CommandException,
-            RepositoryException {
-        String pattern = (String) ctx.get(this.patternKey);
-        Node n = CommandHelper.getCurrentNode(ctx);
-        return CommandHelper.getProperties(ctx, n, pattern);
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/LsReferences.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/LsReferences.java
deleted file mode 100644
index 2702b08..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/LsReferences.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.info;
-
-import java.util.ResourceBundle;
-
-import javax.jcr.Node;
-import javax.jcr.Property;
-import javax.jcr.PropertyIterator;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Displays references to the given <code>Node</code>
- */
-public class LsReferences implements Command {
-    /** bundle */
-    private static ResourceBundle bundle = CommandHelper.getBundle();
-
-    /** path to the <code>Node</code> key */
-    private String pathKey = "path";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String path = (String) ctx.get(this.pathKey);
-        Node n = CommandHelper.getNode(ctx, path);
-
-        // header
-        int[] width = new int[] {
-            60
-        };
-        String[] header = new String[] {
-            bundle.getString("word.path")
-        };
-
-        // print header
-        PrintHelper.printRow(ctx, width, header);
-
-        // print separator
-        PrintHelper.printSeparatorRow(ctx, width, '-');
-
-        PropertyIterator iter = n.getReferences();
-        while (iter.hasNext()) {
-            Property p = iter.nextProperty();
-            // print header
-            PrintHelper.printRow(ctx, width, new String[] {
-                p.getPath()
-            });
-        }
-
-        CommandHelper.getOutput(ctx).println();
-        CommandHelper.getOutput(ctx).println(
-            iter.getSize() + " " + bundle.getString("word.references"));
-
-        return false;
-    }
-
-    /**
-     * @return the path key
-     */
-    public String getPathKey() {
-        return pathKey;
-    }
-
-    /**
-     * @param path
-     *        the path key to set
-     */
-    public void setPathKey(String path) {
-        this.pathKey = path;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/LsVersions.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/LsVersions.java
deleted file mode 100644
index ca84316..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/LsVersions.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.info;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.ResourceBundle;
-
-import javax.jcr.Node;
-import javax.jcr.version.Version;
-import javax.jcr.version.VersionIterator;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * List the <code>Version</code> s in the <code>VersionHistory</code>.
- */
-public class LsVersions implements Command {
-    /** bundle */
-    private static ResourceBundle bundle = CommandHelper.getBundle();
-
-    /** path to the node */
-    private String pathKey = "path";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String path = (String) ctx.get(this.pathKey);
-        Node n = CommandHelper.getNode(ctx, path);
-
-        // header
-        int[] width = new int[] {
-                20, 50
-        };
-        String[] header = new String[] {
-                bundle.getString("word.version"),
-                bundle.getString("word.labels")
-        };
-        // print header
-        PrintHelper.printRow(ctx, width, header);
-        // print separator
-        PrintHelper.printSeparatorRow(ctx, width, '-');
-        VersionIterator iter = n.getVersionHistory().getAllVersions();
-        while (iter.hasNext()) {
-            Version v = iter.nextVersion();
-            Collection row = new ArrayList();
-            row.add(v.getName());
-            row.add(Arrays.asList(n.getVersionHistory().getVersionLabels(v)));
-            PrintHelper.printRow(ctx, width, row);
-        }
-
-        return false;
-    }
-
-    /**
-     * @return the path key
-     */
-    public String getPathKey() {
-        return pathKey;
-    }
-
-    /**
-     * @param pathKey
-     *        the path key to set
-     */
-    public void setPathKey(String pathKey) {
-        this.pathKey = pathKey;
-    }
-
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/PrintHelper.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/PrintHelper.java
deleted file mode 100644
index 7e30091..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/PrintHelper.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.info;
-
-import java.io.PrintWriter;
-import java.util.Collection;
-import java.util.Iterator;
-
-import org.apache.commons.chain.Context;
-import org.apache.jackrabbit.command.CommandHelper;
-import org.apache.jackrabbit.command.CommandException;
-
-/**
- * Utility class for printing
- */
-final class PrintHelper {
-
-    /**
-     * private constructor
-     */
-    private PrintHelper() {
-        super();
-    }
-
-    /**
-     * @param ctx
-     *        the <code>Context</code>
-     * @param width
-     *        the columns width
-     * @param text
-     *        the text
-     */
-    public static void printRow(Context ctx, int[] width, String[] text) {
-        if (width.length != text.length) {
-            throw new IllegalArgumentException(
-                "width[] and text[] haven't the same length");
-        }
-
-        PrintWriter out = CommandHelper.getOutput(ctx);
-
-        int rows = 1;
-
-        // Calculate rows
-        for (int i = 0; i < text.length; i++) {
-            int textLength = text[i].length();
-            if (textLength == 0) {
-                textLength = 1;
-            }
-            int columnWidth = width[i];
-            int neededRows = (int) Math.ceil((double) textLength
-                    / (double) columnWidth);
-            if (neededRows > rows) {
-                rows = neededRows;
-            }
-        }
-
-        // Write table
-        for (int row = 0; row < rows; row++) {
-            for (int column = 0; column < width.length; column++) {
-                for (int pointer = 0; pointer < width[column]; pointer++) {
-                    int pos = row * width[column] + pointer;
-                    if (pos < text[column].length()) {
-                        out.print(text[column].charAt(pos));
-                    } else {
-                        out.print(' ');
-                    }
-                }
-                out.print(' ');
-            }
-            out.println();
-        }
-    }
-
-    /**
-     * @param ctx
-     *        the <code>Context</code>
-     * @param width
-     *        the column width
-     * @param separator
-     *        the separator chr
-     */
-    public static void printSeparatorRow(
-        Context ctx,
-        int[] width,
-        char separator) {
-        PrintWriter out = CommandHelper.getOutput(ctx);
-        for (int i = 0; i < width.length; i++) {
-            for (int j = 0; j <= width[i]; j++) {
-                if (j < width[i]) {
-                    out.print(separator);
-                } else {
-                    out.print(' ');
-                }
-            }
-        }
-        out.println();
-    }
-
-    /**
-     * @param ctx
-     *        the <code>Context</code>
-     * @param width
-     *        the column width
-     * @param texts
-     *        the texts
-     * @throws CommandException
-     */
-    public static void printRow(Context ctx, int[] width, Collection texts)
-            throws CommandException {
-        String[] text = new String[width.length];
-        Iterator iter = texts.iterator();
-        int column = 0;
-        while (iter.hasNext()) {
-            Object o = iter.next();
-            if (o == null) {
-                text[column] = "";
-            } else if (o instanceof String) {
-                text[column] = (String) o;
-            } else if (o instanceof Collection) {
-                StringBuffer sb = new StringBuffer();
-                Iterator i = ((Collection) o).iterator();
-                while (i.hasNext()) {
-                    String str = (String) i.next();
-                    int rows = (int) Math.ceil((double) str.length()
-                            / (double) width[column]);
-                    if (rows == 0) {
-                        rows = 1;
-                    }
-                    sb.append(str);
-                    for (int j = 0; j < rows * width[column] - str.length(); j++) {
-                        sb.append(' ');
-                    }
-                }
-                text[column] = sb.toString();
-            } else {
-                throw new CommandException("exception.illegalargument");
-            }
-            column++;
-        }
-        printRow(ctx, width, text);
-    }
-
-    /**
-     * @param ctx
-     *        the <code>Context</code>
-     * @param widths
-     *        the column width
-     * @param texts
-     *        the texts
-     * @throws CommandException
-     */
-    public static void printRow(Context ctx, Collection widths, Collection texts)
-            throws CommandException {
-        printRow(ctx, convertWidth(widths), texts);
-    }
-
-    /**
-     * @param widths
-     *        the column width
-     * @return the column width
-     * @throws CommandException
-     */
-    private static int[] convertWidth(Collection widths)
-            throws CommandException {
-        int[] width = new int[widths.size()];
-        int index = 0;
-        Iterator iter = widths.iterator();
-        while (iter.hasNext()) {
-            Integer i = (Integer) iter.next();
-            width[index] = i.intValue();
-            index++;
-        }
-        return width;
-    }
-
-    /**
-     * @param ctx
-     *        the <code>Context</code>
-     * @param widths
-     *        the columns widths
-     * @param separator
-     *        the separator char
-     * @throws CommandException
-     */
-    public static void printSeparatorRow(
-        Context ctx,
-        Collection widths,
-        char separator) throws CommandException {
-        printSeparatorRow(ctx, convertWidth(widths), separator);
-    }
-
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/lock/AddLockToken.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/lock/AddLockToken.java
deleted file mode 100644
index 0db83d4..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/lock/AddLockToken.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.lock;
-
-import javax.jcr.Session;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Add the given <code>Lock</code> token to the current <code>Session</code>
- */
-public class AddLockToken implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(AddLockToken.class);
-
-    // ---------------------------- < keys >
-    /**
-     * token
-     */
-    private String tokenKey = "token";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String token = (String) ctx.get(this.tokenKey);
-        if (log.isDebugEnabled()) {
-            log
-                .debug("Adding lock token " + token
-                        + " to the current session.");
-        }
-        Session s = CommandHelper.getSession(ctx);
-        s.addLockToken(token);
-        return false;
-    }
-
-    /**
-     * @return the token key
-     */
-    public String getTokenKey() {
-        return tokenKey;
-    }
-
-    /**
-     * @param tokenKey
-     *        the token key to set
-     */
-    public void setTokenKey(String tokenKey) {
-        this.tokenKey = tokenKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/lock/Lock.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/lock/Lock.java
deleted file mode 100644
index 014d8f0..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/lock/Lock.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.lock;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Lock the given <code>Node</code>
- */
-public class Lock implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(Lock.class);
-
-    // ---------------------------- < keys >
-    /** Node path key */
-    private String pathKey = "path";
-
-    /**
-     * depth lock
-     */
-    private String deepKey = "deep";
-
-    /**
-     * Session scoped lock <br>
-     * Key that refers to a <code>Boolean</code> context variable
-     */
-    private String sessionScopedKey = "sessionScoped";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String path = (String) ctx.get(this.pathKey);
-        boolean deep = Boolean.valueOf((String) ctx.get(this.deepKey))
-            .booleanValue();
-        boolean sessionScoped = Boolean.valueOf(
-            (String) ctx.get(this.sessionScopedKey)).booleanValue();
-        if (log.isDebugEnabled()) {
-            log.debug("locking node at " + path + " deep=" + deep
-                    + " sessionScoped=" + sessionScoped);
-        }
-        CommandHelper.getNode(ctx, path).lock(deep, sessionScoped);
-        return false;
-    }
-
-    /**
-     * @return deep key
-     */
-    public String getDeepKey() {
-        return deepKey;
-    }
-
-    /**
-     * @param deepKey
-     *        deep key to set
-     */
-    public void setDeepKey(String deepKey) {
-        this.deepKey = deepKey;
-    }
-
-    /**
-     * @return the session scoped key
-     */
-    public String getSessionScopedKey() {
-        return sessionScopedKey;
-    }
-
-    /**
-     * @param sessionScopedKey
-     *        the session scoped key to set
-     */
-    public void setSessionScopedKey(String sessionScopedKey) {
-        this.sessionScopedKey = sessionScopedKey;
-    }
-
-    /**
-     * @return the source path key
-     */
-    public String getPathKey() {
-        return pathKey;
-    }
-
-    /**
-     * @param srcPathKey
-     *        the source path key to set
-     */
-    public void setPathKey(String srcPathKey) {
-        this.pathKey = srcPathKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/lock/RefreshLock.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/lock/RefreshLock.java
deleted file mode 100644
index b97bd4c..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/lock/RefreshLock.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.lock;
-
-import javax.jcr.Node;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Reset the <code>Lock</code> timer
- */
-public class RefreshLock implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(RefreshLock.class);
-
-    // ---------------------------- < keys >
-    /** Node path key */
-    private String pathKey = "path";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String path = (String) ctx.get(this.pathKey);
-        if (log.isDebugEnabled()) {
-            log.debug("refreshing lock at " + path);
-        }
-        Node n = CommandHelper.getNode(ctx, path);
-        n.getLock().refresh();
-        return false;
-    }
-
-    /**
-     * @return the source path key
-     */
-    public String getPathKey() {
-        return pathKey;
-    }
-
-    /**
-     * @param srcPathKey
-     *        the source path key to set
-     */
-    public void setPathKey(String srcPathKey) {
-        this.pathKey = srcPathKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/lock/RemoveLockToken.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/lock/RemoveLockToken.java
deleted file mode 100644
index 61ba205..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/lock/RemoveLockToken.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.lock;
-
-import javax.jcr.Session;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Remove the given <code>Lock</code> token to the current
- * <code>Session</code>
- */
-public class RemoveLockToken implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(AddLockToken.class);
-
-    // ---------------------------- < keys >
-    /**
-     * token key
-     */
-    private String tokenKey = "token";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String token = (String) ctx.get(this.tokenKey);
-        if (log.isDebugEnabled()) {
-            log.debug("Removing lock token " + token
-                    + " from the current session.");
-        }
-        Session s = CommandHelper.getSession(ctx);
-        s.removeLockToken(token);
-        return false;
-    }
-
-    /**
-     * @return the token key
-     */
-    public String getTokenKey() {
-        return tokenKey;
-    }
-
-    /**
-     * @param tokenKey
-     *        the token key to set
-     */
-    public void setTokenKey(String tokenKey) {
-        this.tokenKey = tokenKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/lock/Unlock.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/lock/Unlock.java
deleted file mode 100644
index ebb42ca..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/lock/Unlock.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.lock;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Unlock the current working <code>Node</code>
- */
-public class Unlock implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(Unlock.class);
-
-    // ---------------------------- < keys >
-    /** Node path key */
-    private String pathKey = "path";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String path = (String) ctx.get(this.pathKey);
-        if (log.isDebugEnabled()) {
-            log.debug("Unlocking node at " + path);
-        }
-        CommandHelper.getNode(ctx, path).unlock();
-        return false;
-    }
-
-    /**
-     * @return the path key
-     */
-    public String getPathKey() {
-        return pathKey;
-    }
-
-    /**
-     * @param pathKey
-     *        the path key to set
-     */
-    public void setPathKey(String pathKey) {
-        this.pathKey = pathKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/mixin/AddMixin.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/mixin/AddMixin.java
deleted file mode 100644
index f22446c..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/mixin/AddMixin.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.mixin;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Add a mixin to the given <code>Node</code>
- */
-public class AddMixin implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(AddMixin.class);
-
-    // ---------------------------- < keys >
-    /** node path */
-    private String pathKey = "path";
-
-    /** mixin name */
-    private String mixinKey = "mixin";
-
-    /**
-     * @return Returns the mixinNameKey.
-     */
-    public String getMixinKey() {
-        return mixinKey;
-    }
-
-    /**
-     * @param mixinNameKey
-     *        The mixinNameKey to set.
-     */
-    public void setMixinKey(String mixinNameKey) {
-        this.mixinKey = mixinNameKey;
-    }
-
-    /**
-     * @return Returns the pathKey.
-     */
-    public String getPathKey() {
-        return pathKey;
-    }
-
-    /**
-     * @param pathKey
-     *        The pathKey to set.
-     */
-    public void setPathKey(String pathKey) {
-        this.pathKey = pathKey;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String path = (String) ctx.get(this.pathKey);
-        String mixin = (String) ctx.get(this.mixinKey);
-        if (log.isDebugEnabled()) {
-            log.debug("adding mixin " + mixin + " to node " + path);
-        }
-        CommandHelper.getNode(ctx, path).addMixin(mixin);
-        return false;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/mixin/RemoveMixin.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/mixin/RemoveMixin.java
deleted file mode 100644
index 4b1723c..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/mixin/RemoveMixin.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.mixin;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Remove a mixin from the given <code>Node</code>
- */
-public class RemoveMixin implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(RemoveMixin.class);
-
-    // ---------------------------- < keys >
-    /** node path */
-    private String pathKey = "path";
-
-    /** mixin name */
-    private String mixinKey = "mixin";
-
-    /**
-     * @return the mixin name key
-     */
-    public String getMixinKey() {
-        return mixinKey;
-    }
-
-    /**
-     * @param mixinNameKey
-     *        the mixin name key to set
-     */
-    public void setMixinKey(String mixinNameKey) {
-        this.mixinKey = mixinNameKey;
-    }
-
-    /**
-     * @return he path key
-     */
-    public String getPathKey() {
-        return pathKey;
-    }
-
-    /**
-     * @param pathKey
-     *        the path key to set
-     */
-    public void setPathKey(String pathKey) {
-        this.pathKey = pathKey;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String path = (String) ctx.get(this.pathKey);
-        String mixin = (String) ctx.get(this.mixinKey);
-        if (log.isDebugEnabled()) {
-            log.debug("removing mixin " + mixin + " from node " + path);
-        }
-        CommandHelper.getNode(ctx, path).removeMixin(mixin);
-        return false;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/namespace/RegisterNamespace.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/namespace/RegisterNamespace.java
deleted file mode 100644
index a719363..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/namespace/RegisterNamespace.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.namespace;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Register a namespace
- */
-public class RegisterNamespace implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(RegisterNamespace.class);
-
-    // ---------------------------- < keys >
-    /** prefix key */
-    private String prefixKey = "prefix";
-
-    /** uri key */
-    private String uriKey = "uri";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String prefix = (String) ctx.get(this.prefixKey);
-        String uri = (String) ctx.get(this.uriKey);
-        if (log.isDebugEnabled()) {
-            log.debug("registering namespace uri=" + uri + " prefix=" + prefix);
-        }
-        CommandHelper.getSession(ctx).getWorkspace().getNamespaceRegistry()
-            .registerNamespace(prefix, uri);
-        return false;
-    }
-
-    /**
-     * @return the prefix key.
-     */
-    public String getPrefixKey() {
-        return prefixKey;
-    }
-
-    /**
-     * @param prefixKey
-     *        the prefix key to set
-     */
-    public void setPrefixKey(String prefixKey) {
-        this.prefixKey = prefixKey;
-    }
-
-    /**
-     * @return the uri key
-     */
-    public String getUriKey() {
-        return uriKey;
-    }
-
-    /**
-     * @param uriKey
-     *        the uri key to set
-     */
-    public void setUriKey(String uriKey) {
-        this.uriKey = uriKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/namespace/UnregisterNamespace.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/namespace/UnregisterNamespace.java
deleted file mode 100644
index 4e47eb7..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/namespace/UnregisterNamespace.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.namespace;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Unregister a namespace
- */
-public class UnregisterNamespace implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(UnregisterNamespace.class);
-
-    // ---------------------------- < keys >
-    /** prefix key */
-    private String prefixKey = "prefix";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String prefix = (String) ctx.get(this.prefixKey);
-        if (log.isDebugEnabled()) {
-            log.debug("unregistering namespace with prefix=" + prefix);
-        }
-        CommandHelper.getSession(ctx).getWorkspace().getNamespaceRegistry()
-            .unregisterNamespace(prefix);
-        return false;
-    }
-
-    /**
-     * @return the prefix key.
-     */
-    public String getPrefixKey() {
-        return prefixKey;
-    }
-
-    /**
-     * @param prefixKey
-     *        the prefix key to set
-     */
-    public void setPrefixKey(String prefixKey) {
-        this.prefixKey = prefixKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/query/AbstractQuery.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/query/AbstractQuery.java
deleted file mode 100644
index cc58534..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/query/AbstractQuery.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.query;
-
-import javax.jcr.Session;
-import javax.jcr.query.Query;
-import javax.jcr.query.QueryResult;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Query the <code>Repository</code> through either SQL or XPATH language.
- */
-public abstract class AbstractQuery implements Command {
-
-    // ---------------------------- < keys >
-
-    /** query statement key */
-    private String statementKey = "statement";
-
-    /** destination key */
-    private String destKey = "collected";
-
-    /**
-     * {@inheritDoc}
-     */
-    public final boolean execute(Context ctx) throws Exception {
-        String statement = (String) ctx.get(this.statementKey);
-        Session session = CommandHelper.getSession(ctx);
-        Query query = session.getWorkspace().getQueryManager().createQuery(
-            statement, this.getLanguage());
-        QueryResult result = query.execute();
-        ctx.put(destKey, result.getNodes());
-        return false;
-    }
-
-    /**
-     * @return the query language
-     */
-    protected abstract String getLanguage();
-
-    /**
-     * @return the statement key
-     */
-    public String getStatementKey() {
-        return statementKey;
-    }
-
-    /**
-     * @param statementKey
-     *        the statement key to set
-     */
-    public void setStatementKey(String statementKey) {
-        this.statementKey = statementKey;
-    }
-
-    /**
-     * @return the destination key
-     */
-    public String getDestKey() {
-        return destKey;
-    }
-
-    /**
-     * @param toKey
-     *        the destination key to set
-     */
-    public void setDestKey(String toKey) {
-        this.destKey = toKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/query/SQLQuery.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/query/SQLQuery.java
deleted file mode 100644
index 91143e5..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/query/SQLQuery.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.query;
-
-import javax.jcr.query.Query;
-
-/**
- * SQL <code>Query</code>
- */
-public class SQLQuery extends AbstractQuery {
-
-    /**
-     * {@inheritDoc}
-     */
-    protected String getLanguage() {
-        return Query.SQL;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/query/XPathQuery.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/query/XPathQuery.java
deleted file mode 100644
index 62a6bc8..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/query/XPathQuery.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.query;
-
-import javax.jcr.query.Query;
-
-/**
- * XPath <code>Query</code>
- */
-public class XPathQuery extends AbstractQuery {
-
-    /**
-     * @inheritDoc
-     */
-    protected String getLanguage() {
-        return Query.XPATH;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/resources.properties b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/resources.properties
deleted file mode 100644
index 32818e0..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/resources.properties
+++ /dev/null
@@ -1,258 +0,0 @@
-
-cmd.addlocktoken                   = Add the given Lock token to the current Session
-cmd.addlocktoken.token             = lock token
-cmd.addlocktoken.token.desc        = the lock token
-cmd.addmixin                       = Add a mixin to the given Node
-cmd.addmixin.mixin                 = mixin name
-cmd.addmixin.mixin.desc            = a mixin node type name
-cmd.addmixin.path                  = path
-cmd.addmixin.path.desc             = path to the given node
-cmd.addnode                        = Add a node to the current working Node
-cmd.addversionlabel                = Add a label to the given Version
-cmd.addversionlabel.label          = label
-cmd.addversionlabel.label.desc     = label to add
-cmd.addversionlabel.moveLabel      = 
-cmd.addversionlabel.moveLabel.desc = move label
-cmd.addversionlabel.version        = version
-cmd.addversionlabel.version.desc   = the version name on which the label will be applied
-cmd.cat                            = Display the content of a Property or a Node of type nt:file or nt:resource.
-cmd.checkin                        = Check in the given versionable node
-cmd.checkout                       = Checkout the given versionable Node
-cmd.clearworkspace                 = Remove all the content from the current working Workspace
-cmd.clone                          = Clone the given Node to another Workspace
-cmd.clone.destAbsPath              = absolute path
-cmd.clone.destAbsPath.desc         = absolute path to the destination node
-cmd.clone.removeExisting           = boolean
-cmd.clone.removeExisting.desc      = remove node if present at the destination path
-cmd.clone.srcAbsPath               = absolute path
-cmd.clone.srcAbsPath.desc          = source node
-cmd.connect                        = Connect to a remote repository through jcr-rmi
-cmd.connect.url                    = url
-cmd.connect.url.desc               = String with the url where a jcr-rmi server instance is running
-cmd.copy                           = Copy a Node.\r\nIf the source Workspace is unset it will create a copy of the given Node from the current working Workspace.
-cmd.copy.destAbsPath               = path
-cmd.copy.destAbsPath.desc          = absolute path to the destination
-cmd.copy.fromWorkspace             = name
-cmd.copy.fromWorkspace.desc        = workspace name
-cmd.copy.srcAbsPath                = path
-cmd.copy.srcAbsPath.desc           = absolute path to the source node
-cmd.createworkspace                = Create a Workspace
-cmd.createworkspace.name           = name
-cmd.createworkspace.name.desc      = workspace name
-cmd.currentnode                    = Set the current working Node
-cmd.dump                           = Dump stored data from the current working Node
-cmd.exportdocview                  = Serialize the Node to the given file using the Document View Format
-cmd.exportfilesystem               = Export a Node of type nt:file or nt:folder to the given file system path
-cmd.exportproperty                 = Export a Property Value of the current working Node to the file system.
-cmd.exportsysview                  = Serialize the Node to the given file using the System View Format
-cmd.help                           = Show available Commands. If a Command is specified it will show its description, usage and parameters.
-cmd.help.command                   = name
-cmd.help.command.desc              = name of the command to describe
-cmd.importfilesystem               = Import data from the file system. If the given path refers to a file it's imported to a Node of type nt:file under the current working Node. If the given path refers to a folder, the given folder and all the subtree is imported.
-cmd.importxml                      = Imports the xml view from the given file to the current working Node
-cmd.lock                           = Lock the given Node
-cmd.lock.deep.desc                 = A deep lock applies to its holding node and all its descendants.
-cmd.lock.session.desc              = session scoped locks expire with the session
-cmd.login                          = Login to the current working Repository
-cmd.login.password.desc            = password  [default = anonymous]
-cmd.login.user.desc                = registered user name [default=anonymous]
-cmd.login.workspace.desc           = workspace
-cmd.logout                         = Logout from the current working Repository
-cmd.lscollect                      = List collected items under the current node
-cmd.lscollectnodes                 = List collected nodes under the current working node
-cmd.lscollectproperties            = List collected properties under the current working node
-cmd.lsitems                        = Lists nodes and properties under the current working node
-cmd.lsnodes                        = List nodes under the current working node
-cmd.lsnodes.hasLock                = Show whether the current working node has a lock
-cmd.lsnodes.l                      = Show whether the current working node is lockable
-cmd.lsnodes.locked                 = Show whether the current working node is locked
-cmd.lsnodes.locktoken              = token
-cmd.lsnodes.locktoken.desc         = lock token
-cmd.lsnodes.m                      = Show the full list o mixin that apply to the current working node
-cmd.lsnodes.mod                    = Show whether the current working node is modified
-cmd.lsnodes.new                    = Show whether the current working node is new
-cmd.lsnodes.nsize                  = Show the number of nodes under the current working node
-cmd.lsnodes.path                   = Show the full path to the node
-cmd.lsnodes.psize                  = Show the number of properties under the current working node
-cmd.lsnodes.r                      = Show whether the current working node is referenceable
-cmd.lsnodes.rsize                  = Show the number of references that point to the current working node
-cmd.lsnodes.uuid                   = uuid
-cmd.lsnodes.v                      = Show whether the current working node is versionable
-cmd.lsproperties                   = List properties under the current working node
-cmd.lsreferences                   = List references to the given node
-cmd.lsversions                     = list versions of the given node
-cmd.merge                          = merge versions
-cmd.merge.bestEffort.desc          = merge best effort
-cmd.move                           = Move a Node
-cmd.move.from                      = source, absolute or relative path
-cmd.move.to                        = destination, only absolute path
-cmd.orderbefore                    = Set the order of the given Node
-cmd.refresh                        = Refresh the Item if specified or the Session to reflect the current saved state
-cmd.refresh.keepChanges            = keep or discard the changes flag
-cmd.refreshlock                    = Reset the Lock timer
-cmd.registernamespace              = Register a namespace
-cmd.removeitem                     = Remove the item at the given path
-cmd.removeitems                    = Remove any Item under the given Node that match the given name pattern
-cmd.removelocktoken                = Remove the given Lock token to the current Session
-cmd.removemixin                    = Remove a mixin from the given Node
-cmd.removeversion                  = Remove a Version from the VersionHistory
-cmd.removeversionbylabel           = Remove the Version from the VersionHistory that match the given label
-cmd.removeversionlabel             = Remove a label from the VersionHistory
-cmd.rename                         = Rename a Node
-cmd.rename.from                    = source node
-cmd.rename.to                      = destination node
-cmd.restore                        = Restore a Node to the state of the given Version
-cmd.restorebylabel                 = Restore a Node to the state of the Version with the specified label
-cmd.save                           = Save the current working Node if specified, or the current working Session
-cmd.setmultivalueproperty          = Set a multivalue Property to the current working Node. The default regular expression is ",".
-cmd.setmultivalueproperty.regExp   = Regular expression used to split the value into tokens.
-cmd.setproperty                    = Set a Property Value to the current working Node
-cmd.setproperty.name               = property name
-cmd.setproperty.type               = property type. Default is String.
-cmd.setproperty.value              = property value
-cmd.setpropertyfromfile            = Set a Property Value with the content of the given file.
-cmd.setpropertyfromfile.path       = path to the file
-cmd.source                         = Executes a script from the given file
-cmd.sqlquery                       = SQL query
-cmd.sqlquery.statement             = SQL statement
-cmd.sqlquery.target                = target variables to store the nodes included in te query result
-cmd.startjackrabbit                = Start a Jackrabbit instance and set it as the current working Repository
-cmd.startjackrabbit.config         = Repository config file, usually called repository.xml
-cmd.startjackrabbit.home           = Repository location
-cmd.stopjackrabbit                 = Stop Jackrabbit
-cmd.unlock                         = Unlock the current working Node
-cmd.xpathquery                     = XPath query
-cmd.xpathquery.statement           = statement
-
-common.exportview.from       = Source node
-common.exportview.noRecurse  = if it's true it doesn't include the child nodes
-common.exportview.skipBinary = if it's true the binary properties will be serialized as if they are empty
-common.exportview.to         = Target file where the xml view will be stored
-common.fspath                = path
-common.fspath.desc           = file system path
-common.index                 = index of the value to show
-common.index.desc            = The indexing
-common.jcrabspath            = jcr absolute path
-common.jcrabspath.desc       = a path string representing the absolute path in the current workspace.
-common.jcrname               = jcr name
-common.jcrname.desc          = a valid jcr item name
-common.jcrpath               = jcr path
-common.jcrpath.desc          = a path string representing either a relative or absolute path in the current workspace.
-common.jcrrelpath            = jcr relative path
-common.jcrrelpath.desc       = a path string representing the relative path in the current workspace.
-common.namepattern           = pattern
-common.namepattern.desc      = name pattern
-common.nodetype              = node type
-common.nodetype.desc         = valid node type name
-common.source                = source
-common.uuidBehaviour         = int
-common.uuidBehaviour.desc    = The flag uuidBehavior.
-
-exception = exception
-
-exception.alias.already.in.use              = Alias "{0}" already in use.
-exception.already.logged.in                 = You are already logged in. Please logout.
-exception.cat.unsupported.type              = Unsupported type to display contents "{0}".
-exception.file.exists                       = File already exists. {0}.
-exception.file.not.created                  = The file was not created. {0}.
-exception.file.not.found                    = File not found. {0}.
-exception.folder.not.created                = The folder was not created. {0}.
-exception.fspath.is.null                    = The file system path is unset.
-exception.illegalargument                   = illegal argument
-exception.illegalargument.no.iterator.under = Illegal argument. There is no iterator under {0}.
-exception.illegalargument.not.a.command     = Illegal argument. "{0}" is not a command.
-exception.illegalargument.null              = Null arguments are illegal.
-exception.jackrabbit.command                = jackrabbit specific command
-exception.missing.paramater                 = missing parameter "{0}"
-exception.more.arguments.than.expected      = more arguments than expected
-exception.no.command.for.name               = No Command for name "{0}".
-exception.no.current.node                   = The current working node isn't set. Please start a jcr implementation before trying to get the current working node.
-exception.no.current.repository             = the current working repository is unset
-exception.no.current.session                = the current working session is unset
-exception.no.flag.for.name                  = no flag for name "{0}"
-exception.no.node.at                        = there is not a Node at "{0}".
-exception.no.opt.for.name                   = no option for name "{0}"
-exception.not.file.or.folder                = The given node is not nt:file nor nt:folder. {0}.
-exception.occurred                          = an exception occurred
-exception.only.absolute.path                = only absolute paths are allowed
-exception.parse.input.empty                 = input is empty
-exception.repository.not.in.context         = The repository can't be found in the application context. You need to start a jcr implementation before trying to login.
-exception.unabletoinit                      = Unable to init
-
-importxml.uuidBehaviour = uuid creation behaviour
-
-phrase.commandlist        = command list
-phrase.commandreference   = command reference
-phrase.display.stacktrace = display stack trace
-phrase.elapsedtime        = elapsed time
-phrase.haslock            = has lock
-phrase.jackrabbit.command = jackrabbit specific command
-phrase.keepchanges        = keep changes
-phrase.locktoken          = lock token
-phrase.maxitems           = max number of items to show
-phrase.not.available      = not available
-phrase.not.connected      = not connected
-phrase.not.logged.in      = not logged in
-phrase.regexp             = regular expression
-phrase.removeExisting     = remove existing
-
-word.alias         = alias
-word.argument      = argument
-word.arguments     = arguments
-word.boolean       = boolean
-word.classname     = class name
-word.commandname   = command name
-word.commands      = commands
-word.default       = default
-word.depth         = depth
-word.description   = description
-word.destination   = destination
-word.elapsedtime   = elapsed time
-word.flag          = flag
-word.flags         = flags
-word.folder        = folder
-word.from          = from
-word.in            = in
-word.int           = int
-word.label         = label
-word.labels        = labels
-word.length        = length
-word.listed        = listed
-word.lockable      = lockable
-word.locked        = locked
-word.locktoken     = lock token
-word.message       = message
-word.mixin         = mixin
-word.modified      = modified
-word.multiple      = multiple
-word.name          = name
-word.new           = new
-word.node          = node
-word.nodes         = nodes
-word.nodetype      = node type
-word.options       = options
-word.overview      = overview
-word.overwrite     = overwrite
-word.password      = password
-word.pattern       = pattern
-word.prefix        = prefix
-word.preview       = preview
-word.properties    = properties
-word.property      = property
-word.referenceable = referenceable
-word.references    = references
-word.required      = required
-word.running       = running
-word.savenode      = Save the current working node
-word.source        = source
-word.stmt          = statement
-word.total         = total
-word.type          = type
-word.uri           = uri
-word.usage         = usage
-word.user          = user
-word.value         = value
-word.version       = version
-word.versionable   = versionable
-word.versions      = versions
-word.welcome       = welcome
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/version/AddVersionLabel.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/version/AddVersionLabel.java
deleted file mode 100644
index d97f9be..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/version/AddVersionLabel.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.version;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Add a label to the given <code>Version</code>
- */
-public class AddVersionLabel implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(AddVersionLabel.class);
-
-    // ---------------------------- < keys >
-    /** node path */
-    private String pathKey = "path";
-
-    /** version name key */
-    private String versionKey = "version";
-
-    /** version label key */
-    private String labelKey = "label";
-
-    /** move label key */
-    private String moveLabelKey = "moveLabel";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String path = (String) ctx.get(this.pathKey);
-        String versionName = (String) ctx.get(this.versionKey);
-        boolean moveLabel = Boolean
-            .valueOf((String) ctx.get(this.moveLabelKey)).booleanValue();
-        String versionLabel = (String) ctx.get(this.labelKey);
-        if (log.isDebugEnabled()) {
-            log.debug("Add label " + versionLabel + " to version  "
-                    + versionName + " of node at " + path);
-        }
-        CommandHelper.getNode(ctx, path).getVersionHistory().addVersionLabel(
-            versionName, versionLabel, moveLabel);
-        return false;
-    }
-
-    /**
-     * @return the move label key
-     */
-    public String getMoveLabelKey() {
-        return moveLabelKey;
-    }
-
-    /**
-     * @param moveLabelKey
-     *        the move label key to set
-     */
-    public void setMoveLabelKey(String moveLabelKey) {
-        this.moveLabelKey = moveLabelKey;
-    }
-
-    /**
-     * @return the path key
-     */
-    public String getPathKey() {
-        return pathKey;
-    }
-
-    /**
-     * @param pathKey
-     *        the path key to set
-     */
-    public void setPathKey(String pathKey) {
-        this.pathKey = pathKey;
-    }
-
-    /**
-     * @return the version label key
-     */
-    public String getLabelKey() {
-        return labelKey;
-    }
-
-    /**
-     * @param versionLabelKey
-     *        the version label key to set
-     */
-    public void setLabelKey(String versionLabelKey) {
-        this.labelKey = versionLabelKey;
-    }
-
-    /**
-     * @return the version name key
-     */
-    public String getVersionKey() {
-        return versionKey;
-    }
-
-    /**
-     * @param versionNameKey
-     *        the version name key to set
-     */
-    public void setVersionKey(String versionNameKey) {
-        this.versionKey = versionNameKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/version/Checkin.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/version/Checkin.java
deleted file mode 100644
index 964ab63..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/version/Checkin.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.version;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Check in the given versionable <code>Node</code>
- */
-public class Checkin implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(Checkin.class);
-
-    // ---------------------------- < keys >
-    /** node path */
-    private String pathKey = "path";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String path = (String) ctx.get(this.pathKey);
-        if (log.isDebugEnabled()) {
-            log.debug("cheking in node at " + path);
-        }
-        CommandHelper.getNode(ctx, path).checkin();
-        return false;
-    }
-
-    /**
-     * @return the path key
-     */
-    public String getPathKey() {
-        return pathKey;
-    }
-
-    /**
-     * @param pathKey
-     *        the path key to set
-     */
-    public void setPathKey(String pathKey) {
-        this.pathKey = pathKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/version/Checkout.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/version/Checkout.java
deleted file mode 100644
index f0edecd..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/version/Checkout.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.version;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Checkout the given versionable <code>Node</code>
- */
-public class Checkout implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(Checkout.class);
-
-    // ---------------------------- < keys >
-    /** node path */
-    private String pathKey = "path";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String path = (String) ctx.get(this.pathKey);
-        if (log.isDebugEnabled()) {
-            log.debug("cheking out node at " + path);
-        }
-        CommandHelper.getNode(ctx, path).checkout();
-        return false;
-    }
-
-    /**
-     * @return the path key
-     */
-    public String getPathKey() {
-        return pathKey;
-    }
-
-    /**
-     * @param pathKey
-     *        the path key to set
-     */
-    public void setPathKey(String pathKey) {
-        this.pathKey = pathKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/version/Merge.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/version/Merge.java
deleted file mode 100644
index 6a6550d..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/version/Merge.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.version;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Merge
- */
-public class Merge implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(Merge.class);
-
-    // ---------------------------- < keys >
-    /** node path */
-    private String pathKey = "path";
-
-    /** source workspace key */
-    private String srcWorkspaceKey = "srcWorkspace";
-
-    /** best effort key */
-    private String bestEffortKey = "bestEffort";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String path = (String) ctx.get(this.pathKey);
-        String srcWorkspace = (String) ctx.get(this.srcWorkspaceKey);
-        boolean bestEffort = Boolean.valueOf(
-            (String) ctx.get(this.bestEffortKey)).booleanValue();
-        if (log.isDebugEnabled()) {
-            log.debug("merging node at " + path + " from workspace "
-                    + srcWorkspace + " besteffort=" + bestEffort);
-        }
-        CommandHelper.getNode(ctx, path).merge(srcWorkspace, bestEffort);
-        return false;
-    }
-
-    /**
-     * @return the best effort key
-     */
-    public String getBestEffortKey() {
-        return bestEffortKey;
-    }
-
-    /**
-     * @param bestEffortKey
-     *        the best effort key to set
-     */
-    public void setBestEffortKey(String bestEffortKey) {
-        this.bestEffortKey = bestEffortKey;
-    }
-
-    /**
-     * @return the path key
-     */
-    public String getPathKey() {
-        return pathKey;
-    }
-
-    /**
-     * @param pathKey
-     *        the path key to set
-     */
-    public void setPathKey(String pathKey) {
-        this.pathKey = pathKey;
-    }
-
-    /**
-     * @return the source <code>Workspace</code> key
-     */
-    public String getSrcWorkspaceKey() {
-        return srcWorkspaceKey;
-    }
-
-    /**
-     * @param srcWorkspaceKey
-     *        the source <code>Workspace</code> key to set
-     */
-    public void setSrcWorkspaceKey(String srcWorkspaceKey) {
-        this.srcWorkspaceKey = srcWorkspaceKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/version/RemoveVersion.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/version/RemoveVersion.java
deleted file mode 100644
index d710ed7..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/version/RemoveVersion.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.version;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Remove a <code>Version</code> from the <code>VersionHistory</code>
- */
-public class RemoveVersion implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(RemoveVersion.class);
-
-    // ---------------------------- < keys >
-    /** node path */
-    private String pathKey = "path";
-
-    /** version label key */
-    private String nameKey = "name";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String path = (String) ctx.get(this.pathKey);
-        String versionName = (String) ctx.get(this.nameKey);
-        if (log.isDebugEnabled()) {
-            log.debug("Remove version " + versionName + " from node " + path);
-        }
-        CommandHelper.getNode(ctx, path).getVersionHistory().removeVersion(
-            versionName);
-        return false;
-    }
-
-    /**
-     * @return the path key
-     */
-    public String getPathKey() {
-        return pathKey;
-    }
-
-    /**
-     * @param pathKey
-     *        the path key to set
-     */
-    public void setPathKey(String pathKey) {
-        this.pathKey = pathKey;
-    }
-
-    /**
-     * @return the version name key
-     */
-    public String getNameKey() {
-        return nameKey;
-    }
-
-    /**
-     * @param versionNameKey
-     *        the version name key to set
-     */
-    public void setNameKey(String versionNameKey) {
-        this.nameKey = versionNameKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/version/RemoveVersionByLabel.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/version/RemoveVersionByLabel.java
deleted file mode 100644
index 4246404..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/version/RemoveVersionByLabel.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.version;
-
-import javax.jcr.version.Version;
-import javax.jcr.version.VersionHistory;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Remove the <code>Version</code> from the <code>VersionHistory</code> that
- * match the given label
- */
-public class RemoveVersionByLabel implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(RemoveVersionByLabel.class);
-
-    // ---------------------------- < keys >
-    /** node path */
-    private String pathKey = "path";
-
-    /** version label key */
-    private String labelKey = "label";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String path = (String) ctx.get(this.pathKey);
-        String label = (String) ctx.get(this.labelKey);
-        if (log.isDebugEnabled()) {
-            log.debug("Remove version with label " + label + " from node "
-                    + path);
-        }
-        VersionHistory vh = CommandHelper.getNode(ctx, path)
-            .getVersionHistory();
-        Version v = vh.getVersionByLabel(label);
-        vh.removeVersion(v.getName());
-        return false;
-    }
-
-    /**
-     * @return the path key
-     */
-    public String getPathKey() {
-        return pathKey;
-    }
-
-    /**
-     * @param pathKey
-     *        the path key to set
-     */
-    public void setPathKey(String pathKey) {
-        this.pathKey = pathKey;
-    }
-
-    /**
-     * @return the version name key
-     */
-    public String getLabelKey() {
-        return labelKey;
-    }
-
-    /**
-     * @param versionNameKey
-     *        the version name key to set
-     */
-    public void setLabelKey(String versionNameKey) {
-        this.labelKey = versionNameKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/version/RemoveVersionLabel.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/version/RemoveVersionLabel.java
deleted file mode 100644
index a62698d..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/version/RemoveVersionLabel.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.version;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Remove a label from the <code>VersionHistory</code>
- */
-public class RemoveVersionLabel implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(RemoveVersionLabel.class);
-
-    // ---------------------------- < keys >
-    /** node path */
-    private String pathKey = "path";
-
-    /** version label key */
-    private String labelKey = "label";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String path = (String) ctx.get(this.pathKey);
-        String versionLabel = (String) ctx.get(this.labelKey);
-        if (log.isDebugEnabled()) {
-            log.debug("Remove label " + versionLabel + " from node " + path);
-        }
-        CommandHelper.getNode(ctx, path).getVersionHistory()
-            .removeVersionLabel(versionLabel);
-        return false;
-    }
-
-    /**
-     * @return returns the path key
-     */
-    public String getPathKey() {
-        return pathKey;
-    }
-
-    /**
-     * @param pathKey
-     *        the path key to set
-     */
-    public void setPathKey(String pathKey) {
-        this.pathKey = pathKey;
-    }
-
-    /**
-     * @return the version label key.
-     */
-    public String getLabelKey() {
-        return labelKey;
-    }
-
-    /**
-     * @param versionLabelKey
-     *        the version label key to set
-     */
-    public void setLabelKey(String versionLabelKey) {
-        this.labelKey = versionLabelKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/version/Restore.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/version/Restore.java
deleted file mode 100644
index 3df4260..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/version/Restore.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.version;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Restore a <code>Node</code> to the state of the given <code>Version</code>
- */
-public class Restore implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(Restore.class);
-
-    // ---------------------------- < keys >
-    /** node path */
-    private String pathKey = "path";
-
-    /** version name key */
-    private String versionKey = "version";
-
-    /** remove existing node key */
-    private String removeExistingKey = "removeExisting";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String path = (String) ctx.get(this.pathKey);
-        String versionName = (String) ctx.get(this.versionKey);
-        boolean removeExisting = Boolean.valueOf(
-            (String) ctx.get(this.removeExistingKey)).booleanValue();
-        if (log.isDebugEnabled()) {
-            log.debug("restoring node at " + path + " to version "
-                    + versionName + " removeexisting=" + removeExisting);
-        }
-        CommandHelper.getNode(ctx, path).restore(versionName, removeExisting);
-        return false;
-    }
-
-    /**
-     * @return the path key
-     */
-    public String getPathKey() {
-        return pathKey;
-    }
-
-    /**
-     * @param pathKey
-     *        the path key to set
-     */
-    public void setPathKey(String pathKey) {
-        this.pathKey = pathKey;
-    }
-
-    /**
-     * @return the remove existing key
-     */
-    public String getRemoveExistingKey() {
-        return removeExistingKey;
-    }
-
-    /**
-     * @param removeExistingKey
-     *        the remove existing key to set
-     */
-    public void setRemoveExistingKey(String removeExistingKey) {
-        this.removeExistingKey = removeExistingKey;
-    }
-
-    /**
-     * @return the version name key
-     */
-    public String getVersionKey() {
-        return versionKey;
-    }
-
-    /**
-     * @param versionNameKey
-     *        the version name key to set
-     */
-    public void setVersionKey(String versionNameKey) {
-        this.versionKey = versionNameKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/version/RestoreByLabel.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/version/RestoreByLabel.java
deleted file mode 100644
index b0c13d4..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/version/RestoreByLabel.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.version;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Restore a <code>Node</code> to the state of the <code>Version</code> with
- * the specified label
- */
-public class RestoreByLabel implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(RestoreByLabel.class);
-
-    // ---------------------------- < keys >
-    /** node path */
-    private String pathKey = "path";
-
-    /** version name key */
-    private String labelKey = "label";
-
-    /** remove existing node key */
-    private String removeExistingKey = "removeExisting";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String path = (String) ctx.get(this.pathKey);
-        String versionLabel = (String) ctx.get(this.labelKey);
-        boolean removeExisting = Boolean.valueOf(
-            (String) ctx.get(this.removeExistingKey)).booleanValue();
-        if (log.isDebugEnabled()) {
-            log.debug("restoring node at " + path + " to version label "
-                    + versionLabel + " removeexisting=" + removeExisting);
-        }
-        CommandHelper.getNode(ctx, path).restoreByLabel(versionLabel,
-            removeExisting);
-        return false;
-    }
-
-    /**
-     * @return the path key
-     */
-    public String getPathKey() {
-        return pathKey;
-    }
-
-    /**
-     * @param pathKey
-     *        the path key to set
-     */
-    public void setPathKey(String pathKey) {
-        this.pathKey = pathKey;
-    }
-
-    /**
-     * @return the remove existing key
-     */
-    public String getRemoveExistingKey() {
-        return removeExistingKey;
-    }
-
-    /**
-     * @param removeExistingKey
-     *        the remove existing key to set
-     */
-    public void setRemoveExistingKey(String removeExistingKey) {
-        this.removeExistingKey = removeExistingKey;
-    }
-
-    /**
-     * @return the version name key
-     */
-    public String getLabelKey() {
-        return labelKey;
-    }
-
-    /**
-     * @param versionNameKey
-     *        the version name key to set
-     */
-    public void setLabelKey(String versionNameKey) {
-        this.labelKey = versionNameKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/xml/AbstractExportViewToFile.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/xml/AbstractExportViewToFile.java
deleted file mode 100644
index b2819a4..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/xml/AbstractExportViewToFile.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.xml;
-
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-
-import javax.jcr.Node;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.RepositoryException;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandException;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Export the xml view to a file
- */
-public abstract class AbstractExportViewToFile implements Command {
-    /** logger */
-    private static Log log = LogFactory.getLog(AbstractExportViewToFile.class);
-
-    // ---------------------------- < keys >
-    /** from literal */
-    protected String srcAbsPathKey = "srcAbsPath";
-
-    /** target file key */
-    protected String desFsPathKey = "desFsPath";
-
-    /** overwrite flag key */
-    protected String overwriteKey = "overwrite";
-
-    /** skip binary flag key */
-    protected String skipBinaryKey = "skipBinary";
-
-    /** no recurse flag key */
-    protected String noRecurseKey = "noRecurse";
-
-    /**
-     * @return the OutputStream for the given file
-     * @throws CommandException
-     * @throws IOException
-     */
-    protected OutputStream getOutputStream(Context ctx)
-            throws CommandException, IOException {
-        String to = (String) ctx.get(this.desFsPathKey);
-        boolean overwrite = Boolean
-            .valueOf((String) ctx.get(this.overwriteKey)).booleanValue();
-        File f = new File(to);
-
-        if (f.exists() && !overwrite) {
-            throw new CommandException("exception.file.exists", new String[] {
-                to
-            });
-        }
-
-        if (!f.exists()) {
-            f.createNewFile();
-        }
-
-        BufferedOutputStream out = new BufferedOutputStream(
-            new FileOutputStream(f));
-
-        return out;
-    }
-
-    /**
-     * @return the no recurse key
-     */
-    public String getNoRecurseKey() {
-        return noRecurseKey;
-    }
-
-    /**
-     * @param noRecurseKey
-     *        the no recurse key to set
-     */
-    public void setNoRecurseKey(String noRecurseKey) {
-        this.noRecurseKey = noRecurseKey;
-    }
-
-    /**
-     * @return the overwrite key
-     */
-    public String getOverwriteKey() {
-        return overwriteKey;
-    }
-
-    /**
-     * @param overwriteKey
-     *        the overwrite key to set
-     */
-    public void setOverwriteKey(String overwriteKey) {
-        this.overwriteKey = overwriteKey;
-    }
-
-    /**
-     * @return the skip binary key
-     */
-    public String getSkipBinaryKey() {
-        return skipBinaryKey;
-    }
-
-    /**
-     * @param skipBinaryKey
-     *        the skip binary key to set
-     */
-    public void setSkipBinaryKey(String skipBinaryKey) {
-        this.skipBinaryKey = skipBinaryKey;
-    }
-
-    /**
-     * @return the from key
-     */
-    public String getSrcAbsPathKey() {
-        return srcAbsPathKey;
-    }
-
-    /**
-     * @param fromKey
-     *        the from key to set
-     */
-    public void setSrcAbsPathKey(String fromKey) {
-        this.srcAbsPathKey = fromKey;
-    }
-
-    /**
-     * @return the to key
-     */
-    public String getDesFsPathKey() {
-        return desFsPathKey;
-    }
-
-    /**
-     * @param toKey
-     *        the to key to set
-     */
-    public void setDesFsPathKey(String toKey) {
-        this.desFsPathKey = toKey;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public final boolean execute(Context ctx) throws Exception {
-        boolean skipBinary = Boolean.valueOf(
-            (String) ctx.get(this.skipBinaryKey)).booleanValue();
-        boolean noRecurse = Boolean
-            .valueOf((String) ctx.get(this.noRecurseKey)).booleanValue();
-        String fromStr = (String) ctx.get(this.srcAbsPathKey);
-        if (log.isDebugEnabled()) {
-            log.debug("exporting view from " + fromStr);
-        }
-        Node from = CommandHelper.getNode(ctx, fromStr);
-        OutputStream out = getOutputStream(ctx);
-        exportView(from, out, skipBinary, noRecurse);
-        out.close();
-        return false;
-    }
-
-    /**
-     * Export the view to the given OutputStream
-     * @param node
-     *        the <code>Node</code>
-     * @param out
-     *        the <code>OutputStream</code>
-     * @param skipBinary
-     * @param noRecurse
-     * @throws RepositoryException
-     * @throws IOException
-     * @throws PathNotFoundException
-     */
-    protected abstract void exportView(
-        Node node,
-        OutputStream out,
-        boolean skipBinary,
-        boolean noRecurse) throws PathNotFoundException, IOException,
-            RepositoryException;
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/xml/ExportDocViewToFile.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/xml/ExportDocViewToFile.java
deleted file mode 100644
index 0aa8418..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/xml/ExportDocViewToFile.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.xml;
-
-import java.io.IOException;
-import java.io.OutputStream;
-
-import javax.jcr.Node;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.RepositoryException;
-
-/**
- * Serialize the <code>Node</code> to the given file using the Document View
- * Format
- */
-public class ExportDocViewToFile extends AbstractExportViewToFile {
-
-    /**
-     * {@inheritDoc}
-     */
-    protected void exportView(
-        Node node,
-        OutputStream out,
-        boolean skipBinary,
-        boolean noRecurse) throws PathNotFoundException, IOException,
-            RepositoryException {
-        node.getSession().exportDocumentView(node.getPath(), out, skipBinary,
-            noRecurse);
-    }
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/xml/ExportSysViewToFile.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/xml/ExportSysViewToFile.java
deleted file mode 100644
index 3db9d3a..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/xml/ExportSysViewToFile.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.xml;
-
-import java.io.IOException;
-import java.io.OutputStream;
-
-import javax.jcr.Node;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.RepositoryException;
-
-/**
- * Serialize the <code>Node</code> to the given file using the System View
- * Format
- */
-public class ExportSysViewToFile extends AbstractExportViewToFile {
-
-    /**
-     * {@inheritDoc}
-     */
-    protected void exportView(
-        Node node,
-        OutputStream out,
-        boolean skipBinary,
-        boolean noRecurse) throws PathNotFoundException, IOException,
-            RepositoryException {
-        node.getSession().exportSystemView(node.getPath(), out, skipBinary,
-            noRecurse);
-    }
-
-}
diff --git a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/xml/ImportXmlFromFile.java b/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/xml/ImportXmlFromFile.java
deleted file mode 100644
index 9c3822e..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/xml/ImportXmlFromFile.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.xml;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-
-import javax.jcr.Node;
-import javax.jcr.Session;
-
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.jackrabbit.command.CommandException;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Import the xml view from the given file to the current working <code>Node</code>
- */
-public class ImportXmlFromFile implements Command {
-
-    // ---------------------------- < keys >
-
-    /** doc view file key */
-    private String srcFsPathKey = "srcFsPath";
-
-    /** target node */
-    private String destJcrPathKey = "destJcrPath";
-
-    /** uuid behaviour key */
-    private String uuidBehaviourKey = "uuidBehaviour";
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean execute(Context ctx) throws Exception {
-        String file = (String) ctx.get(this.srcFsPathKey);
-        String dest = (String) ctx.get(this.destJcrPathKey);
-        int uuidBehaviour = Integer.valueOf(
-            (String) ctx.get(this.uuidBehaviourKey)).intValue();
-        File f = new File(file);
-        if (!f.exists()) {
-            throw new CommandException("exception.file.not.found",
-                new String[] {
-                    file
-                });
-        }
-        BufferedInputStream in = new BufferedInputStream(new FileInputStream(f));
-        Session s = CommandHelper.getSession(ctx);
-        Node n = CommandHelper.getNode(ctx, dest);
-        s.importXML(n.getPath(), in, uuidBehaviour);
-        return false;
-    }
-
-    /**
-     * @return the from key
-     */
-    public String getSrcFsPathKey() {
-        return srcFsPathKey;
-    }
-
-    /**
-     * @param fromKey
-     *        the from key to set
-     */
-    public void setSrcFsPathKey(String fromKey) {
-        this.srcFsPathKey = fromKey;
-    }
-
-    /**
-     * @return the uuidBehaviourKey
-     */
-    public String getUuidBehaviourKey() {
-        return uuidBehaviourKey;
-    }
-
-    /**
-     * @param uuidBehaviourKey
-     *        the uuidBehaviourKey to set
-     */
-    public void setUuidBehaviourKey(String uuidBehaviourKey) {
-        this.uuidBehaviourKey = uuidBehaviourKey;
-    }
-
-    /**
-     * @return the destination jcr path key
-     */
-    public String getDestJcrPathKey() {
-        return destJcrPathKey;
-    }
-
-    /**
-     * @param destJcrPathKey
-     *        the destination jcr path key to set
-     */
-    public void setDestJcrPathKey(String destJcrPathKey) {
-        this.destJcrPathKey = destJcrPathKey;
-    }
-}
diff --git a/contrib/jcr-commands/src/test/log4j.properties b/contrib/jcr-commands/src/test/log4j.properties
deleted file mode 100644
index d6c87e9..0000000
--- a/contrib/jcr-commands/src/test/log4j.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-# Set root logger level to DEBUG and its only appender to A1.
-log4j.rootLogger=ERROR, stdout
-#log4j.rootLogger=DEBUG, stdout, file
-#log4j.rootLogger=ERROR, stdout, file
-
-log4j.logger.org.apache.jackrabbit.command=INFO
-
-# 'stdout' is set to be a ConsoleAppender.
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-
-# 'stdout' uses PatternLayout
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%d{dd.MM.yyyy HH:mm:ss} *%-5p* [%t] %c{1}: %m (%F, line %L)\n
diff --git a/contrib/jcr-commands/src/test/org/apache/jackrabbit/command/cli/CliTest.java b/contrib/jcr-commands/src/test/org/apache/jackrabbit/command/cli/CliTest.java
deleted file mode 100644
index 193e0f6..0000000
--- a/contrib/jcr-commands/src/test/org/apache/jackrabbit/command/cli/CliTest.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.cli;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.apache.commons.beanutils.BeanUtils;
-import org.apache.commons.chain.Catalog;
-import org.apache.commons.chain.Chain;
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.config.ConfigParser;
-import org.apache.commons.chain.impl.CatalogFactoryBase;
-import org.apache.jackrabbit.command.CommandException;
-
-import junit.framework.TestCase;
-
-public class CliTest extends TestCase
-{
-	static
-	{
-		try
-		{
-			ConfigParser parser = new ConfigParser();
-			parser.parse(CommandLine.class.getResource("command.xml"));
-		} catch (Exception e)
-		{
-			e.printStackTrace();
-		}
-	}
-
-	/** catalog */
-	protected Catalog catalog = CatalogFactoryBase.getInstance().getCatalog();
-
-	public void testCommandExist() throws CommandException
-	{
-		Iterator iter = CommandLineFactory.getInstance().getCommandLines()
-				.iterator();
-		while (iter.hasNext())
-		{
-			CommandLine cl = (CommandLine) iter.next();
-			String impl = cl.getImpl();
-			if (impl == null)
-			{
-				impl = cl.getName();
-			}
-			assertTrue(impl + " not found", catalog.getCommand(impl) != null);
-		}
-	}
-
-	public void testArgumentsExist() throws CommandException,
-			IllegalAccessException, InvocationTargetException,
-			NoSuchMethodException
-	{
-		Iterator iter = CommandLineFactory.getInstance().getCommandLines()
-				.iterator();
-		while (iter.hasNext())
-		{
-			CommandLine cl = (CommandLine) iter.next();
-			String impl = cl.getImpl();
-			if (impl == null)
-			{
-				impl = cl.getName();
-			}
-			Command cmd = catalog.getCommand(impl);
-			// don't test chain
-			if (!(cmd instanceof Chain))
-			{
-				Map props = BeanUtils.describe(cmd);
-				Iterator params = cl.getAllParameters();
-				while (params.hasNext())
-				{
-					AbstractParameter param = (AbstractParameter) params.next();
-					if (!props.containsValue(param.getContextKey()))
-					{
-						fail("Command: " + cl.getName() + ". Param "
-								+ param.getContextKey() + " not found");
-					}
-				}
-			}
-		}
-	}
-
-}
diff --git a/contrib/jcr-commands/src/test/org/apache/jackrabbit/command/cli/CommandsTest.java b/contrib/jcr-commands/src/test/org/apache/jackrabbit/command/cli/CommandsTest.java
deleted file mode 100644
index 8d5e75e..0000000
--- a/contrib/jcr-commands/src/test/org/apache/jackrabbit/command/cli/CommandsTest.java
+++ /dev/null
@@ -1,423 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.cli;
-
-import java.util.Arrays;
-import java.util.Iterator;
-
-import javax.jcr.Credentials;
-import javax.jcr.Node;
-import javax.jcr.NodeIterator;
-import javax.jcr.Session;
-import javax.jcr.SimpleCredentials;
-import javax.jcr.version.Version;
-
-import junit.framework.TestCase;
-
-import org.apache.commons.chain.Catalog;
-import org.apache.commons.chain.Command;
-import org.apache.commons.chain.Context;
-import org.apache.commons.chain.config.ConfigParser;
-import org.apache.commons.chain.impl.CatalogFactoryBase;
-import org.apache.commons.chain.impl.ContextBase;
-import org.apache.commons.collections.IteratorUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.command.CommandHelper;
-
-/**
- * Commands Test superclass
- */
-public class CommandsTest extends TestCase
-{
-	/** config */
-	protected static String CONFIG = "applications/test/repository.xml";
-
-	/** home */
-	protected static String HOME = "applications/test/repository";
-
-	Log log = LogFactory.getLog(CommandsTest.class);
-
-	static
-	{
-		try
-		{
-			ConfigParser parser = new ConfigParser();
-			parser.parse(JcrClient.class.getResource("command.xml"));
-		} catch (Exception e)
-		{
-			e.printStackTrace();
-		}
-	}
-
-	/** Context */
-	protected Context ctx = new ContextBase();
-
-	/** catalog */
-	protected Catalog catalog = CatalogFactoryBase.getInstance().getCatalog();
-
-	protected void setUp() throws Exception
-	{
-		super.setUp();
-
-		// Start
-		ctx.put("config", CONFIG);
-		ctx.put("home", HOME);
-		catalog.getCommand("startJackrabbitSingleton").execute(ctx);
-		assertTrue(CommandHelper.getRepository(ctx) != null);
-
-		// Login
-		ctx.put("user", "u");
-		ctx.put("password", "p");
-		catalog.getCommand("login").execute(ctx);
-		assertTrue(CommandHelper.getSession(ctx) != null);
-
-		// clear workspace
-		catalog.getCommand("clearWorkspace").execute(ctx);
-
-		// add test node
-		ctx.put("relPath", "test");
-		catalog.getCommand("addNode").execute(ctx);
-		ctx.remove("relPaht");
-
-		CommandHelper.getSession(ctx).save();
-	}
-
-	protected Session createNewSession() throws Exception
-	{
-		Credentials c = new SimpleCredentials("ed", "ed".toCharArray());
-		return CommandHelper.getRepository(ctx).login(c);
-	}
-
-	protected void tearDown() throws Exception
-	{
-		super.tearDown();
-		// clear workspace
-		catalog.getCommand("clearWorkspace").execute(ctx);
-		// save
-		CommandHelper.getSession(ctx).save();
-
-		// Logout
-		catalog.getCommand("logout").execute(ctx);
-
-		ctx.clear();
-
-	}
-
-	protected Node getRoot() throws Exception
-	{
-		return CommandHelper.getNode(ctx, "/");
-	}
-
-	protected Node getTestNode() throws Exception
-	{
-		return CommandHelper.getNode(ctx, "/test");
-	}
-
-	public void testOrderBefore() throws Exception
-	{
-		CommandHelper.setCurrentNode(ctx, getTestNode());
-		Node node1 = getTestNode().addNode("child");
-		Node node2 = getTestNode().addNode("child");
-		node1.setProperty("pos", 1);
-		node2.setProperty("pos", 2);
-		NodeIterator iter = getTestNode().getNodes("child");
-		assertTrue(iter.nextNode().isSame(node1));
-		assertTrue(iter.nextNode().isSame(node2));
-		ctx.put("srcChild", "child[2]");
-		ctx.put("destChild", "child[1]");
-		catalog.getCommand("orderBefore").execute(ctx);
-		iter = getTestNode().getNodes("child");
-		assertTrue(iter.nextNode().isSame(node2));
-		assertTrue(iter.nextNode().isSame(node1));
-	}
-
-	public void testMove() throws Exception
-	{
-		ctx.put("srcAbsPath", getTestNode().getPath());
-		ctx.put("destAbsPath", "/test2");
-		catalog.getCommand("move").execute(ctx);
-		assertTrue(CommandHelper.hasNode(ctx, "/test2"));
-	}
-
-	public void testReadValue() throws Exception
-	{
-		getTestNode().setProperty("prop", "val");
-		ctx.put("srcPath", getTestNode().getProperty("prop").getPath());
-		ctx.put("dest", "myKey");
-		catalog.getCommand("readValue").execute(ctx);
-		assertTrue(ctx.get("myKey").equals("val"));
-	}
-
-	public void testCurrentNode() throws Exception
-	{
-		ctx.put("path", getTestNode().getPath());
-		assertTrue(CommandHelper.getCurrentNode(ctx).getPath().equals("/"));
-		catalog.getCommand("currentNode").execute(ctx);
-		assertTrue(CommandHelper.getCurrentNode(ctx).getPath().equals(
-				getTestNode().getPath()));
-	}
-
-	public void testCopy() throws Exception
-	{
-		ctx.put("srcAbsPath", getTestNode().getPath());
-		ctx.put("destAbsPath", "/copy");
-		assertFalse(CommandHelper.hasNode(ctx, "/copy"));
-		catalog.getCommand("copy").execute(ctx);
-		assertTrue(CommandHelper.hasNode(ctx, "/copy"));
-	}
-
-	public void testCollect() throws Exception
-	{
-		Command items = catalog.getCommand("collectItems");
-
-		ctx.put("srcPath", "/");
-		ctx.put("depth", "1");
-		ctx.put("namePattern", "*");
-
-		assertTrue(ctx.get("collected") == null);
-		items.execute(ctx);
-		assertTrue(IteratorUtils.toList((Iterator) ctx.get("collected")).size() == 3);
-
-		ctx.put("scrPath", null);
-		items.execute(ctx);
-		assertTrue(IteratorUtils.toList((Iterator) ctx.get("collected")).size() == 3);
-
-		ctx.put("depth", "2");
-		items.execute(ctx);
-		assertTrue(IteratorUtils.toList((Iterator) ctx.get("collected")).size() == 7);
-
-		ctx.put("namePattern", null);
-		items.execute(ctx);
-		assertTrue(IteratorUtils.toList((Iterator) ctx.get("collected")).size() == 7);
-
-		ctx.put("namePattern", "jcr:primaryType");
-		items.execute(ctx);
-		assertTrue(IteratorUtils.toList((Iterator) ctx.get("collected")).size() == 3);
-
-	}
-
-	public void testRefresh() throws Exception
-	{
-		Node n = getTestNode();
-		assertFalse(n.hasNode("newNode"));
-		Session s = createNewSession();
-		s.getRootNode().getNode(getTestNode().getName()).addNode("newNode");
-		s.save();
-		s.logout();
-		ctx.put("keepChanges", Boolean.TRUE.toString());
-		catalog.getCommand("refresh").execute(ctx);
-		assertTrue(n.hasNode("newNode"));
-	}
-
-	public void testRemoveItem() throws Exception
-	{
-		Node n = getTestNode();
-		n.addNode("newNode");
-		assertTrue(n.hasNode("newNode"));
-		ctx.put("path", getTestNode().getPath() + "/newNode");
-		catalog.getCommand("removeItem").execute(ctx);
-		assertFalse(n.hasNode("newNode"));
-	}
-
-	public void testRemoveItems() throws Exception
-	{
-		Node n = getTestNode();
-		n.addNode("newNode1");
-		n.addNode("newNode2");
-		assertTrue(n.getNodes().getSize() == 2);
-		ctx.put("path", getTestNode().getPath());
-		ctx.put("pattern", "new*");
-		catalog.getCommand("removeItems").execute(ctx);
-		assertTrue(n.getNodes().getSize() == 0);
-	}
-
-	public void testRename() throws Exception
-	{
-		Node n = getTestNode();
-		CommandHelper.setCurrentNode(ctx, n);
-		n.addNode("name1");
-		ctx.put("srcPath", "name1");
-		ctx.put("destPath", "name2");
-		catalog.getCommand("rename").execute(ctx);
-		assertTrue(n.hasNode("name2"));
-	}
-
-	public void testSaveNode() throws Exception
-	{
-		Node n = getTestNode();
-		CommandHelper.setCurrentNode(ctx, n);
-		n.addNode("newNode");
-		ctx.put("path", n.getPath());
-		catalog.getCommand("save").execute(ctx);
-		CommandHelper.getSession(ctx).refresh(false);
-		assertTrue(n.hasNode("newNode"));
-	}
-
-	public void testSetMultiValueProperty() throws Exception
-	{
-		Node n = getTestNode();
-		CommandHelper.setCurrentNode(ctx, n);
-		ctx.put("name", "myprop");
-		ctx.put("value", "1,2");
-		ctx.put("regExp", ",");
-		catalog.getCommand("setMultiValueProperty").execute(ctx);
-		assertTrue(n.hasProperty("myprop"));
-		assertTrue(n.getProperty("myprop").getValues()[0].getString().equals(
-				"1"));
-		assertTrue(n.getProperty("myprop").getValues()[1].getString().equals(
-				"2"));
-	}
-
-	public void testSetProperty() throws Exception
-	{
-		Node n = getTestNode();
-		CommandHelper.setCurrentNode(ctx, n);
-		ctx.put("name", "myprop");
-		ctx.put("value", "myvalue");
-		catalog.getCommand("setProperty").execute(ctx);
-		assertTrue(n.hasProperty("myprop"));
-		assertTrue(n.getProperty("myprop").getValue().getString().equals(
-				"myvalue"));
-	}
-
-	public void testAddMixin() throws Exception
-	{
-		ctx.put("mixin", "mix:referenceable");
-		ctx.put("path", getTestNode().getPath());
-		catalog.getCommand("addMixin").execute(ctx);
-		assertTrue(getTestNode().isNodeType("mix:referenceable"));
-	}
-
-	public void testRemoveMixin() throws Exception
-	{
-		getTestNode().addMixin("mix:referenceable");
-		ctx.put("mixin", "mix:referenceable");
-		ctx.put("path", getTestNode().getPath());
-		catalog.getCommand("removeMixin").execute(ctx);
-		assertFalse(getTestNode().isNodeType("mix:referenceable"));
-	}
-
-	public void testNamespace() throws Exception
-	{
-		// ctx.put("prefix", "mycomp");
-		// ctx.put("uri", "http://mycomp");
-		// catalog.getCommand("registerNamespace").execute(ctx);
-		// assertTrue(getTestNode().getSession().getWorkspace()
-		// .getNamespaceRegistry().getURI("mycomp")
-		// .equals("http://mycomp"));
-	}
-
-	public void testCheckin() throws Exception
-	{
-		Node n = getTestNode();
-		n.addMixin("mix:versionable");
-		n.setProperty("prop", "value");
-		n.getSession().save();
-		ctx.put("path", n.getPath());
-		catalog.getCommand("checkin").execute(ctx);
-		// root version + checked in
-		assertFalse(n.isCheckedOut());
-	}
-
-	public void testCheckout() throws Exception
-	{
-		Node n = getTestNode();
-		n.addMixin("mix:versionable");
-		n.getSession().save();
-		n.checkin();
-		ctx.put("path", n.getPath());
-		catalog.getCommand("checkout").execute(ctx);
-		assertTrue(n.isCheckedOut());
-	}
-
-	public void testRemoveVersion() throws Exception
-	{
-		// Node n = getTestNode();
-		// n.addMixin("mix:versionable");
-		// n.getSession().save();
-		// n.checkin();
-		// ctx.put("path", n.getPath());
-		// ctx.put("name", "1.0");
-		// catalog.getCommand("removeVersion").execute(ctx);
-		// assertTrue(n.getVersionHistory().getAllVersions().getSize() == 1);
-	}
-
-	public void testAddVersionLabel() throws Exception
-	{
-		Node n = getTestNode();
-		n.addMixin("mix:versionable");
-		n.getSession().save();
-		n.checkin();
-		ctx.put("path", n.getPath());
-		ctx.put("version", "1.0");
-		ctx.put("label", "myversion");
-		ctx.put("moveLabel", Boolean.TRUE.toString());
-		catalog.getCommand("addVersionLabel").execute(ctx);
-		assertTrue(Arrays.asList(n.getVersionHistory().getVersionLabels())
-				.contains("myversion"));
-	}
-
-	public void testRemoveVersionLabel() throws Exception
-	{
-		Node n = getTestNode();
-		n.addMixin("mix:versionable");
-		n.getSession().save();
-		Version v = n.checkin();
-		n.getVersionHistory().addVersionLabel(v.getName(), "myversion", true);
-		ctx.put("path", n.getPath());
-		ctx.put("label", "myversion");
-		catalog.getCommand("removeVersionLabel").execute(ctx);
-		assertTrue(n.getVersionHistory().getVersionLabels().length == 0);
-	}
-
-	public void testRestore() throws Exception
-	{
-		Node n = getTestNode();
-		n.addMixin("mix:versionable");
-		n.getSession().save();
-		Version v = n.checkin();
-		n.checkout();
-		n.setProperty("newprop", "newval");
-		n.save();
-		ctx.put("path", n.getPath());
-		ctx.put("version", v.getName());
-		ctx.put("removeExisting", Boolean.TRUE.toString());
-		catalog.getCommand("restore").execute(ctx);
-		assertFalse(n.hasProperty("newprop"));
-	}
-
-	public void testRestoreByLabel() throws Exception
-	{
-		Node n = getTestNode();
-		n.addMixin("mix:versionable");
-		n.getSession().save();
-		Version v = n.checkin();
-		n.getVersionHistory().addVersionLabel(v.getName(), "myversion", true);
-		n.checkout();
-		n.setProperty("newprop", "newval");
-		n.save();
-		ctx.put("path", n.getPath());
-		ctx.put("label", "myversion");
-		ctx.put("removeExisting", Boolean.TRUE.toString());
-		catalog.getCommand("restoreByLabel").execute(ctx);
-		assertFalse(n.hasProperty("newprop"));
-	}
-
-	// TODO: add ext, fs, lock, query, versioning(only Merge), export test cases
-
-}
diff --git a/contrib/jcr-commands/src/test/org/apache/jackrabbit/command/cli/I18nTest.java b/contrib/jcr-commands/src/test/org/apache/jackrabbit/command/cli/I18nTest.java
deleted file mode 100644
index 0b8f06e..0000000
--- a/contrib/jcr-commands/src/test/org/apache/jackrabbit/command/cli/I18nTest.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.cli;
-
-import java.util.Iterator;
-import java.util.MissingResourceException;
-
-import org.apache.jackrabbit.command.CommandException;
-
-import junit.framework.TestCase;
-
-/**
- * I18n tests
- */
-public class I18nTest extends TestCase
-{
-
-    public void testCommandLabels() throws CommandException
-    {
-        Iterator iter = CommandLineFactory.getInstance().getCommandLines()
-            .iterator();
-        while (iter.hasNext())
-        {
-            CommandLine cl = (CommandLine) iter.next();
-
-            Iterator params = cl.getAllParameters();
-            while (params.hasNext())
-            {
-                AbstractParameter param = (AbstractParameter) params.next();
-                try
-                {
-                    param.getLocalizedArgName();
-                } catch (MissingResourceException e)
-                {
-                    fail("no arg name for command " + cl.getName() + ". "
-                            + param.getName() + ". " + e.getMessage());
-                }
-                try
-                {
-                    param.getLocalizedDescription();
-                } catch (MissingResourceException e)
-                {
-                    fail("no description for argument " + param.getName()
-                            + " in command " + cl.getName() + "."
-                            + e.getMessage());
-                }
-            }
-        }
-    }
-
-    public void testCommandNames() throws CommandException
-    {
-        Iterator iter = CommandLineFactory.getInstance().getCommandLines()
-            .iterator();
-        while (iter.hasNext())
-        {
-            CommandLine cl = (CommandLine) iter.next();
-            try
-            {
-                cl.getLocalizedDescription();
-            } catch (MissingResourceException e)
-            {
-                fail("no description for command " + cl.getName() + ". "
-                        + e.getMessage());
-            }
-        }
-    }
-
-}
diff --git a/contrib/jcr-commands/src/test/org/apache/jackrabbit/command/cli/JcrRmiServer.java b/contrib/jcr-commands/src/test/org/apache/jackrabbit/command/cli/JcrRmiServer.java
deleted file mode 100644
index ba2051e..0000000
--- a/contrib/jcr-commands/src/test/org/apache/jackrabbit/command/cli/JcrRmiServer.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.cli;
-
-import java.net.MalformedURLException;
-import java.rmi.AlreadyBoundException;
-import java.rmi.Naming;
-import java.rmi.RemoteException;
-
-import javax.jcr.Repository;
-import javax.jcr.RepositoryException;
-
-import org.apache.jackrabbit.core.RepositoryImpl;
-import org.apache.jackrabbit.core.config.RepositoryConfig;
-import org.apache.jackrabbit.rmi.remote.RemoteRepository;
-import org.apache.jackrabbit.rmi.server.RemoteAdapterFactory;
-import org.apache.jackrabbit.rmi.server.ServerAdapterFactory;
-
-/**
- * 16/08/2005
- */
-public class JcrRmiServer
-{
-    /** config */
-    private static String CONFIG = "applications/test/repository.xml";
-
-    /** home */
-    private static String HOME = "applications/test/repository";
-
-    /** rmi url */
-    private static String URL = "jcr/repository";
-
-    public static void main(String[] args) throws RepositoryException, MalformedURLException, RemoteException, AlreadyBoundException
-    {
-        RepositoryConfig conf = RepositoryConfig.create(CONFIG, HOME);
-        Repository repo = RepositoryImpl.create(conf);
-       
-        RemoteAdapterFactory factory = new ServerAdapterFactory();
-        RemoteRepository remote = factory.getRemoteRepository(repo);
-        Naming.bind(URL, remote);  
-        
-    }
-}
diff --git a/contrib/jcr-commands/src/test/org/apache/jackrabbit/command/cli/TestAll.java b/contrib/jcr-commands/src/test/org/apache/jackrabbit/command/cli/TestAll.java
deleted file mode 100644
index ecd8edf..0000000
--- a/contrib/jcr-commands/src/test/org/apache/jackrabbit/command/cli/TestAll.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.command.cli;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-public class TestAll
-{
-
-	public static Test suite()
-	{
-		TestSuite suite = new TestSuite(
-				"Test for org.apache.jackrabbit.command.cli");
-		//$JUnit-BEGIN$
-		suite.addTestSuite(I18nTest.class);
-		suite.addTestSuite(CommandsTest.class);
-		suite.addTestSuite(CliTest.class);
-		//$JUnit-END$
-		return suite;
-	}
-
-}
diff --git a/contrib/jcr-commands/xdocs/benchmarking.jmx b/contrib/jcr-commands/xdocs/benchmarking.jmx
deleted file mode 100644
index 0f824f0..0000000
--- a/contrib/jcr-commands/xdocs/benchmarking.jmx
+++ /dev/null
@@ -1,698 +0,0 @@
-<jmeterTestPlan version="1.1" properties="1.7">
-  <hashTree>
-    <TestPlan>
-      <elementProp name="TestPlan.user_defined_variables" elementType="org.apache.jmeter.config.Arguments">
-        <stringProp name="TestElement.gui_class">org.apache.jmeter.config.gui.ArgumentsPanel</stringProp>
-        <stringProp name="TestElement.test_class">org.apache.jmeter.config.Arguments</stringProp>
-        <collectionProp name="Arguments.arguments"/>
-        <stringProp name="TestElement.name">User Defined Variables</stringProp>
-        <boolProp name="TestElement.enabled">true</boolProp>
-      </elementProp>
-      <stringProp name="TestElement.gui_class">org.apache.jmeter.control.gui.TestPlanGui</stringProp>
-      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
-      <stringProp name="TestElement.test_class">org.apache.jmeter.testelement.TestPlan</stringProp>
-      <stringProp name="TestElement.name">Jackrabbit test plan</stringProp>
-      <boolProp name="TestPlan.functional_mode">false</boolProp>
-      <boolProp name="TestElement.enabled">true</boolProp>
-      <stringProp name="TestPlan.comments"></stringProp>
-    </TestPlan>
-    <hashTree>
-      <ThreadGroup>
-        <longProp name="ThreadGroup.start_time">1120257177000</longProp>
-        <stringProp name="TestElement.test_class">org.apache.jmeter.threads.ThreadGroup</stringProp>
-        <stringProp name="ThreadGroup.delay"></stringProp>
-        <stringProp name="ThreadGroup.duration"></stringProp>
-        <boolProp name="TestElement.enabled">true</boolProp>
-        <stringProp name="ThreadGroup.num_threads">1</stringProp>
-        <boolProp name="ThreadGroup.scheduler">false</boolProp>
-        <stringProp name="TestElement.gui_class">org.apache.jmeter.threads.gui.ThreadGroupGui</stringProp>
-        <elementProp name="ThreadGroup.main_controller" elementType="org.apache.jmeter.control.LoopController">
-          <stringProp name="TestElement.gui_class">org.apache.jmeter.control.gui.LoopControlPanel</stringProp>
-          <intProp name="LoopController.loops">-1</intProp>
-          <stringProp name="TestElement.test_class">org.apache.jmeter.control.LoopController</stringProp>
-          <stringProp name="TestElement.name">Loop Controller</stringProp>
-          <boolProp name="TestElement.enabled">true</boolProp>
-          <boolProp name="LoopController.continue_forever">false</boolProp>
-        </elementProp>
-        <stringProp name="TestElement.name">User writting</stringProp>
-        <longProp name="ThreadGroup.end_time">1120257177000</longProp>
-        <stringProp name="ThreadGroup.on_sample_error">stoptest</stringProp>
-        <stringProp name="ThreadGroup.ramp_time">1</stringProp>
-      </ThreadGroup>
-      <hashTree>
-        <org.apache.jmeter.protocol.java.sampler.ChainSampler>
-          <elementProp name="arguments" elementType="org.apache.jmeter.config.Arguments">
-            <stringProp name="TestElement.gui_class">org.apache.jmeter.config.gui.ArgumentsPanel</stringProp>
-            <stringProp name="TestElement.test_class">org.apache.jmeter.config.Arguments</stringProp>
-            <collectionProp name="Arguments.arguments">
-              <elementProp name="config" elementType="org.apache.jmeter.config.Argument">
-                <stringProp name="Argument.metadata">=</stringProp>
-                <stringProp name="Argument.value">/temp/repository/repository.xml</stringProp>
-                <stringProp name="Argument.name">config</stringProp>
-              </elementProp>
-              <elementProp name="home" elementType="org.apache.jmeter.config.Argument">
-                <stringProp name="Argument.metadata">=</stringProp>
-                <stringProp name="Argument.value">/temp/repository</stringProp>
-                <stringProp name="Argument.name">home</stringProp>
-              </elementProp>
-            </collectionProp>
-            <stringProp name="TestElement.name"></stringProp>
-            <boolProp name="TestElement.enabled">true</boolProp>
-          </elementProp>
-          <stringProp name="classname">org.apache.jackrabbit.chain.command.StartOrGetJackrabbitSingleton</stringProp>
-          <stringProp name="TestElement.gui_class">org.apache.jmeter.protocol.java.control.gui.ChainTestSamplerGui</stringProp>
-          <stringProp name="TestElement.test_class">org.apache.jmeter.protocol.java.sampler.ChainSampler</stringProp>
-          <stringProp name="TestElement.name">startup</stringProp>
-          <boolProp name="TestElement.enabled">true</boolProp>
-        </org.apache.jmeter.protocol.java.sampler.ChainSampler>
-        <hashTree/>
-        <org.apache.jmeter.protocol.java.sampler.ChainSampler>
-          <elementProp name="arguments" elementType="org.apache.jmeter.config.Arguments">
-            <stringProp name="TestElement.gui_class">org.apache.jmeter.config.gui.ArgumentsPanel</stringProp>
-            <stringProp name="TestElement.test_class">org.apache.jmeter.config.Arguments</stringProp>
-            <collectionProp name="Arguments.arguments">
-              <elementProp name="workspaceKey" elementType="org.apache.jmeter.config.Argument">
-                <stringProp name="Argument.metadata">=</stringProp>
-                <stringProp name="Argument.value"></stringProp>
-                <stringProp name="Argument.name">workspaceKey</stringProp>
-              </elementProp>
-              <elementProp name="password" elementType="org.apache.jmeter.config.Argument">
-                <stringProp name="Argument.metadata">=</stringProp>
-                <stringProp name="Argument.value">pwd</stringProp>
-                <stringProp name="Argument.name">password</stringProp>
-              </elementProp>
-              <elementProp name="user" elementType="org.apache.jmeter.config.Argument">
-                <stringProp name="Argument.metadata">=</stringProp>
-                <stringProp name="Argument.value">usr</stringProp>
-                <stringProp name="Argument.name">user</stringProp>
-              </elementProp>
-              <elementProp name="passwordKey" elementType="org.apache.jmeter.config.Argument">
-                <stringProp name="Argument.metadata">=</stringProp>
-                <stringProp name="Argument.value"></stringProp>
-                <stringProp name="Argument.name">passwordKey</stringProp>
-              </elementProp>
-              <elementProp name="workspace" elementType="org.apache.jmeter.config.Argument">
-                <stringProp name="Argument.metadata">=</stringProp>
-                <stringProp name="Argument.value"></stringProp>
-                <stringProp name="Argument.name">workspace</stringProp>
-              </elementProp>
-              <elementProp name="userKey" elementType="org.apache.jmeter.config.Argument">
-                <stringProp name="Argument.metadata">=</stringProp>
-                <stringProp name="Argument.value"></stringProp>
-                <stringProp name="Argument.name">userKey</stringProp>
-              </elementProp>
-            </collectionProp>
-            <stringProp name="TestElement.name"></stringProp>
-            <boolProp name="TestElement.enabled">true</boolProp>
-          </elementProp>
-          <stringProp name="classname">org.apache.jackrabbit.chain.command.Login</stringProp>
-          <stringProp name="TestElement.gui_class">org.apache.jmeter.protocol.java.control.gui.ChainTestSamplerGui</stringProp>
-          <stringProp name="TestElement.test_class">org.apache.jmeter.protocol.java.sampler.ChainSampler</stringProp>
-          <stringProp name="TestElement.name">login</stringProp>
-          <boolProp name="TestElement.enabled">true</boolProp>
-        </org.apache.jmeter.protocol.java.sampler.ChainSampler>
-        <hashTree/>
-        <OnceOnlyController>
-          <stringProp name="TestElement.gui_class">org.apache.jmeter.control.gui.OnceOnlyControllerGui</stringProp>
-          <stringProp name="TestElement.test_class">org.apache.jmeter.control.OnceOnlyController</stringProp>
-          <stringProp name="TestElement.name">Once Only Controller</stringProp>
-          <boolProp name="TestElement.enabled">true</boolProp>
-        </OnceOnlyController>
-        <hashTree>
-          <org.apache.jmeter.protocol.java.sampler.ChainSampler>
-            <elementProp name="arguments" elementType="org.apache.jmeter.config.Arguments">
-              <stringProp name="TestElement.gui_class">org.apache.jmeter.config.gui.ArgumentsPanel</stringProp>
-              <stringProp name="TestElement.test_class">org.apache.jmeter.config.Arguments</stringProp>
-              <collectionProp name="Arguments.arguments"/>
-              <stringProp name="TestElement.name"></stringProp>
-              <boolProp name="TestElement.enabled">true</boolProp>
-            </elementProp>
-            <stringProp name="classname">org.apache.jackrabbit.chain.command.ClearWorkspace</stringProp>
-            <stringProp name="TestElement.gui_class">org.apache.jmeter.protocol.java.control.gui.ChainTestSamplerGui</stringProp>
-            <stringProp name="TestElement.test_class">org.apache.jmeter.protocol.java.sampler.ChainSampler</stringProp>
-            <stringProp name="TestElement.name">clear workspace</stringProp>
-            <boolProp name="TestElement.enabled">true</boolProp>
-          </org.apache.jmeter.protocol.java.sampler.ChainSampler>
-          <hashTree/>
-        </hashTree>
-        <IfController>
-          <stringProp name="IfController.condition">${__jexl(vars.getObject(&quot;jcr.current&quot;).hasNode(&quot;test&quot;)==false)}</stringProp>
-          <stringProp name="TestElement.gui_class">org.apache.jmeter.control.gui.IfControllerPanel</stringProp>
-          <stringProp name="TestElement.test_class">org.apache.jmeter.control.IfController</stringProp>
-          <stringProp name="TestElement.name">If !hasNode()</stringProp>
-          <boolProp name="TestElement.enabled">true</boolProp>
-        </IfController>
-        <hashTree>
-          <org.apache.jmeter.protocol.java.sampler.ChainSampler>
-            <elementProp name="arguments" elementType="org.apache.jmeter.config.Arguments">
-              <stringProp name="TestElement.gui_class">org.apache.jmeter.config.gui.ArgumentsPanel</stringProp>
-              <stringProp name="TestElement.test_class">org.apache.jmeter.config.Arguments</stringProp>
-              <collectionProp name="Arguments.arguments">
-                <elementProp name="nodeTypeKey" elementType="org.apache.jmeter.config.Argument">
-                  <stringProp name="Argument.metadata">=</stringProp>
-                  <stringProp name="Argument.value"></stringProp>
-                  <stringProp name="Argument.name">nodeTypeKey</stringProp>
-                </elementProp>
-                <elementProp name="nodeNameKey" elementType="org.apache.jmeter.config.Argument">
-                  <stringProp name="Argument.metadata">=</stringProp>
-                  <stringProp name="Argument.value"></stringProp>
-                  <stringProp name="Argument.name">nodeNameKey</stringProp>
-                </elementProp>
-                <elementProp name="nodeName" elementType="org.apache.jmeter.config.Argument">
-                  <stringProp name="Argument.metadata">=</stringProp>
-                  <stringProp name="Argument.value">test</stringProp>
-                  <stringProp name="Argument.name">nodeName</stringProp>
-                </elementProp>
-                <elementProp name="nodeType" elementType="org.apache.jmeter.config.Argument">
-                  <stringProp name="Argument.metadata">=</stringProp>
-                  <stringProp name="Argument.value"></stringProp>
-                  <stringProp name="Argument.name">nodeType</stringProp>
-                </elementProp>
-              </collectionProp>
-              <stringProp name="TestElement.name"></stringProp>
-              <boolProp name="TestElement.enabled">true</boolProp>
-            </elementProp>
-            <stringProp name="classname">org.apache.jackrabbit.chain.command.AddNode</stringProp>
-            <stringProp name="TestElement.gui_class">org.apache.jmeter.protocol.java.control.gui.ChainTestSamplerGui</stringProp>
-            <stringProp name="TestElement.test_class">org.apache.jmeter.protocol.java.sampler.ChainSampler</stringProp>
-            <stringProp name="TestElement.name">Add test node</stringProp>
-            <boolProp name="TestElement.enabled">true</boolProp>
-          </org.apache.jmeter.protocol.java.sampler.ChainSampler>
-          <hashTree/>
-        </hashTree>
-        <org.apache.jmeter.protocol.java.sampler.ChainSampler>
-          <elementProp name="arguments" elementType="org.apache.jmeter.config.Arguments">
-            <stringProp name="TestElement.gui_class">org.apache.jmeter.config.gui.ArgumentsPanel</stringProp>
-            <stringProp name="TestElement.test_class">org.apache.jmeter.config.Arguments</stringProp>
-            <collectionProp name="Arguments.arguments">
-              <elementProp name="pathKey" elementType="org.apache.jmeter.config.Argument">
-                <stringProp name="Argument.metadata">=</stringProp>
-                <stringProp name="Argument.value"></stringProp>
-                <stringProp name="Argument.name">pathKey</stringProp>
-              </elementProp>
-              <elementProp name="path" elementType="org.apache.jmeter.config.Argument">
-                <stringProp name="Argument.metadata">=</stringProp>
-                <stringProp name="Argument.value">/test</stringProp>
-                <stringProp name="Argument.name">path</stringProp>
-              </elementProp>
-            </collectionProp>
-            <stringProp name="TestElement.name"></stringProp>
-            <boolProp name="TestElement.enabled">true</boolProp>
-          </elementProp>
-          <stringProp name="classname">org.apache.jackrabbit.chain.command.CurrentNode</stringProp>
-          <stringProp name="TestElement.gui_class">org.apache.jmeter.protocol.java.control.gui.ChainTestSamplerGui</stringProp>
-          <stringProp name="TestElement.test_class">org.apache.jmeter.protocol.java.sampler.ChainSampler</stringProp>
-          <stringProp name="TestElement.name">cd test</stringProp>
-          <boolProp name="TestElement.enabled">true</boolProp>
-        </org.apache.jmeter.protocol.java.sampler.ChainSampler>
-        <hashTree/>
-        <org.apache.jmeter.protocol.java.sampler.ChainSampler>
-          <elementProp name="arguments" elementType="org.apache.jmeter.config.Arguments">
-            <stringProp name="TestElement.gui_class">org.apache.jmeter.config.gui.ArgumentsPanel</stringProp>
-            <stringProp name="TestElement.test_class">org.apache.jmeter.config.Arguments</stringProp>
-            <collectionProp name="Arguments.arguments">
-              <elementProp name="value" elementType="org.apache.jmeter.config.Argument">
-                <stringProp name="Argument.metadata">=</stringProp>
-                <stringProp name="Argument.value">my property value</stringProp>
-                <stringProp name="Argument.name">value</stringProp>
-              </elementProp>
-              <elementProp name="propertyTypeKey" elementType="org.apache.jmeter.config.Argument">
-                <stringProp name="Argument.metadata">=</stringProp>
-                <stringProp name="Argument.value"></stringProp>
-                <stringProp name="Argument.name">propertyTypeKey</stringProp>
-              </elementProp>
-              <elementProp name="propertyName" elementType="org.apache.jmeter.config.Argument">
-                <stringProp name="Argument.metadata">=</stringProp>
-                <stringProp name="Argument.value">myprop</stringProp>
-                <stringProp name="Argument.name">propertyName</stringProp>
-              </elementProp>
-              <elementProp name="propertyType" elementType="org.apache.jmeter.config.Argument">
-                <stringProp name="Argument.metadata">=</stringProp>
-                <stringProp name="Argument.value">String</stringProp>
-                <stringProp name="Argument.name">propertyType</stringProp>
-              </elementProp>
-              <elementProp name="propertyNameKey" elementType="org.apache.jmeter.config.Argument">
-                <stringProp name="Argument.metadata">=</stringProp>
-                <stringProp name="Argument.value"></stringProp>
-                <stringProp name="Argument.name">propertyNameKey</stringProp>
-              </elementProp>
-              <elementProp name="valueKey" elementType="org.apache.jmeter.config.Argument">
-                <stringProp name="Argument.metadata">=</stringProp>
-                <stringProp name="Argument.value"></stringProp>
-                <stringProp name="Argument.name">valueKey</stringProp>
-              </elementProp>
-            </collectionProp>
-            <stringProp name="TestElement.name"></stringProp>
-            <boolProp name="TestElement.enabled">true</boolProp>
-          </elementProp>
-          <stringProp name="classname">org.apache.jackrabbit.chain.command.SetProperty</stringProp>
-          <stringProp name="TestElement.gui_class">org.apache.jmeter.protocol.java.control.gui.ChainTestSamplerGui</stringProp>
-          <stringProp name="TestElement.test_class">org.apache.jmeter.protocol.java.sampler.ChainSampler</stringProp>
-          <stringProp name="TestElement.name">add property</stringProp>
-          <boolProp name="TestElement.enabled">true</boolProp>
-        </org.apache.jmeter.protocol.java.sampler.ChainSampler>
-        <hashTree/>
-        <GenericController>
-          <stringProp name="TestElement.gui_class">org.apache.jmeter.control.gui.LogicControllerGui</stringProp>
-          <stringProp name="TestElement.test_class">org.apache.jmeter.control.GenericController</stringProp>
-          <stringProp name="TestElement.name">Add 10 nodes</stringProp>
-          <boolProp name="TestElement.enabled">true</boolProp>
-        </GenericController>
-        <hashTree>
-          <CounterConfig>
-            <stringProp name="CounterConfig.start">0</stringProp>
-            <stringProp name="TestElement.gui_class">org.apache.jmeter.modifiers.gui.CounterConfigGui</stringProp>
-            <stringProp name="CounterConfig.incr">1</stringProp>
-            <stringProp name="CounterConfig.name">counter</stringProp>
-            <stringProp name="TestElement.test_class">org.apache.jmeter.modifiers.CounterConfig</stringProp>
-            <stringProp name="TestElement.name">counter</stringProp>
-            <boolProp name="CounterConfig.per_user">true</boolProp>
-            <stringProp name="CounterConfig.end"></stringProp>
-            <boolProp name="TestElement.enabled">true</boolProp>
-          </CounterConfig>
-          <hashTree/>
-          <LoopController>
-            <stringProp name="TestElement.gui_class">org.apache.jmeter.control.gui.LoopControlPanel</stringProp>
-            <stringProp name="LoopController.loops">10</stringProp>
-            <stringProp name="TestElement.test_class">org.apache.jmeter.control.LoopController</stringProp>
-            <stringProp name="TestElement.name">do 10 times</stringProp>
-            <boolProp name="TestElement.enabled">true</boolProp>
-            <boolProp name="LoopController.continue_forever">true</boolProp>
-          </LoopController>
-          <hashTree>
-            <org.apache.jmeter.protocol.java.sampler.ChainSampler>
-              <elementProp name="arguments" elementType="org.apache.jmeter.config.Arguments">
-                <stringProp name="TestElement.gui_class">org.apache.jmeter.config.gui.ArgumentsPanel</stringProp>
-                <stringProp name="TestElement.test_class">org.apache.jmeter.config.Arguments</stringProp>
-                <collectionProp name="Arguments.arguments">
-                  <elementProp name="nodeTypeKey" elementType="org.apache.jmeter.config.Argument">
-                    <stringProp name="Argument.metadata">=</stringProp>
-                    <stringProp name="Argument.value"></stringProp>
-                    <stringProp name="Argument.name">nodeTypeKey</stringProp>
-                  </elementProp>
-                  <elementProp name="nodeNameKey" elementType="org.apache.jmeter.config.Argument">
-                    <stringProp name="Argument.metadata">=</stringProp>
-                    <stringProp name="Argument.value"></stringProp>
-                    <stringProp name="Argument.name">nodeNameKey</stringProp>
-                  </elementProp>
-                  <elementProp name="nodeName" elementType="org.apache.jmeter.config.Argument">
-                    <stringProp name="Argument.metadata">=</stringProp>
-                    <stringProp name="Argument.value">testnode${counter}</stringProp>
-                    <stringProp name="Argument.name">nodeName</stringProp>
-                  </elementProp>
-                  <elementProp name="nodeType" elementType="org.apache.jmeter.config.Argument">
-                    <stringProp name="Argument.metadata">=</stringProp>
-                    <stringProp name="Argument.value"></stringProp>
-                    <stringProp name="Argument.name">nodeType</stringProp>
-                  </elementProp>
-                </collectionProp>
-                <stringProp name="TestElement.name"></stringProp>
-                <boolProp name="TestElement.enabled">true</boolProp>
-              </elementProp>
-              <stringProp name="classname">org.apache.jackrabbit.chain.command.AddNode</stringProp>
-              <stringProp name="TestElement.gui_class">org.apache.jmeter.protocol.java.control.gui.ChainTestSamplerGui</stringProp>
-              <stringProp name="TestElement.test_class">org.apache.jmeter.protocol.java.sampler.ChainSampler</stringProp>
-              <stringProp name="TestElement.name">add node</stringProp>
-              <boolProp name="TestElement.enabled">true</boolProp>
-            </org.apache.jmeter.protocol.java.sampler.ChainSampler>
-            <hashTree/>
-          </hashTree>
-        </hashTree>
-        <ConstantTimer>
-          <stringProp name="TestElement.gui_class">org.apache.jmeter.timers.gui.ConstantTimerGui</stringProp>
-          <stringProp name="TestElement.test_class">org.apache.jmeter.timers.ConstantTimer</stringProp>
-          <stringProp name="TestElement.name">pause</stringProp>
-          <boolProp name="TestElement.enabled">true</boolProp>
-          <stringProp name="ConstantTimer.delay">200</stringProp>
-        </ConstantTimer>
-        <hashTree/>
-        <org.apache.jmeter.protocol.java.sampler.ChainSampler>
-          <elementProp name="arguments" elementType="org.apache.jmeter.config.Arguments">
-            <stringProp name="TestElement.gui_class">org.apache.jmeter.config.gui.ArgumentsPanel</stringProp>
-            <stringProp name="TestElement.test_class">org.apache.jmeter.config.Arguments</stringProp>
-            <collectionProp name="Arguments.arguments"/>
-            <stringProp name="TestElement.name"></stringProp>
-            <boolProp name="TestElement.enabled">true</boolProp>
-          </elementProp>
-          <stringProp name="classname">org.apache.jackrabbit.chain.command.SaveSession</stringProp>
-          <stringProp name="TestElement.gui_class">org.apache.jmeter.protocol.java.control.gui.ChainTestSamplerGui</stringProp>
-          <stringProp name="TestElement.test_class">org.apache.jmeter.protocol.java.sampler.ChainSampler</stringProp>
-          <stringProp name="TestElement.name">save</stringProp>
-          <boolProp name="TestElement.enabled">true</boolProp>
-        </org.apache.jmeter.protocol.java.sampler.ChainSampler>
-        <hashTree/>
-        <org.apache.jmeter.protocol.java.sampler.ChainSampler>
-          <elementProp name="arguments" elementType="org.apache.jmeter.config.Arguments">
-            <stringProp name="TestElement.gui_class">org.apache.jmeter.config.gui.ArgumentsPanel</stringProp>
-            <stringProp name="TestElement.test_class">org.apache.jmeter.config.Arguments</stringProp>
-            <collectionProp name="Arguments.arguments"/>
-            <stringProp name="TestElement.name"></stringProp>
-            <boolProp name="TestElement.enabled">true</boolProp>
-          </elementProp>
-          <stringProp name="classname">org.apache.jackrabbit.chain.command.Logout</stringProp>
-          <stringProp name="TestElement.gui_class">org.apache.jmeter.protocol.java.control.gui.ChainTestSamplerGui</stringProp>
-          <stringProp name="TestElement.test_class">org.apache.jmeter.protocol.java.sampler.ChainSampler</stringProp>
-          <stringProp name="TestElement.name">logout</stringProp>
-          <boolProp name="TestElement.enabled">true</boolProp>
-        </org.apache.jmeter.protocol.java.sampler.ChainSampler>
-        <hashTree/>
-        <ResultCollector>
-          <stringProp name="TestElement.gui_class">org.apache.jmeter.visualizers.StatVisualizer</stringProp>
-          <stringProp name="TestElement.test_class">org.apache.jmeter.reporters.ResultCollector</stringProp>
-          <stringProp name="TestElement.name">Aggregate Report</stringProp>
-          <objProp>
-            <value class="org.apache.jmeter.samplers.SampleSaveConfiguration">
-              <time>true</time>
-              <latency>true</latency>
-              <timestamp>true</timestamp>
-              <success>true</success>
-              <label>true</label>
-              <code>true</code>
-              <message>true</message>
-              <threadName>true</threadName>
-              <dataType>true</dataType>
-              <encoding>false</encoding>
-              <assertions>true</assertions>
-              <subresults>true</subresults>
-              <responseData>false</responseData>
-              <samplerData>false</samplerData>
-              <xml>true</xml>
-              <fieldNames>false</fieldNames>
-              <responseHeaders>false</responseHeaders>
-              <requestHeaders>false</requestHeaders>
-              <responseDataOnError>false</responseDataOnError>
-              <saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
-              <assertionsResultsToSave>0</assertionsResultsToSave>
-              <delimiter>,</delimiter>
-              <printMilliseconds>true</printMilliseconds>
-            </value>
-            <name>saveConfig</name>
-          </objProp>
-          <boolProp name="TestElement.enabled">true</boolProp>
-          <stringProp name="filename"></stringProp>
-          <boolProp name="ResultCollector.error_logging">false</boolProp>
-        </ResultCollector>
-        <hashTree/>
-      </hashTree>
-      <ThreadGroup>
-        <longProp name="ThreadGroup.start_time">1120257177000</longProp>
-        <stringProp name="TestElement.test_class">org.apache.jmeter.threads.ThreadGroup</stringProp>
-        <stringProp name="ThreadGroup.delay"></stringProp>
-        <stringProp name="ThreadGroup.duration"></stringProp>
-        <boolProp name="TestElement.enabled">true</boolProp>
-        <stringProp name="ThreadGroup.num_threads">2</stringProp>
-        <boolProp name="ThreadGroup.scheduler">false</boolProp>
-        <stringProp name="TestElement.gui_class">org.apache.jmeter.threads.gui.ThreadGroupGui</stringProp>
-        <elementProp name="ThreadGroup.main_controller" elementType="org.apache.jmeter.control.LoopController">
-          <stringProp name="TestElement.gui_class">org.apache.jmeter.control.gui.LoopControlPanel</stringProp>
-          <intProp name="LoopController.loops">-1</intProp>
-          <stringProp name="TestElement.test_class">org.apache.jmeter.control.LoopController</stringProp>
-          <stringProp name="TestElement.name">Loop Controller</stringProp>
-          <boolProp name="TestElement.enabled">true</boolProp>
-          <boolProp name="LoopController.continue_forever">false</boolProp>
-        </elementProp>
-        <stringProp name="TestElement.name">2 Users reading</stringProp>
-        <longProp name="ThreadGroup.end_time">1120257177000</longProp>
-        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
-        <stringProp name="ThreadGroup.ramp_time">2</stringProp>
-      </ThreadGroup>
-      <hashTree>
-        <org.apache.jmeter.protocol.java.sampler.ChainSampler>
-          <elementProp name="arguments" elementType="org.apache.jmeter.config.Arguments">
-            <stringProp name="TestElement.gui_class">org.apache.jmeter.config.gui.ArgumentsPanel</stringProp>
-            <stringProp name="TestElement.test_class">org.apache.jmeter.config.Arguments</stringProp>
-            <collectionProp name="Arguments.arguments">
-              <elementProp name="config" elementType="org.apache.jmeter.config.Argument">
-                <stringProp name="Argument.metadata">=</stringProp>
-                <stringProp name="Argument.value">/temp/repository/repository.xml</stringProp>
-                <stringProp name="Argument.name">config</stringProp>
-              </elementProp>
-              <elementProp name="home" elementType="org.apache.jmeter.config.Argument">
-                <stringProp name="Argument.metadata">=</stringProp>
-                <stringProp name="Argument.value">/temp/repository</stringProp>
-                <stringProp name="Argument.name">home</stringProp>
-              </elementProp>
-            </collectionProp>
-            <stringProp name="TestElement.name"></stringProp>
-            <boolProp name="TestElement.enabled">true</boolProp>
-          </elementProp>
-          <stringProp name="classname">org.apache.jackrabbit.chain.command.StartOrGetJackrabbitSingleton</stringProp>
-          <stringProp name="TestElement.gui_class">org.apache.jmeter.protocol.java.control.gui.ChainTestSamplerGui</stringProp>
-          <stringProp name="TestElement.test_class">org.apache.jmeter.protocol.java.sampler.ChainSampler</stringProp>
-          <stringProp name="TestElement.name">startup</stringProp>
-          <boolProp name="TestElement.enabled">true</boolProp>
-        </org.apache.jmeter.protocol.java.sampler.ChainSampler>
-        <hashTree/>
-        <org.apache.jmeter.protocol.java.sampler.ChainSampler>
-          <elementProp name="arguments" elementType="org.apache.jmeter.config.Arguments">
-            <stringProp name="TestElement.gui_class">org.apache.jmeter.config.gui.ArgumentsPanel</stringProp>
-            <stringProp name="TestElement.test_class">org.apache.jmeter.config.Arguments</stringProp>
-            <collectionProp name="Arguments.arguments">
-              <elementProp name="workspaceKey" elementType="org.apache.jmeter.config.Argument">
-                <stringProp name="Argument.metadata">=</stringProp>
-                <stringProp name="Argument.value"></stringProp>
-                <stringProp name="Argument.name">workspaceKey</stringProp>
-              </elementProp>
-              <elementProp name="password" elementType="org.apache.jmeter.config.Argument">
-                <stringProp name="Argument.metadata">=</stringProp>
-                <stringProp name="Argument.value">user1</stringProp>
-                <stringProp name="Argument.name">password</stringProp>
-              </elementProp>
-              <elementProp name="user" elementType="org.apache.jmeter.config.Argument">
-                <stringProp name="Argument.metadata">=</stringProp>
-                <stringProp name="Argument.value">psw1</stringProp>
-                <stringProp name="Argument.name">user</stringProp>
-              </elementProp>
-              <elementProp name="passwordKey" elementType="org.apache.jmeter.config.Argument">
-                <stringProp name="Argument.metadata">=</stringProp>
-                <stringProp name="Argument.value"></stringProp>
-                <stringProp name="Argument.name">passwordKey</stringProp>
-              </elementProp>
-              <elementProp name="workspace" elementType="org.apache.jmeter.config.Argument">
-                <stringProp name="Argument.metadata">=</stringProp>
-                <stringProp name="Argument.value"></stringProp>
-                <stringProp name="Argument.name">workspace</stringProp>
-              </elementProp>
-              <elementProp name="userKey" elementType="org.apache.jmeter.config.Argument">
-                <stringProp name="Argument.metadata">=</stringProp>
-                <stringProp name="Argument.value"></stringProp>
-                <stringProp name="Argument.name">userKey</stringProp>
-              </elementProp>
-            </collectionProp>
-            <stringProp name="TestElement.name"></stringProp>
-            <boolProp name="TestElement.enabled">true</boolProp>
-          </elementProp>
-          <stringProp name="classname">org.apache.jackrabbit.chain.command.Login</stringProp>
-          <stringProp name="TestElement.gui_class">org.apache.jmeter.protocol.java.control.gui.ChainTestSamplerGui</stringProp>
-          <stringProp name="TestElement.test_class">org.apache.jmeter.protocol.java.sampler.ChainSampler</stringProp>
-          <stringProp name="TestElement.name">login</stringProp>
-          <boolProp name="TestElement.enabled">true</boolProp>
-        </org.apache.jmeter.protocol.java.sampler.ChainSampler>
-        <hashTree/>
-        <org.apache.jmeter.protocol.java.sampler.ChainSampler>
-          <elementProp name="arguments" elementType="org.apache.jmeter.config.Arguments">
-            <stringProp name="TestElement.gui_class">org.apache.jmeter.config.gui.ArgumentsPanel</stringProp>
-            <stringProp name="TestElement.test_class">org.apache.jmeter.config.Arguments</stringProp>
-            <collectionProp name="Arguments.arguments">
-              <elementProp name="pathKey" elementType="org.apache.jmeter.config.Argument">
-                <stringProp name="Argument.metadata">=</stringProp>
-                <stringProp name="Argument.value"></stringProp>
-                <stringProp name="Argument.name">pathKey</stringProp>
-              </elementProp>
-              <elementProp name="path" elementType="org.apache.jmeter.config.Argument">
-                <stringProp name="Argument.metadata">=</stringProp>
-                <stringProp name="Argument.value">/test</stringProp>
-                <stringProp name="Argument.name">path</stringProp>
-              </elementProp>
-            </collectionProp>
-            <stringProp name="TestElement.name"></stringProp>
-            <boolProp name="TestElement.enabled">true</boolProp>
-          </elementProp>
-          <stringProp name="classname">org.apache.jackrabbit.chain.command.CurrentNode</stringProp>
-          <stringProp name="TestElement.gui_class">org.apache.jmeter.protocol.java.control.gui.ChainTestSamplerGui</stringProp>
-          <stringProp name="TestElement.test_class">org.apache.jmeter.protocol.java.sampler.ChainSampler</stringProp>
-          <stringProp name="TestElement.name">cd test</stringProp>
-          <boolProp name="TestElement.enabled">true</boolProp>
-        </org.apache.jmeter.protocol.java.sampler.ChainSampler>
-        <hashTree/>
-        <org.apache.jmeter.protocol.java.sampler.ChainSampler>
-          <elementProp name="arguments" elementType="org.apache.jmeter.config.Arguments">
-            <stringProp name="TestElement.gui_class">org.apache.jmeter.config.gui.ArgumentsPanel</stringProp>
-            <stringProp name="TestElement.test_class">org.apache.jmeter.config.Arguments</stringProp>
-            <collectionProp name="Arguments.arguments">
-              <elementProp name="depthKey" elementType="org.apache.jmeter.config.Argument">
-                <stringProp name="Argument.metadata">=</stringProp>
-                <stringProp name="Argument.value"></stringProp>
-                <stringProp name="Argument.name">depthKey</stringProp>
-              </elementProp>
-              <elementProp name="namePatternKey" elementType="org.apache.jmeter.config.Argument">
-                <stringProp name="Argument.metadata">=</stringProp>
-                <stringProp name="Argument.value"></stringProp>
-                <stringProp name="Argument.name">namePatternKey</stringProp>
-              </elementProp>
-              <elementProp name="namePattern" elementType="org.apache.jmeter.config.Argument">
-                <stringProp name="Argument.metadata">=</stringProp>
-                <stringProp name="Argument.value">*</stringProp>
-                <stringProp name="Argument.name">namePattern</stringProp>
-              </elementProp>
-              <elementProp name="depth" elementType="org.apache.jmeter.config.Argument">
-                <stringProp name="Argument.metadata">=</stringProp>
-                <stringProp name="Argument.value">1</stringProp>
-                <stringProp name="Argument.name">depth</stringProp>
-              </elementProp>
-              <elementProp name="toKey" elementType="org.apache.jmeter.config.Argument">
-                <stringProp name="Argument.metadata">=</stringProp>
-                <stringProp name="Argument.value">children</stringProp>
-                <stringProp name="Argument.name">toKey</stringProp>
-              </elementProp>
-            </collectionProp>
-            <stringProp name="TestElement.name"></stringProp>
-            <boolProp name="TestElement.enabled">true</boolProp>
-          </elementProp>
-          <stringProp name="classname">org.apache.jackrabbit.chain.command.CollectNodes</stringProp>
-          <stringProp name="TestElement.gui_class">org.apache.jmeter.protocol.java.control.gui.ChainTestSamplerGui</stringProp>
-          <stringProp name="TestElement.test_class">org.apache.jmeter.protocol.java.sampler.ChainSampler</stringProp>
-          <stringProp name="TestElement.name">collect nodes</stringProp>
-          <boolProp name="TestElement.enabled">true</boolProp>
-        </org.apache.jmeter.protocol.java.sampler.ChainSampler>
-        <hashTree/>
-        <org.apache.jmeter.control.WhileController>
-          <stringProp name="TestElement.gui_class">org.apache.jmeter.control.gui.WhileControllerGui</stringProp>
-          <stringProp name="TestElement.test_class">org.apache.jmeter.control.WhileController</stringProp>
-          <stringProp name="TestElement.name">While has next child</stringProp>
-          <boolProp name="TestElement.enabled">true</boolProp>
-          <stringProp name="WhileController.condition">${__jexl(vars.getObject(&quot;children&quot;).hasNext())}</stringProp>
-        </org.apache.jmeter.control.WhileController>
-        <hashTree>
-          <org.apache.jmeter.protocol.java.sampler.ChainSampler>
-            <elementProp name="arguments" elementType="org.apache.jmeter.config.Arguments">
-              <stringProp name="TestElement.gui_class">org.apache.jmeter.config.gui.ArgumentsPanel</stringProp>
-              <stringProp name="TestElement.test_class">org.apache.jmeter.config.Arguments</stringProp>
-              <collectionProp name="Arguments.arguments">
-                <elementProp name="pathKey" elementType="org.apache.jmeter.config.Argument">
-                  <stringProp name="Argument.metadata">=</stringProp>
-                  <stringProp name="Argument.value"></stringProp>
-                  <stringProp name="Argument.name">pathKey</stringProp>
-                </elementProp>
-                <elementProp name="path" elementType="org.apache.jmeter.config.Argument">
-                  <stringProp name="Argument.metadata">=</stringProp>
-                  <stringProp name="Argument.value">${__jexl(vars.getObject(&quot;children&quot;).next().getPath())}</stringProp>
-                  <stringProp name="Argument.name">path</stringProp>
-                </elementProp>
-              </collectionProp>
-              <stringProp name="TestElement.name"></stringProp>
-              <boolProp name="TestElement.enabled">true</boolProp>
-            </elementProp>
-            <stringProp name="classname">org.apache.jackrabbit.chain.command.CurrentNode</stringProp>
-            <stringProp name="TestElement.gui_class">org.apache.jmeter.protocol.java.control.gui.ChainTestSamplerGui</stringProp>
-            <stringProp name="TestElement.test_class">org.apache.jmeter.protocol.java.sampler.ChainSampler</stringProp>
-            <stringProp name="TestElement.name">cd next child</stringProp>
-            <boolProp name="TestElement.enabled">true</boolProp>
-          </org.apache.jmeter.protocol.java.sampler.ChainSampler>
-          <hashTree/>
-          <org.apache.jmeter.protocol.java.sampler.ChainSampler>
-            <elementProp name="arguments" elementType="org.apache.jmeter.config.Arguments">
-              <stringProp name="TestElement.gui_class">org.apache.jmeter.config.gui.ArgumentsPanel</stringProp>
-              <stringProp name="TestElement.test_class">org.apache.jmeter.config.Arguments</stringProp>
-              <collectionProp name="Arguments.arguments">
-                <elementProp name="index" elementType="org.apache.jmeter.config.Argument">
-                  <stringProp name="Argument.metadata">=</stringProp>
-                  <stringProp name="Argument.value"></stringProp>
-                  <stringProp name="Argument.name">index</stringProp>
-                </elementProp>
-                <elementProp name="pathKey" elementType="org.apache.jmeter.config.Argument">
-                  <stringProp name="Argument.metadata">=</stringProp>
-                  <stringProp name="Argument.value"></stringProp>
-                  <stringProp name="Argument.name">pathKey</stringProp>
-                </elementProp>
-                <elementProp name="path" elementType="org.apache.jmeter.config.Argument">
-                  <stringProp name="Argument.metadata">=</stringProp>
-                  <stringProp name="Argument.value">jcr:primaryType</stringProp>
-                  <stringProp name="Argument.name">path</stringProp>
-                </elementProp>
-                <elementProp name="indexKey" elementType="org.apache.jmeter.config.Argument">
-                  <stringProp name="Argument.metadata">=</stringProp>
-                  <stringProp name="Argument.value"></stringProp>
-                  <stringProp name="Argument.name">indexKey</stringProp>
-                </elementProp>
-                <elementProp name="toKey" elementType="org.apache.jmeter.config.Argument">
-                  <stringProp name="Argument.metadata">=</stringProp>
-                  <stringProp name="Argument.value">nodetype</stringProp>
-                  <stringProp name="Argument.name">toKey</stringProp>
-                </elementProp>
-              </collectionProp>
-              <stringProp name="TestElement.name"></stringProp>
-              <boolProp name="TestElement.enabled">true</boolProp>
-            </elementProp>
-            <stringProp name="classname">org.apache.jackrabbit.chain.command.ReadValue</stringProp>
-            <stringProp name="TestElement.gui_class">org.apache.jmeter.protocol.java.control.gui.ChainTestSamplerGui</stringProp>
-            <stringProp name="TestElement.test_class">org.apache.jmeter.protocol.java.sampler.ChainSampler</stringProp>
-            <stringProp name="TestElement.name">read primary type</stringProp>
-            <boolProp name="TestElement.enabled">true</boolProp>
-          </org.apache.jmeter.protocol.java.sampler.ChainSampler>
-          <hashTree/>
-        </hashTree>
-        <ConstantTimer>
-          <stringProp name="TestElement.gui_class">org.apache.jmeter.timers.gui.ConstantTimerGui</stringProp>
-          <stringProp name="TestElement.test_class">org.apache.jmeter.timers.ConstantTimer</stringProp>
-          <stringProp name="TestElement.name">pause</stringProp>
-          <boolProp name="TestElement.enabled">true</boolProp>
-          <stringProp name="ConstantTimer.delay">500</stringProp>
-        </ConstantTimer>
-        <hashTree/>
-        <org.apache.jmeter.protocol.java.sampler.ChainSampler>
-          <elementProp name="arguments" elementType="org.apache.jmeter.config.Arguments">
-            <stringProp name="TestElement.gui_class">org.apache.jmeter.config.gui.ArgumentsPanel</stringProp>
-            <stringProp name="TestElement.test_class">org.apache.jmeter.config.Arguments</stringProp>
-            <collectionProp name="Arguments.arguments"/>
-            <stringProp name="TestElement.name"></stringProp>
-            <boolProp name="TestElement.enabled">true</boolProp>
-          </elementProp>
-          <stringProp name="classname">org.apache.jackrabbit.chain.command.Logout</stringProp>
-          <stringProp name="TestElement.gui_class">org.apache.jmeter.protocol.java.control.gui.ChainTestSamplerGui</stringProp>
-          <stringProp name="TestElement.test_class">org.apache.jmeter.protocol.java.sampler.ChainSampler</stringProp>
-          <stringProp name="TestElement.name">logout</stringProp>
-          <boolProp name="TestElement.enabled">true</boolProp>
-        </org.apache.jmeter.protocol.java.sampler.ChainSampler>
-        <hashTree/>
-        <ResultCollector>
-          <stringProp name="TestElement.gui_class">org.apache.jmeter.visualizers.StatVisualizer</stringProp>
-          <stringProp name="TestElement.test_class">org.apache.jmeter.reporters.ResultCollector</stringProp>
-          <stringProp name="TestElement.name">Aggregate Report</stringProp>
-          <objProp>
-            <value class="org.apache.jmeter.samplers.SampleSaveConfiguration">
-              <time>true</time>
-              <latency>true</latency>
-              <timestamp>true</timestamp>
-              <success>true</success>
-              <label>true</label>
-              <code>true</code>
-              <message>true</message>
-              <threadName>true</threadName>
-              <dataType>true</dataType>
-              <encoding>false</encoding>
-              <assertions>true</assertions>
-              <subresults>true</subresults>
-              <responseData>false</responseData>
-              <samplerData>false</samplerData>
-              <xml>true</xml>
-              <fieldNames>false</fieldNames>
-              <responseHeaders>false</responseHeaders>
-              <requestHeaders>false</requestHeaders>
-              <responseDataOnError>false</responseDataOnError>
-              <saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
-              <assertionsResultsToSave>0</assertionsResultsToSave>
-              <delimiter>,</delimiter>
-              <printMilliseconds>true</printMilliseconds>
-            </value>
-            <name>saveConfig</name>
-          </objProp>
-          <boolProp name="TestElement.enabled">true</boolProp>
-          <stringProp name="filename"></stringProp>
-          <boolProp name="ResultCollector.error_logging">false</boolProp>
-        </ResultCollector>
-        <hashTree/>
-      </hashTree>
-    </hashTree>
-  </hashTree>
-</jmeterTestPlan>
diff --git a/contrib/jcr-commands/xdocs/changes.xml b/contrib/jcr-commands/xdocs/changes.xml
deleted file mode 100644
index 1f5dadc..0000000
--- a/contrib/jcr-commands/xdocs/changes.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<document>
-    <properties>
-        <title>Changes</title>
-        <author email="edgarpoce@gmail.com">Edgar Poce</author>
-    </properties>
-    <body>
-        <release>
-            <action dev="edgarpoce" type="update"> javadocs and checkstyle
-                </action>
-            <action dev="edgarpoce" type="update"> naming and packaging
-                reviewed </action>
-            <action dev="edgarpoce" type="update"> now commands only read
-                parameters from the context because commands shouldn't have a
-                state of their own but use only the context. </action>
-            <action dev="edgarpoce" type="update"> i18n reorganized in one
-                single resources file </action>
-            <action dev="edgarpoce" type="add"> batch mode added </action>
-            <action dev="edgarpoce" type="add"> cover most of jcr operations
-                (versioning, locking, etc.) </action>
-            <action dev="edgarpoce" type="update"> commands simplified. Most
-                commands don't have default values. </action>
-            <action dev="edgarpoce" type="add"> logging added </action>
-            <action dev="edgarpoce" type="remove"> removed jmeter dependencies
-                </action>
-            <action dev="edgarpoce" type="add"> added command line interface
-                (o.a.j.chain.cli) </action>
-            <action dev="edgarpoce" type="add"> added CLI i18n support
-                </action>
-            <action dev="edgarpoce" type="add"> added info commands (ls,
-                cat, etc.) (o.a.j.chain.info) </action>
-            <action dev="edgarpoce" type="add"> added literal and context
-                attributes to commands </action>
-            <action dev="edgarpoce" type="add"> added testing </action>
-            <action dev="edgarpoce" type="add"> added javadocs </action>
-        </release>
-    </body>
-</document>
\ No newline at end of file
diff --git a/contrib/jcr-commands/xdocs/devguide.xml b/contrib/jcr-commands/xdocs/devguide.xml
deleted file mode 100644
index 8ad1289..0000000
--- a/contrib/jcr-commands/xdocs/devguide.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                       as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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>Developer guide</title>
-	</properties>
-	<body>
-		<section name="How does it work?">
-			<p>TODO</p>
-		</section>
-		<section name="Adding new commands">
-			<p>TODO</p>
-		</section>
-		<section name="Changing command syntax">
-			<p>TODO</p>
-		</section>		
-		<section name="Internationalization - i18n">
-			<p>TODO</p>
-		</section>
-	</body>
-</document>
\ No newline at end of file
diff --git a/contrib/jcr-commands/xdocs/index.xml b/contrib/jcr-commands/xdocs/index.xml
deleted file mode 100644
index 4fe9512..0000000
--- a/contrib/jcr-commands/xdocs/index.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                       as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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>Overview</title>
-    </properties>
-    <body>
-        <section name="Overview">
-            <p> This project contains a jcr command line client. It's backed by
-                a set of Apache Commons Chain commands that perform operations
-                on any JCR compliant repository. Moreover it includes a few
-                jackrabbit specific commands to cover some use cases that were
-                not included in the specification. <br/> For more information
-                about using Commons Chain please refer to
-                http://jakarta.apache.org/commons/chain/ </p>
-        </section>
-        <section name="Usage scenarios">
-            <ul>
-                <li>Perform jcr operations either in interactive or batch
-                    mode</li>
-                <li>Reuse the commands in applications through the Jakarta
-                    Commons Chains library</li>
-                <li>Benchmark any jcr compliant repository with jmeter-command
-                    plugin.</li>
-            </ul>
-        </section>
-    </body>
-</document>
\ No newline at end of file
diff --git a/contrib/jcr-commands/xdocs/navigation.xml b/contrib/jcr-commands/xdocs/navigation.xml
deleted file mode 100644
index fd02697..0000000
--- a/contrib/jcr-commands/xdocs/navigation.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                       as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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="jcr-commands">
- <title>Jackrabbit - jcr-commands</title>
-    <body>
-        <links>
-            <item name="Jackrabbit"
-                href="http://incubator.apache.org/jackrabbit"/>
-        </links>
-        <menu name="JCR commands">
-            <item name="Overview" href="index.html" />
-            <item name="User guide" href="userguide.html" />
-            <item name="Developer guide" href="devguide.html" />
-        </menu>
-    </body>
-</project>
\ No newline at end of file
diff --git a/contrib/jcr-commands/xdocs/userguide.xml b/contrib/jcr-commands/xdocs/userguide.xml
deleted file mode 100644
index 08a95dc..0000000
--- a/contrib/jcr-commands/xdocs/userguide.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                       as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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>User guide</title>
-  </properties>
-  <body>
-    <section name="Interactive mode">
-      <p>TODO</p>
-    </section>
-    <section name="Batch mode">
-      <p>TODO</p>
-    </section>
-    <section name="Benchmarcking jcr">
-      <p>TODO</p>
-    </section>
-  </body>
-</document>
\ No newline at end of file
diff --git a/contrib/jcr-ext/LICENSE.txt b/contrib/jcr-ext/LICENSE.txt
deleted file mode 100644
index d645695..0000000
--- a/contrib/jcr-ext/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/contrib/jcr-ext/project.properties b/contrib/jcr-ext/project.properties
deleted file mode 100644
index 51d844d..0000000
--- a/contrib/jcr-ext/project.properties
+++ /dev/null
@@ -1,8 +0,0 @@
-maven.javadoc.links=http://java.sun.com/j2se/1.4.2/docs/api/,http://www.day.com/maven/jsr170/javadocs/jcr-1.0/
-maven.repo.remote = http://www.ibiblio.org/maven/,http://www.day.com/maven/
-
-maven.compile.source=1.4
-maven.compile.target=1.4
-
-# Quick fix, see http://java2.5341.com/msg/93510.html
-maven.changelog.factory = org.apache.maven.svnlib.SvnChangeLogFactory 
diff --git a/contrib/jcr-ext/project.xml b/contrib/jcr-ext/project.xml
deleted file mode 100644
index 1dddab4..0000000
--- a/contrib/jcr-ext/project.xml
+++ /dev/null
@@ -1,97 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
-   Copyright 2005 The Apache Software Foundation or its licensors,
-                  as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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>
-  <groupId>org.apache.jackrabbit</groupId>
-  <artifactId>jcr-ext</artifactId>
-  <name>JCR extras</name>
-  <currentVersion>1.0-SNAPSHOT</currentVersion>
-  <inceptionYear>2004</inceptionYear>
-  <package>org.apache.jackrabbit.*</package>
-  <shortDescription>Utilities for JCR implementations</shortDescription>
-
-  <repository>
-    <connection>scm:svn:http://svn.apache.org/repos/asf/incubator/jackrabbit/trunk/contrib/jcr-ext</connection>
-    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/incubator/jackrabbit/trunk/contrib/jcr-ext</developerConnection>
-    <url>http://svn.apache.org/viewcvs</url>
-  </repository>
-
-  <developers>
-    <developer>
-      <name>Jukka Zitting</name>
-      <id>jukka</id>
-      <email>jz@yukatan.fi</email>
-      <organization>Yukatan</organization>
-      <roles>
-        <role>Java Developer</role>
-      </roles>
-      <timezone>+2</timezone>
-    </developer>
-  </developers>
-
-  <licenses>
-    <license>
-      <name>The Apache Software License, Version 2.0</name>
-      <url>/LICENSE.txt</url>
-      <distribution>repo</distribution>
-    </license>
-  </licenses>
-
-  <dependencies>
-    <dependency>
-      <groupId>jsr170</groupId>
-      <artifactId>jcr</artifactId>
-      <version>1.0</version>
-      <url>http://jcp.org/en/jsr/detail?id=170</url>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.jackrabbit</groupId>
-      <artifactId>jackrabbit-commons</artifactId>
-      <version>1.0-SNAPSHOT</version>
-    </dependency>
-    <dependency>
-      <groupId>xerces</groupId>
-      <artifactId>xercesImpl</artifactId>
-      <version>2.6.2</version>
-    </dependency>
-    <dependency>
-      <groupId>log4j</groupId>
-      <artifactId>log4j</artifactId>
-      <version>1.2.8</version>
-    </dependency>
-    <dependency>
-      <!-- Commons Codec is used for Base64 support -->
-      <groupId>commons-codec</groupId>
-      <artifactId>commons-codec</artifactId>
-      <version>1.3</version>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <sourceDirectory>src/java</sourceDirectory>
-    <unitTestSourceDirectory>src/test</unitTestSourceDirectory>
-    <unitTest>
-      <includes>
-        <include>**/*Test.java</include>
-      </includes>
-    </unitTest>
-  </build>
-
-</project>
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/BaseItem.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/BaseItem.java
deleted file mode 100644
index 02dccc2..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/BaseItem.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.base;
-
-import javax.jcr.Item;
-import javax.jcr.ItemNotFoundException;
-import javax.jcr.ItemVisitor;
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.UnsupportedRepositoryOperationException;
-
-/**
- * Item base class.
- */
-public class BaseItem implements Item {
-
-    /**
-     * Implemented by calling <code>getParent().getPath()</code> and
-     * appending <code>getName()</code> to the returned parent path.
-     * Returns the root path <code>/</code> if an
-     * {@link ItemNotFoundException ItemNotFoundException} is thrown by
-     * <code>getParent()</code> (indicating that this is the root node).
-     * {@inheritDoc}
-     */
-    public String getPath() throws RepositoryException {
-        try {
-            String path = getParent().getPath();
-            if (path.equals("/")) {
-                return path + getName();
-            } else {
-                return path + "/" + getName();
-            }
-        } catch (ItemNotFoundException e) {
-            return "/";
-        }
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public String getName() throws RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * Implemented by calling <code>getDepth()</code> and returning either
-     * this item, <code>getSession().getRootNode()</code>, or
-     * <code>getParent().getAncestor()</code>, or throwing an
-     * {@link ItemNotFoundException ItemNotFoundException} depending on the
-     * given depth.
-     * {@inheritDoc}
-     */
-    public Item getAncestor(int depth) throws RepositoryException {
-        int thisDepth = getDepth();
-        if (thisDepth == depth) {
-            return this;
-        } else if (depth == 0) {
-            return getSession().getRootNode();
-        } else if (depth > 0 && depth < thisDepth) {
-            return getParent().getAncestor(depth);
-        } else {
-            throw new ItemNotFoundException("Invalid ancestor depth " + depth);
-        }
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public Node getParent() throws RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * Implemented by calling <code>getParent().getDepth() + 1</code> and
-     * returning <code>0</code> if an
-     * {@link ItemNotFoundException ItemNotFoundException} is thrown by
-     * <code>getParent()</code> (indicating that this is the root node).
-     * {@inheritDoc}
-     */
-    public int getDepth() throws RepositoryException {
-        try {
-            return getParent().getDepth() + 1;
-        } catch (ItemNotFoundException e) {
-            return 0;
-        }
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public Session getSession() throws RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /** Always returns <code>false</code>. {@inheritDoc} */
-    public boolean isNode() {
-        return false;
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public boolean isNew() {
-        return false;
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public boolean isModified() {
-        return false;
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public boolean isSame(Item otherItem) {
-        try {
-            return getPath().equals(otherItem.getPath());
-        } catch (RepositoryException e) {
-            return false;
-        }
-    }
-
-    /** Does nothing. {@inheritDoc} */
-    public void accept(ItemVisitor visitor) throws RepositoryException {
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public void save() throws RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public void refresh(boolean keepChanges) throws RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public void remove() throws RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/BaseNamespaceRegistry.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/BaseNamespaceRegistry.java
deleted file mode 100644
index f7db923..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/BaseNamespaceRegistry.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.base;
-
-import javax.jcr.NamespaceException;
-import javax.jcr.NamespaceRegistry;
-import javax.jcr.RepositoryException;
-import javax.jcr.UnsupportedRepositoryOperationException;
-
-/**
- * NamespaceRegistry base class. The dummy namespace registry implemented
- * by this class only contains the builtin namespaces defined by the JSR 170
- * specification. Subclasses should override the methods of this class to
- * include other namespaces or to support namespace management.
- */
-public class BaseNamespaceRegistry implements NamespaceRegistry {
-
-    /** The default namespace prefixes. */
-    private static final String[] NAMESPACE_PREFIXES =
-        new String[] { "jcr", "nt", "mix", "xml", "" };
-
-    /** The default namespace URIs. */
-    private static final String[] NAMESPACE_URIS = new String[] {
-            "http://www.jcp.org/jcr/1.0",
-            "http://www.jcp.org/jcr/nt/1.0",
-            "http://www.jcp.org/jcr/mix/1.0",
-            "http://www.w3.org/XML/1998/namespace",
-            ""
-        };
-
-    /**
-     * Unsupported operation. Subclasses should override this method to
-     * allow namespace management.
-     *
-     * @param prefix namespace prefix
-     * @param uri namespace URI
-     * @see NamespaceRegistry#registerNamespace(String, String)
-     */
-    public void registerNamespace(String prefix, String uri)
-            throws RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * Unsupported operation. Subclasses should override this method to
-     * allow namespace management.
-     *
-     * @param prefix namespace prefix
-     * @see NamespaceRegistry#unregisterNamespace(String, String)
-     */
-    public void unregisterNamespace(String prefix) throws RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * Returns the builtin namespace prefixes defined by the JSR 170
-     * specification. Subclasses should override this method to return
-     * the actual registered namespace prefixes.
-     *
-     * @return builtin namespace prefixes
-     * @see NamespaceRegistry#getPrefixes()
-     */
-    public String[] getPrefixes() throws RepositoryException {
-        return (String[]) NAMESPACE_PREFIXES.clone();
-    }
-
-    /**
-     * Returns the builtin namespace URIs defined by the JSR 170
-     * specification. Subclasses should override this method to return
-     * the actual registered namespace URIs.
-     *
-     * @return builtin namespace prefixes
-     * @see NamespaceRegistry#getURIs()
-     */
-    public String[] getURIs() throws RepositoryException {
-        return (String[]) NAMESPACE_URIS.clone();
-    }
-
-    /**
-     * Returns the builtin namespace URI that is mapped to the given
-     * builtin namespace prefix as defined by the JSR 170 specification.
-     * Subclasses should override this method to support the actual
-     * registered namespaces.
-     *
-     * @param prefix namespace prefix
-     * @return namespace URI
-     * @throws NamespaceException if the namespace prefix was not found
-     * @see NamespaceRegistry#getURI(String)
-     */
-    public String getURI(String prefix) throws RepositoryException {
-        for (int i = 0; i < NAMESPACE_PREFIXES.length; i++) {
-            if (NAMESPACE_PREFIXES[i].equals(prefix)) {
-                return NAMESPACE_URIS[i];
-            }
-        }
-        throw new NamespaceException("Prefix " + prefix + " not found");
-    }
-
-    /**
-     * Returns the builtin namespace prefix that is mapped to the given
-     * builtin namespace URI as defined by the JSR 170 specification.
-     * Subclasses should override this method to support the actual
-     * registered namespaces.
-     *
-     * @param uri namespace URI
-     * @return namespace prefix
-     * @throws NamespaceException if the namespace URI was not found
-     * @see NamespaceRegistry#getPrefix(String)
-     */
-    public String getPrefix(String uri) throws RepositoryException {
-        for (int i = 0; i < NAMESPACE_URIS.length; i++) {
-            if (NAMESPACE_URIS[i].equals(uri)) {
-                return NAMESPACE_PREFIXES[i];
-            }
-        }
-        throw new NamespaceException("URI " + uri + " not found");
-    }
-
- }
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/BaseNode.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/BaseNode.java
deleted file mode 100644
index 01d34bb..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/BaseNode.java
+++ /dev/null
@@ -1,701 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.base;
-
-import java.io.InputStream;
-import java.util.Calendar;
-import java.util.LinkedList;
-import java.util.List;
-
-import javax.jcr.AccessDeniedException;
-import javax.jcr.InvalidItemStateException;
-import javax.jcr.Item;
-import javax.jcr.ItemExistsException;
-import javax.jcr.ItemNotFoundException;
-import javax.jcr.ItemVisitor;
-import javax.jcr.NamespaceException;
-import javax.jcr.NoSuchWorkspaceException;
-import javax.jcr.Node;
-import javax.jcr.NodeIterator;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.Property;
-import javax.jcr.PropertyIterator;
-import javax.jcr.PropertyType;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.UnsupportedRepositoryOperationException;
-import javax.jcr.Value;
-import javax.jcr.ValueFactory;
-import javax.jcr.ValueFormatException;
-import javax.jcr.lock.Lock;
-import javax.jcr.lock.LockException;
-import javax.jcr.nodetype.ConstraintViolationException;
-import javax.jcr.nodetype.NoSuchNodeTypeException;
-import javax.jcr.nodetype.NodeDefinition;
-import javax.jcr.nodetype.NodeType;
-import javax.jcr.nodetype.NodeTypeManager;
-import javax.jcr.version.Version;
-import javax.jcr.version.VersionException;
-import javax.jcr.version.VersionHistory;
-
-import org.apache.jackrabbit.iterator.ArrayNodeIterator;
-import org.apache.jackrabbit.iterator.ArrayPropertyIterator;
-import org.apache.jackrabbit.name.NamespaceResolver;
-import org.apache.jackrabbit.name.NoPrefixDeclaredException;
-import org.apache.jackrabbit.name.Path;
-import org.apache.jackrabbit.name.QName;
-import org.apache.jackrabbit.name.SessionNamespaceResolver;
-
-/**
- * Node base class.
- */
-public class BaseNode extends BaseItem implements Node {
-
-    /**
-     * Implemented by calling <code>super.getPath()</code>
-     * (see {@link BaseItem#getPath() BaseItem.getPath()} and appending
-     * <code>"[" + getIndex() + "]"</code> if
-     * <code>getDefinition().allowsSameNameSiblings()</code> returns
-     * <code>true</code>.
-     * {@inheritDoc}
-     */
-    public String getPath() throws RepositoryException {
-        if (getDefinition().allowsSameNameSiblings()) {
-            return super.getPath() + "[" + getIndex() + "]";
-        } else {
-            return super.getPath();
-        }
-    }
-
-    /**
-     * Implemented by calling <code>visitor.visit(this)</code>.
-     * {@inheritDoc}
-     */
-    public void accept(ItemVisitor visitor) throws RepositoryException {
-        visitor.visit(this);
-    }
-
-    /** Always returns <code>true</code>. {@inheritDoc} */
-    public boolean isNode() {
-        return true;
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public Node addNode(String relPath) throws RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * Implemented by calling
-     * <code>addNode(relPath).setProperty(prefix + ":primaryType", primaryNodeTypeName)</code>
-     * and returning the created node. The prefix is acquired by calling
-     * <code>getSession().getNamespacePrefix("http://www.jcp.org/jcr/1.0")</code>.
-     * {@inheritDoc}
-     */
-    public Node addNode(String relPath, String primaryNodeTypeName)
-            throws RepositoryException {
-        Node node = addNode(relPath);
-        String primaryType;
-        String prefix = getSession().getNamespacePrefix(QName.NS_JCR_URI);
-        if (prefix.length() > 0) {
-            primaryType = prefix + ":primaryType";
-        } else {
-            primaryType = "primaryType";
-        }
-        node.setProperty(primaryType, primaryNodeTypeName);
-        return node;
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public void orderBefore(String srcChildRelPath, String destChildRelPath)
-            throws RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * Implemented by calling <code>getProperty(name).setValue(value)</code>
-     * and returning the retrieved property. Adding new properties is not
-     * implemented.
-     * {@inheritDoc}
-     */
-    public Property setProperty(String name, Value value)
-            throws RepositoryException {
-        try {
-            Property property = getProperty(name);
-            property.setValue(value);
-            return property;
-        } catch (PathNotFoundException e) {
-            throw new UnsupportedRepositoryOperationException();
-        }
-    }
-
-    /**
-     * Converts a value to the given type. A new value instance is
-     * created using the current value factory
-     * (<code>getSession().getValueFactory()</code>) unless the given
-     * value already is of the given type or the given type is undefined.
-     * <p>
-     * This internal utility method is used by the property setters
-     * in this class.
-     *
-     * @param value original value
-     * @param type  value type
-     * @return converted value
-     * @throws ValueFormatException if the value can not be converted
-     * @throws RepositoryException  if another error occurs
-     */
-    private Value convert(Value value, int type)
-            throws ValueFormatException, RepositoryException {
-        if (type == PropertyType.UNDEFINED || value.getType() == type) {
-            return value;
-        } else {
-            ValueFactory factory = getSession().getValueFactory();
-            switch (type) {
-            case PropertyType.BINARY:
-                return factory.createValue(value.getStream());
-            case PropertyType.BOOLEAN:
-                return factory.createValue(value.getBoolean());
-            case PropertyType.DATE:
-                return factory.createValue(value.getDate());
-            case PropertyType.DOUBLE:
-                return factory.createValue(value.getDouble());
-            case PropertyType.LONG:
-                return factory.createValue(value.getLong());
-            case PropertyType.STRING:
-                return factory.createValue(value.getString());
-            default:
-                return factory.createValue(value.getString(), type);
-            }
-        }
-    }
-
-    /**
-     * Implemented by calling
-     * <code>setProperty(name, value)</code> after converting the given
-     * value to the given type.
-     * {@inheritDoc}
-     */
-    public Property setProperty(String name, Value value, int type)
-            throws ValueFormatException, VersionException, LockException,
-            RepositoryException {
-        return setProperty(name, convert(value, type));
-    }
-
-    /**
-     * Implemented by calling <code>getProperty(name).setValue(values)</code>
-     * and returning the retrieved property. Adding new properties is not
-     * implemented.
-     * {@inheritDoc}
-     */
-    public Property setProperty(String name, Value[] values)
-            throws ValueFormatException, VersionException, LockException,
-            RepositoryException {
-        try {
-            Property property = getProperty(name);
-            property.setValue(values);
-            return property;
-        } catch (PathNotFoundException e) {
-            throw new UnsupportedRepositoryOperationException();
-        }
-    }
-
-    /**
-     * Implemented by calling <code>setProperty(name, convertedValues)</code>
-     * with an array of values that were converted from the given values to
-     * the given type.
-     * {@inheritDoc}
-     */
-    public Property setProperty(String name, Value[] values, int type)
-            throws ValueFormatException, VersionException, LockException,
-            RepositoryException {
-        Value[] convertedValues = new Value[values.length];
-        for (int i = 0; i < values.length; i++) {
-            convertedValues[i] = convert(values[i], type);
-        }
-        return setProperty(name, convertedValues);
-    }
-
-    /**
-     * Implemented by calling <code>setProperty(name, stringValues)</code>
-     * with an array of values that were created from the given strings by
-     * <code>getSession().getValueFactory().createValue(values[i]))</code>.
-     * {@inheritDoc}
-     */
-    public Property setProperty(String name, String[] values)
-            throws ValueFormatException, VersionException, LockException,
-            RepositoryException {
-        ValueFactory factory = getSession().getValueFactory();
-        Value[] stringValues = new Value[values.length];
-        for (int i = 0; i < values.length; i++) {
-            stringValues[i] = factory.createValue(values[i]);
-        }
-        return setProperty(name, stringValues);
-    }
-
-    /**
-     * Implemented by calling <code>setProperty(name, stringValues, type)</code>
-     * with an array of Values that were created from the given strings by
-     * <code>getSession().getValueFactory().createValue(values[i]))</code>.
-     * {@inheritDoc}
-     */
-    public Property setProperty(String name, String[] values, int type)
-            throws ValueFormatException, VersionException, LockException,
-            RepositoryException {
-        ValueFactory factory = getSession().getValueFactory();
-        Value[] stringValues = new Value[values.length];
-        for (int i = 0; i < values.length; i++) {
-            stringValues[i] = factory.createValue(values[i]);
-        }
-        return setProperty(name, stringValues, type);
-    }
-
-    /**
-     * Implemented by calling
-     * <code>setProperty(name, getSession().getValueFactory().createValue(value)</code>.
-     * {@inheritDoc}
-     */
-    public Property setProperty(String name, String value)
-            throws ValueFormatException, VersionException, LockException,
-            RepositoryException {
-        ValueFactory factory = getSession().getValueFactory();
-        return setProperty(name, factory.createValue(value));
-    }
-
-    /**
-     * Implemented by calling
-     * <code>setProperty(name, getSession().getValueFactory().createValue(value, type)</code>.
-     * {@inheritDoc}
-     */
-    public Property setProperty(String name, String value, int type)
-            throws ValueFormatException, VersionException, LockException,
-            RepositoryException {
-        ValueFactory factory = getSession().getValueFactory();
-        return setProperty(name, factory.createValue(value, type));
-    }
-
-    /**
-     * Implemented by calling
-     * <code>setProperty(name, getSession().getValueFactory().createValue(value)</code>.
-     * {@inheritDoc}
-     */
-    public Property setProperty(String name, InputStream value)
-            throws ValueFormatException, VersionException, LockException,
-            RepositoryException {
-        ValueFactory factory = getSession().getValueFactory();
-        return setProperty(name, factory.createValue(value));
-    }
-
-    /**
-     * Implemented by calling
-     * <code>setProperty(name, getSession().getValueFactory().createValue(value)</code>.
-     * {@inheritDoc}
-     */
-    public Property setProperty(String name, boolean value)
-            throws ValueFormatException, VersionException, LockException,
-            RepositoryException {
-        ValueFactory factory = getSession().getValueFactory();
-        return setProperty(name, factory.createValue(value));
-    }
-
-    /**
-     * Implemented by calling
-     * <code>setProperty(name, getSession().getValueFactory().createValue(value)</code>.
-     * {@inheritDoc}
-     */
-    public Property setProperty(String name, double value)
-            throws ValueFormatException, VersionException, LockException,
-            RepositoryException {
-        ValueFactory factory = getSession().getValueFactory();
-        return setProperty(name, factory.createValue(value));
-    }
-
-    /**
-     * Implemented by calling
-     * <code>setProperty(name, getSession().getValueFactory().createValue(value)</code>.
-     * {@inheritDoc}
-     */
-    public Property setProperty(String name, long value)
-            throws ValueFormatException, VersionException, LockException,
-            RepositoryException {
-        ValueFactory factory = getSession().getValueFactory();
-        return setProperty(name, factory.createValue(value));
-    }
-
-    /**
-     * Implemented by calling
-     * <code>setProperty(name, getSession().getValueFactory().createValue(value)</code>.
-     * {@inheritDoc}
-     */
-    public Property setProperty(String name, Calendar value)
-            throws ValueFormatException, VersionException, LockException,
-            RepositoryException {
-        ValueFactory factory = getSession().getValueFactory();
-        return setProperty(name, factory.createValue(value));
-    }
-
-    /**
-     * Implemented by calling
-     * <code>setProperty(name, getSession().getValueFactory().createValue(value)</code>.
-     * {@inheritDoc}
-     */
-    public Property setProperty(String name, Node value)
-            throws ValueFormatException, VersionException, LockException,
-            RepositoryException {
-        ValueFactory factory = getSession().getValueFactory();
-        return setProperty(name, factory.createValue(value));
-    }
-
-    /**
-     * Implemented by calling <code>Path.resolve(this, relPath)</code> from
-     * the {@link Path Path} utility class. If the given path resolves to
-     * a property, then a {@link PathNotFoundException PathNotFoundException}
-     * is thrown.
-     * {@inheritDoc}
-     */
-    public Node getNode(String relPath) throws PathNotFoundException,
-            RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-        /* TODO: Path.resolve is no longer available
-        Item item = Path.resolve(this, relPath);
-        if (item.isNode()) {
-            return (Node) item;
-        } else {
-            throw new PathNotFoundException("Node not found: " + relPath);
-        }
-        */
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public NodeIterator getNodes() throws RepositoryException {
-        return new ArrayNodeIterator(new Node[0]);
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public NodeIterator getNodes(String namePattern) throws RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * Implemented by calling <code>Path.resolve(this, relPath)</code> from
-     * the {@link Path Path} utility class. If the given path resolves to
-     * a node, then a {@link PathNotFoundException PathNotFoundException}
-     * is thrown.
-     * {@inheritDoc}
-     */
-    public Property getProperty(String relPath) throws PathNotFoundException,
-            RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-        /* TODO: Path.resolve is no longer available
-        Item item = Path.resolve(this, relPath);
-        if (item.isNode()) {
-            throw new PathNotFoundException("Property not found: " + relPath);
-        } else {
-            return (Property) item;
-        }
-        */
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public PropertyIterator getProperties() throws RepositoryException {
-        return new ArrayPropertyIterator(new Property[0]);
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public PropertyIterator getProperties(String namePattern)
-            throws RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public Item getPrimaryItem() throws ItemNotFoundException,
-            RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public String getUUID() throws UnsupportedRepositoryOperationException,
-            RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /** Always returns <code>1</code>. {@inheritDoc} */
-    public int getIndex() throws RepositoryException {
-        return 1;
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public PropertyIterator getReferences() throws RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * Implemented by calling <code>getNode(relPath)</code> and returning
-     * <code>true</code> unless a
-     * {@link PathNotFoundException PathNotFoundException} is thrown.
-     * {@inheritDoc}
-     */
-    public boolean hasNode(String relPath) throws RepositoryException {
-        try {
-            getNode(relPath);
-            return true;
-        } catch (PathNotFoundException e) {
-            return false;
-        }
-    }
-
-    /**
-     * Implemented by calling <code>getProperty(relPath)</code> and returning
-     * <code>true</code> unless a
-     * {@link PathNotFoundException PathNotFoundException} is thrown.
-     * {@inheritDoc}
-     */
-    public boolean hasProperty(String relPath) throws RepositoryException {
-        try {
-            getProperty(relPath);
-            return true;
-        } catch (PathNotFoundException e) {
-            return false;
-        }
-    }
-
-    /**
-     * Implemented by calling <code>getNodes().hasNext()</code>.
-     * {@inheritDoc}
-     */
-    public boolean hasNodes() throws RepositoryException {
-        return getNodes().hasNext();
-    }
-
-    /**
-     * Implemented by calling <code>getProperties().hasNext()</code>.
-     * {@inheritDoc}
-     */
-    public boolean hasProperties() throws RepositoryException {
-        return getProperties().hasNext();
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public NodeType getPrimaryNodeType() throws RepositoryException {
-        try {
-            Session session = getSession();
-            NamespaceResolver resolver = new SessionNamespaceResolver(session);
-            Property property = getProperty(QName.JCR_PRIMARYTYPE.toJCRName(resolver));
-            NodeTypeManager manager = session.getWorkspace().getNodeTypeManager();
-            return manager.getNodeType(property.getString());
-        } catch (NoPrefixDeclaredException e) {
-            throw new NamespaceException("jcr:primaryType", e);
-        }
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public NodeType[] getMixinNodeTypes() throws RepositoryException {
-        List types = new LinkedList();
-
-        Session session = getSession();
-        NamespaceResolver resolver = new SessionNamespaceResolver(session);
-        try {
-            Property property = getProperty(QName.JCR_MIXINTYPES.toJCRName(resolver));
-            Value[] values = property.getValues();
-            NodeTypeManager manager = session.getWorkspace().getNodeTypeManager();
-          for (int i = 0; i < values.length; i++) {
-                types.add(manager.getNodeType(values[i].getString()));
-            }
-        } catch (NoPrefixDeclaredException e) {
-            throw new NamespaceException("jcr:mixinTypes", e);
-        } catch (PathNotFoundException e) {
-            // jcr:mixinTypes not found, fall through with no mixin types
-        }
-
-        return (NodeType[]) types.toArray(new NodeType[types.size()]);
-    }
-
-    /**
-     * Implemented by calling <code>type.isNodeType(nodeTypeName)</code>
-     * for the primary type and all mixin types of this node. Returns
-     * <code>true</code> if any of these calls return <code>true</code>.
-     * Returns <code>false</code> otherwise.
-     * {@inheritDoc}
-     */
-    public boolean isNodeType(String nodeTypeName) throws RepositoryException {
-        if (getPrimaryNodeType().isNodeType(nodeTypeName)) {
-            return true;
-        } else {
-            NodeType[] types = getMixinNodeTypes();
-            for (int i = 0; i < types.length; i++) {
-                if (types[i].isNodeType(nodeTypeName)) {
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public void addMixin(String mixinName) throws NoSuchNodeTypeException,
-            VersionException, ConstraintViolationException, LockException,
-            RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public void removeMixin(String mixinName) throws NoSuchNodeTypeException,
-            VersionException, ConstraintViolationException, LockException,
-            RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public boolean canAddMixin(String mixinName) throws RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public NodeDefinition getDefinition() throws RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public Version checkin() throws VersionException,
-            UnsupportedRepositoryOperationException, InvalidItemStateException,
-            LockException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public void checkout() throws UnsupportedRepositoryOperationException,
-            LockException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public void doneMerge(Version version) throws VersionException,
-            InvalidItemStateException, UnsupportedRepositoryOperationException,
-            RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public void cancelMerge(Version version) throws VersionException,
-            InvalidItemStateException, UnsupportedRepositoryOperationException,
-            RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public void update(String srcWorkspaceName)
-            throws NoSuchWorkspaceException, AccessDeniedException,
-            LockException, InvalidItemStateException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public NodeIterator merge(String srcWorkspace, boolean bestEffort)
-            throws UnsupportedRepositoryOperationException,
-            NoSuchWorkspaceException, AccessDeniedException, VersionException,
-            LockException, InvalidItemStateException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public String getCorrespondingNodePath(String workspaceName)
-            throws ItemNotFoundException, NoSuchWorkspaceException,
-            AccessDeniedException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public boolean isCheckedOut() throws RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public void restore(String versionName, boolean removeExisting)
-            throws VersionException, ItemExistsException,
-            UnsupportedRepositoryOperationException, LockException,
-            InvalidItemStateException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public void restore(Version version, boolean removeExisting)
-            throws VersionException, ItemExistsException,
-            UnsupportedRepositoryOperationException, LockException,
-            RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public void restore(Version version, String relPath, boolean removeExisting)
-            throws PathNotFoundException, ItemExistsException,
-            VersionException, ConstraintViolationException,
-            UnsupportedRepositoryOperationException, LockException,
-            InvalidItemStateException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public void restoreByLabel(String versionLabel, boolean removeExisting)
-            throws VersionException, ItemExistsException,
-            UnsupportedRepositoryOperationException, LockException,
-            InvalidItemStateException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public VersionHistory getVersionHistory()
-            throws UnsupportedRepositoryOperationException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public Version getBaseVersion()
-            throws UnsupportedRepositoryOperationException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public Lock lock(boolean isDeep, boolean isSessionScoped)
-            throws UnsupportedRepositoryOperationException, LockException,
-            AccessDeniedException, InvalidItemStateException,
-            RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public Lock getLock() throws UnsupportedRepositoryOperationException,
-            LockException, AccessDeniedException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public void unlock() throws UnsupportedRepositoryOperationException,
-            LockException, AccessDeniedException, InvalidItemStateException,
-            RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public boolean holdsLock() throws RepositoryException {
-        return false;
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public boolean isLocked() throws RepositoryException {
-        return false;
-    }
-
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/BaseProperty.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/BaseProperty.java
deleted file mode 100644
index 6c150ec..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/BaseProperty.java
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.base;
-
-import java.io.InputStream;
-import java.util.Calendar;
-
-import javax.jcr.ItemVisitor;
-import javax.jcr.Node;
-import javax.jcr.Property;
-import javax.jcr.PropertyType;
-import javax.jcr.RepositoryException;
-import javax.jcr.UnsupportedRepositoryOperationException;
-import javax.jcr.Value;
-import javax.jcr.ValueFactory;
-import javax.jcr.ValueFormatException;
-import javax.jcr.lock.LockException;
-import javax.jcr.nodetype.PropertyDefinition;
-import javax.jcr.version.VersionException;
-
-/**
- * Property base class.
- */
-public class BaseProperty extends BaseItem implements Property {
-
-    /** Protected constructor. This class is only useful when extended. */
-    protected BaseProperty() {
-    }
-
-    /**
-     * Implemented by calling <code>visitor.visit(this)</code>.
-     * {@inheritDoc}
-     */
-    public void accept(ItemVisitor visitor) throws RepositoryException {
-        visitor.visit(this);
-    }
-
-    /** Always returns <code>false</code>. {@inheritDoc} */
-    public boolean isNode() {
-        return false;
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public void setValue(Value value) throws ValueFormatException,
-            VersionException, LockException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public void setValue(Value[] values) throws ValueFormatException,
-            VersionException, LockException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * Implemented by calling
-     * <code>setValue(getSession().getValueFactory().createValue(value))</code>.
-     * {@inheritDoc}
-     */
-    public void setValue(String value) throws ValueFormatException,
-            VersionException, LockException, RepositoryException {
-        setValue(getSession().getValueFactory().createValue(value));
-    }
-
-    /**
-     * Implemented by calling <code>setValue(stringValues)</code> with
-     * an array of Values that were created from the given strings by
-     * <code>getSession().getValueFactory().createValue(values[i]))</code>.
-     * {@inheritDoc}
-     */
-    public void setValue(String[] values) throws ValueFormatException,
-            VersionException, LockException, RepositoryException {
-        ValueFactory factory = getSession().getValueFactory();
-        Value[] stringValues = new Value[values.length];
-        for (int i = 0; i < values.length; i++) {
-            stringValues[i] = factory.createValue(values[i]);
-        }
-        setValue(stringValues);
-    }
-
-    /**
-     * Implemented by calling
-     * <code>setValue(getSession().getValueFactory().createValue(value))</code>.
-     * {@inheritDoc}
-     */
-    public void setValue(InputStream value) throws ValueFormatException,
-            VersionException, LockException, RepositoryException {
-        setValue(getSession().getValueFactory().createValue(value));
-    }
-
-    /**
-     * Implemented by calling
-     * <code>setValue(getSession().getValueFactory().createValue(value))</code>.
-     * {@inheritDoc}
-     */
-    public void setValue(long value) throws ValueFormatException,
-            VersionException, LockException, RepositoryException {
-        setValue(getSession().getValueFactory().createValue(value));
-    }
-
-    /**
-     * Implemented by calling
-     * <code>setValue(getSession().getValueFactory().createValue(value))</code>.
-     * {@inheritDoc}
-     */
-    public void setValue(double value) throws ValueFormatException,
-            VersionException, LockException, RepositoryException {
-        setValue(getSession().getValueFactory().createValue(value));
-    }
-
-    /**
-     * Implemented by calling
-     * <code>setValue(getSession().getValueFactory().createValue(value))</code>.
-     * {@inheritDoc}
-     */
-    public void setValue(Calendar value) throws ValueFormatException,
-            VersionException, LockException, RepositoryException {
-        setValue(getSession().getValueFactory().createValue(value));
-    }
-
-    /**
-     * Implemented by calling
-     * <code>setValue(getSession().getValueFactory().createValue(value))</code>.
-     * {@inheritDoc}
-     */
-    public void setValue(boolean value) throws ValueFormatException,
-            VersionException, LockException, RepositoryException {
-        setValue(getSession().getValueFactory().createValue(value));
-    }
-
-    /**
-     * Implemented by calling
-     * <code>setValue(getSession().getValueFactory().createValue(value))</code>.
-     * {@inheritDoc}
-     */
-    public void setValue(Node value) throws ValueFormatException,
-            VersionException, LockException, RepositoryException {
-        setValue(getSession().getValueFactory().createValue(value));
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public Value getValue() throws ValueFormatException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public Value[] getValues() throws ValueFormatException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * Implemented by calling <code>getValue().getString()</code>.
-     * {@inheritDoc}
-     */
-    public String getString() throws ValueFormatException, RepositoryException {
-        return getValue().getString();
-    }
-
-    /**
-     * Implemented by calling <code>getValue().getStream()</code>.
-     * {@inheritDoc}
-     */
-    public InputStream getStream() throws ValueFormatException,
-            RepositoryException {
-        return getValue().getStream();
-    }
-
-    /**
-     * Implemented by calling <code>getValue().getLong()</code>.
-     * {@inheritDoc}
-     */
-    public long getLong() throws ValueFormatException, RepositoryException {
-        return getValue().getLong();
-    }
-
-    /**
-     * Implemented by calling <code>getValue().getDouble()</code>.
-     * {@inheritDoc}
-     */
-    public double getDouble() throws ValueFormatException, RepositoryException {
-        return getValue().getDouble();
-    }
-
-    /**
-     * Implemented by calling <code>getValue().getDate()</code>.
-     * {@inheritDoc}
-     */
-    public Calendar getDate() throws ValueFormatException, RepositoryException {
-        return getValue().getDate();
-    }
-
-    /**
-     * Implemented by calling <code>getValue().getBoolean()</code>.
-     * {@inheritDoc}
-     */
-    public boolean getBoolean() throws ValueFormatException,
-            RepositoryException {
-        return getValue().getBoolean();
-    }
-
-    /**
-     * Implemented by calling
-     * <code>getSession().getNodeByUUID(getString())</code>.
-     * {@inheritDoc}
-     */
-    public Node getNode() throws ValueFormatException, RepositoryException {
-        return getSession().getNodeByUUID(getString());
-    }
-
-    /**
-     * Implemented by calling <code>getType()</code> and returning
-     * <code>-1</code> if type is binary or <code>getString().length()</code>
-     * otherwise.
-     * {@inheritDoc}
-     */
-    public long getLength() throws ValueFormatException, RepositoryException {
-        if (getType() == PropertyType.BINARY) {
-            return -1;
-        } else {
-            return getString().length();
-        }
-    }
-
-    /** {@inheritDoc} */
-    public long[] getLengths() throws ValueFormatException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public PropertyDefinition getDefinition() throws RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * Implemented by calling <code>getValue().getType()</code>.
-     * {@inheritDoc}
-     */
-    public int getType() throws RepositoryException {
-        return getValue().getType();
-    }
-
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/BaseRepository.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/BaseRepository.java
deleted file mode 100644
index da2d809..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/BaseRepository.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.base;
-
-import javax.jcr.Credentials;
-import javax.jcr.LoginException;
-import javax.jcr.Repository;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-
-/**
- * Repository base class. The dummy repository implemented by this class
- * contains no descriptors and forwards all login requests to the
- * canonical {@link #login(Credentials, String)} method.
- */
-public class BaseRepository implements Repository {
-
-    /**
-     * Returns an empty to indicate that no descriptor keys are available.
-     * Subclasses should override this method to return the available
-     * descriptor keys.
-     *
-     * @return empty array
-     * @see Repository#getDescriptorKeys()
-     */
-    public String[] getDescriptorKeys() {
-        return new String[0];
-    }
-
-    /**
-     * Returns <code>null</code> to indicate that the requested descriptor
-     * does not exist. Subclasses should override this method to return the
-     * actual repository descriptor values.
-     *
-     * @param key descriptor key
-     * @return always <code>null</code>
-     * @see Repository#getDescriptor(String)
-     */
-    public String getDescriptor(String key) {
-        return null;
-    }
-
-    /**
-     * Throws a {@link LoginException} to indicate that logins are
-     * not available. Subclasses should override this method to allow
-     * repository logins. Note that by default the other login methods
-     * invoke this method, so all the login methods can be made to work
-     * by overriding just this method. 
-     *
-     * @param credentials login credentials
-     * @param workspaceName workspace name
-     * @return nothing (throws a LoginException)
-     * @see Repository#login(Credentials, String)
-     */
-    public Session login(Credentials credentials, String workspaceName)
-            throws RepositoryException {
-        throw new LoginException();
-    }
-
-    /**
-     * Implemented by calling {@link #login(Credentials, String)} with a
-     * <code>null</code> workspace name. This default implementation
-     * follows the JCR specification, so there should be little
-     * reason for subclasses to override this method.
-     *
-     * @param credentials login credentials
-     * @return repository session
-     * @see Repository#login(Credentials)
-     */
-    public Session login(Credentials credentials) throws RepositoryException {
-        return login(credentials, null);
-    }
-
-    /**
-     * Implemented by calling {@link #login(Credentials, String)} with
-     * <code>null</code> credentials. This default implementation
-     * follows the JCR specification, so there should be little
-     * reason for subclasses to override this method.
-     *
-     * @param workspaceName workspace name
-     * @return repository session
-     * @see Repository#login(String)
-     */
-    public Session login(String workspaceName) throws RepositoryException {
-        return login(null, workspaceName);
-    }
-
-    /**
-     * Implemented by calling {@link #login(Credentials, String)} with a
-     * <code>null</code> workspace name and <code>null</code> credentials.
-     * This default implementation follows the JCR specification, so there
-     * should be little reason for subclasses to override this method.
-     *
-     * @return repository session
-     * @see Repository#login()
-     */
-    public Session login() throws RepositoryException {
-        return login(null, null);
-    }
-
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/BaseSession.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/BaseSession.java
deleted file mode 100644
index 59de5a8..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/BaseSession.java
+++ /dev/null
@@ -1,612 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.base;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.security.AccessControlException;
-import java.util.regex.Pattern;
-
-import javax.jcr.Credentials;
-import javax.jcr.Item;
-import javax.jcr.ItemNotFoundException;
-import javax.jcr.ItemVisitor;
-import javax.jcr.NamespaceException;
-import javax.jcr.Node;
-import javax.jcr.NodeIterator;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.Repository;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.UnsupportedRepositoryOperationException;
-import javax.jcr.ValueFactory;
-import javax.jcr.Workspace;
-import javax.jcr.query.Query;
-import javax.jcr.query.QueryResult;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.sax.SAXResult;
-import javax.xml.transform.sax.SAXTransformerFactory;
-import javax.xml.transform.sax.TransformerHandler;
-import javax.xml.transform.stream.StreamResult;
-import javax.xml.transform.stream.StreamSource;
-
-import org.apache.jackrabbit.name.QName;
-import org.apache.jackrabbit.xml.DocumentViewExportVisitor;
-import org.apache.jackrabbit.xml.SystemViewExportVisitor;
-import org.xml.sax.ContentHandler;
-import org.xml.sax.SAXException;
-
-/**
- * Session base class. The dummy session implemented by this class
- * attempts to act like a read-only anonymous session. Subclasses must
- * override at least the {@link #getRepository() getRepository()},
- * {@link #getWorkspace() getWorkspace()},
- * {@link #getRootNode() getRootNode()}, and
- * {@link #getValueFactory() getValueFactory()} methods to make this class
- * somewhat useful. See the method javadocs for full details of which
- * methods to override for each required feature.
- */
-public class BaseSession implements Session {
-
-    /** The pattern used to match UUID strings. */
-    private static final Pattern UUID_PATTERN = Pattern.compile(
-            "[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}");
-
-    /**
-     * Unsupported operation. Subclasses should override this method to
-     * return the repository to which this session is attached.
-     * Overiding this method is required for the default implementation of the
-     * {@link #impersonate(Credentials) impersonate(Credentials)} method.
-     *
-     * @return nothing, throws a {@link UnsupportedOperationException}
-     * @see Session#getRepository()
-     */
-    public Repository getRepository() {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Returns <code>null</code> to indicate that this session is associated
-     * with the "anonymous" user. Subclasses should override this method to
-     * return the actual user identity associated with the session.
-     *
-     * @return always <code>null</code>
-     * @see Session#getUserID()
-     */
-    public String getUserID() {
-        return null;
-    }
-
-    /**
-     * Returns <code>null</code> to indicate that the named attribute does
-     * not exist. Subclasses should override this method to return the
-     * available attribute values.
-     *
-     * @param name attribute name
-     * @return always <code>null</code>
-     * @see Session#getAttribute(String)
-     */
-    public Object getAttribute(String name) {
-        return null;
-    }
-
-    /**
-     * Returns an empty string array to indicate that no attributes are
-     * available. Subclasses should override this method to return the
-     * available attribute names.
-     *
-     * @return empty array
-     * @see Session#getAttributeNames()
-     */
-    public String[] getAttributeNames() {
-        return new String[0];
-    }
-
-    /**
-     * Unsupported operation. Subclasses should override this method to
-     * return the workspace attached to this session. Overiding this method
-     * is required for the default implementations of the
-     * {@link #impersonate(Credentials) impersonate(Credentials)} and
-     * {@link #getNodeByUUID(String) getNodeByUUID(String)} methods.
-     *
-     * @return nothing, throws a {@link UnsupportedOperationException}
-     * @see Session#getWorkspace()
-     */
-    public Workspace getWorkspace() {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Implemented by calling the
-     * {@link Repository#login(Credentials, String) login(Credentials, String)}
-     * method of the {@link Repository} instance returned by the
-     * {@link #getRepository() getRepository()} method. The method is invoked
-     * with the given login credentials and the workspace name returned by
-     * the {@link Workspace#getName() getName()} method of the
-     * {@link Workspace} instance returned by the
-     * {@link #getWorkspace() getWorkspace()} method.
-     * <p>
-     * There should normally be little need for subclasses to override this
-     * method unless the underlying repository implementation suggests a
-     * more straightforward implementation.
-     *
-     * @param credentials login credentials
-     * @return impersonated session
-     * @see Session#impersonate(Credentials)
-     */
-    public Session impersonate(Credentials credentials)
-            throws RepositoryException {
-        return getRepository().login(credentials, getWorkspace().getName());
-    }
-
-    /**
-     * Unsupported operation. Subclasses should override this method to
-     * return the root node in the workspace attached to this session.
-     * Overriding this method is required for the default implementation of
-     * the {@link #getItem(String) getItem(String)} method.
-     *
-     * @return nothing, throws a {@link UnsupportedRepositoryOperationException}
-     * @see Session#getRootNode()
-     */
-    public Node getRootNode() throws RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * Implemented by making the XPath query <code>//*[@jcr:uuid='...']</code>
-     * and returning the node that matches the query. Subclasses may want to
-     * override this method if an UUID index or another more efficient
-     * lookup mechanism can be used directly.
-     *
-     * @return the identified node
-     * @throws ItemNotFoundException if the identified node does not exist
-     * @see Session#getNodeByUUID(String)
-     */
-    public Node getNodeByUUID(String uuid) throws RepositoryException {
-        if (UUID_PATTERN.matcher(uuid).matches()) {
-            String xpath;
-            String jcr = getNamespacePrefix(QName.NS_JCR_URI);
-            if (jcr.length() > 0) {
-                xpath = "//*[@" + jcr + ":uuid='" + uuid + "']";
-            } else {
-                xpath = "//*[@uuid='" + uuid + "']";
-            }
-            Query query =
-                getWorkspace().getQueryManager().createQuery(Query.XPATH, xpath);
-            QueryResult result = query.execute();
-            NodeIterator nodes = result.getNodes();
-            if (nodes.hasNext()) {
-                return nodes.nextNode();
-            }
-        }
-        throw new ItemNotFoundException(uuid);
-    }
-
-    /**
-     * Implemented by invoking the {@link Node#getNode(String) getNode(String)}
-     * (or {@link Node#getProperty(String) getProperty(String)} if getNode
-     * fails) method on the root node returned by the
-     * {@link #getRootNode() getRootNode()} method. The path given to the
-     * getNode or getProperty method is the given path without the leading "/".
-     * If the given path is "/" then the root node is returned directly.
-     * <p>
-     * Subclasses should not normally need to override this method as long as
-     * the referenced methods have been implemented. For performance reasons
-     * it might make sense to override this method because this implementation
-     * can cause the item path to be traversed twice.
-     *
-     * @param absPath absolute item path
-     * @return identified item
-     * @see Session#getItem(String)
-     */
-    public Item getItem(String absPath) throws PathNotFoundException,
-            RepositoryException {
-        if (absPath == null || !absPath.startsWith("/")) {
-            throw new PathNotFoundException("Invalid item path: " + absPath);
-        }
-
-        Node node = getRootNode();
-        if (absPath.equals("/")) {
-            return node;
-        } else {
-            String relPath = absPath.substring(1);
-            try {
-                return node.getNode(relPath);
-            } catch (PathNotFoundException e) {
-                return node.getProperty(relPath);
-            }
-        }
-    }
-
-    /**
-     * Implemented by trying to retrieve the identified item using the
-     * {@link #getItem(String) getItem(String)} method. Subclasses may
-     * want to override this method for performance as there is no real
-     * need for instantiating the identified item.
-     *
-     * @param absPath absolute item path
-     * @return <code>true</code> if the identified item exists,
-     *         <code>false</code> otherwise
-     * @see Session#itemExists(String)
-     */
-    public boolean itemExists(String absPath) throws RepositoryException {
-        try {
-            getItem(absPath);
-            return true;
-        } catch (PathNotFoundException e) {
-            return false;
-        }
-    }
-
-    /**
-     * Unsupported operation. Subclasses should override this method to
-     * make it possible to move and rename items.
-     *
-     * @param srcAbsPath source item path
-     * @param destAbsPath destination item path 
-     * @see Session#move(String, String)
-     */
-    public void move(String srcAbsPath, String destAbsPath)
-            throws RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * Unsupported operation. Subclasses should override this method to
-     * allow modifications to the content repository.
-     *
-     * @see Session#save()
-     */
-    public void save() throws RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * Does nothing. Subclasses should override this method to correctly
-     * manage the transient state and underlying repository changes. 
-     *
-     * @param keepChanges whether to keep transient changes (ignored)
-     * @see Session#refresh(boolean)
-     */
-    public void refresh(boolean keepChanges) throws RepositoryException {
-    }
-
-    /**
-     * Returns <code>false</code> to indicate that there are no pending
-     * changes. Subclasses should override this method to correctly manage
-     * the transient state.
-     *
-     * @return always <code>false</code>
-     * @see Session#hasPendingChanges()
-     */
-    public boolean hasPendingChanges() throws RepositoryException {
-        return false;
-    }
-
-    /**
-     * Throws an {@link AccessControlException} for anything else than
-     * <code>read</code> actions to indicate that only read access is
-     * permitted. Subclasses should override this method to correctly
-     * report access controls settings.
-     *
-     * @param absPath item path
-     * @param actions action strings
-     * @throws AccessControlException if other than <code>read</code> actions
-     *                                are requested
-     * @see Session#checkPermission(String, String)
-     */
-    public void checkPermission(String absPath, String actions)
-            throws AccessControlException {
-        String[] parts = actions.split(",");
-        for (int i = 0; i < parts.length; i++) {
-            if (!"read".equals(parts[i])) {
-                throw new AccessControlException(
-                        "No " + actions + " permission for " + absPath);
-            }
-        }
-    }
-
-    /**
-     * Unsupported operation. Subclasses should override this method to
-     * support XML imports. Overriding this method is required for the
-     * default implementation of the
-     * {@link #importXML(String, InputStream, int) importXML(String, InputStream, int)}
-     * method.
-     *
-     * @param parentAbsPath path of the parent node
-     * @param uuidBehaviour UUID behaviour flag
-     * @return nothing, throws an {@link UnsupportedRepositoryOperationException}
-     * @see Session#getImportContentHandler(String, int)
-     */
-    public ContentHandler getImportContentHandler(
-            String parentAbsPath, int uuidBehaviour)
-            throws RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * Parses the XML input stream and feeds the SAX events to the content
-     * handler returned by the
-     * {@link #getImportContentHandler(String, int) getImportContentHandler(String, int)}
-     * method.
-     *
-     * @param parentAbsPath path of the parent node
-     * @param in XML input stream
-     * @param uuidBehaviour UUID behaviour flag
-     * @see Session#importXML(String, InputStream, int)
-     */
-    public void importXML(
-            String parentAbsPath, InputStream in, int uuidBehaviour)
-            throws IOException, RepositoryException {
-        try {
-            ContentHandler handler =
-                getImportContentHandler(parentAbsPath, uuidBehaviour);
-
-            TransformerFactory factory = TransformerFactory.newInstance();
-            Transformer transformer = factory.newTransformer();
-            transformer.transform(new StreamSource(in), new SAXResult(handler));
-        } catch (TransformerConfigurationException e) {
-            throw new IOException(
-                    "Unable to configure a SAX transformer: " + e.getMessage());
-        } catch (TransformerException e) {
-            throw new IOException(
-                    "Unable to deserialize a SAX stream: " + e.getMessage());
-        }
-    }
-
-    /**
-     * Creates a {@link SystemViewExportVisitor} instance and passes it
-     * to the node identified by the given path. The export visitor traverses
-     * the entire content tree and generates the system view SAX events for
-     * the given content handler. Subclasses may override this method for
-     * better performance or custom processing, but the default implementation
-     * should be good enough for general use.
-     * 
-     * @param absPath node path
-     * @param contentHandler SAX content handler
-     * @param skipBinary binary property skip flag
-     * @param noRecurse subtree recursion flag
-     * @see Session#exportSystemView(String, ContentHandler, boolean, boolean)
-     */
-    public void exportSystemView(
-            String absPath, ContentHandler contentHandler,
-            boolean skipBinary, boolean noRecurse)
-            throws SAXException, RepositoryException {
-        Item item = getItem(absPath);
-        if (item.isNode()) {
-            ItemVisitor visitor = new SystemViewExportVisitor(
-                    contentHandler, skipBinary, noRecurse); 
-            item.accept(visitor);
-        } else {
-            throw new PathNotFoundException("Invalid node path: " + absPath);
-        }
-    }
-
-    /**
-     * Creates a SAX serializer for the given output stream and passes it to the
-     * {@link #exportSystemView(String, ContentHandler, boolean, boolean) exportSystemView(String, ContentHandler, boolean, boolean)}
-     * method along with the other parameters.
-     *
-     * @param absPath node path
-     * @param out XML output stream
-     * @param skipBinary binary property skip flag
-     * @param noRecurse subtree recursion flag
-     * @see Session#exportSystemView(String, OutputStream, boolean, boolean)
-     */
-    public void exportSystemView(
-            String absPath, OutputStream out,
-            boolean skipBinary, boolean noRecurse)
-            throws IOException, RepositoryException {
-        try {
-            SAXTransformerFactory factory = (SAXTransformerFactory)
-                SAXTransformerFactory.newInstance();
-            TransformerHandler handler = factory.newTransformerHandler();
-            handler.setResult(new StreamResult(out));
-            exportSystemView(absPath, handler, skipBinary, noRecurse);
-        } catch (TransformerConfigurationException e) {
-            throw new IOException(
-                    "Unable to configure a SAX transformer: " + e.getMessage());
-        } catch (SAXException e) {
-            throw new IOException(
-                    "Unable to serialize a SAX stream: " + e.getMessage());
-        }
-    }
-
-    /**
-     * Creates a {@link DocumentViewExportVisitor} instance and passes it
-     * to the node identified by the given path. The export visitor traverses
-     * the entire content tree and generates the document view SAX events for
-     * the given content handler. Subclasses may override this method for
-     * better performance or custom processing, but the default implementation
-     * should be good enough for general use.
-     * 
-     * @param absPath node path
-     * @param contentHandler SAX content handler
-     * @param skipBinary binary property skip flag
-     * @param noRecurse subtree recursion flag
-     * @see Session#exportDocumentView(String, ContentHandler, boolean, boolean)
-     */
-    public void exportDocumentView(
-            String absPath, ContentHandler contentHandler,
-            boolean skipBinary, boolean noRecurse)
-            throws SAXException, RepositoryException {
-        Item item = getItem(absPath);
-        if (item.isNode()) {
-            ItemVisitor visitor = new DocumentViewExportVisitor(
-                    contentHandler, skipBinary, noRecurse); 
-            item.accept(visitor);
-        } else {
-            throw new PathNotFoundException("Invalid node path: " + absPath);
-        }
-    }
-
-    /**
-     * Creates a SAX serializer for the given output stream and passes it to the
-     * {@link #exportDocumentView(String, ContentHandler, boolean, boolean) exportDocumentView(String, ContentHandler, boolean, boolean)}
-     * method along with the other parameters.
-     *
-     * @param absPath node path
-     * @param out XML output stream
-     * @param skipBinary binary property skip flag
-     * @param noRecurse subtree recursion flag
-     * @see Session#exportDocumentView(String, OutputStream, boolean, boolean)
-     */
-    public void exportDocumentView(
-            String absPath, OutputStream out,
-            boolean skipBinary, boolean noRecurse)
-            throws IOException, RepositoryException {
-        try {
-            SAXTransformerFactory factory = (SAXTransformerFactory)
-                SAXTransformerFactory.newInstance();
-            TransformerHandler handler = factory.newTransformerHandler();
-            handler.setResult(new StreamResult(out));
-            exportDocumentView(absPath, handler, skipBinary, noRecurse);
-        } catch (TransformerConfigurationException e) {
-            throw new IOException(
-                    "Unable to configure a SAX transformer: " + e.getMessage());
-        } catch (SAXException e) {
-            throw new IOException(
-                    "Unable to serialize a SAX stream: " + e.getMessage());
-        }
-    }
-
-    /**
-     * Unsupported operation. Subclasses should override this method to
-     * support namespace remapping.
-     *
-     * @param prefix namespace prefix
-     * @param uri namespace uri
-     * @see Session#setNamespacePrefix(String, String)
-     */
-    public void setNamespacePrefix(String prefix, String uri)
-            throws NamespaceException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * Returns the namespace prefixes registered in the
-     * {@link javax.jcr.NamespaceRegistry} associated with the workspace of
-     * this session. Subclasses should override this method to support
-     * namespace remapping.
-     *
-     * @return namespace prefixes
-     * @see Session#getNamespacePrefixes()
-     */
-    public String[] getNamespacePrefixes() throws RepositoryException {
-        return getWorkspace().getNamespaceRegistry().getPrefixes();
-    }
-
-    /**
-     * Returns the namespace URI registered for the given prefix in the
-     * {@link javax.jcr.NamespaceRegistry} associated with the workspace of
-     * this session. Subclasses should override this method to support
-     * namespace remapping.
-     *
-     * @param prefix namespace prefix
-     * @return namespace URI
-     * @see Session#getNamespaceURI(String)
-     */
-    public String getNamespaceURI(String prefix) throws RepositoryException {
-        return getWorkspace().getNamespaceRegistry().getURI(prefix);
-    }
-
-    /**
-     * Returns the namespace prefix registered for the given URI in the
-     * {@link javax.jcr.NamespaceRegistry} associated with the workspace of
-     * this session. Subclasses should override this method to support
-     * namespace remapping.
-     *
-     * @param uri namespace URI
-     * @return namespace prefix
-     * @see Session#getNamespacePrefix(String)
-     */
-    public String getNamespacePrefix(String uri) throws RepositoryException {
-        return getWorkspace().getNamespaceRegistry().getPrefix(uri);
-    }
-
-    /**
-     * Does nothing. Subclasses should override this method to actually
-     * close this session.
-     *
-     * @see Session#logout()
-     */
-    public void logout() {
-    }
-
-    /**
-     * Unsupported operation. Subclasses should override this method to support
-     * lock token management.
-     *
-     * @param lock token
-     * @see Session#addLockToken(String)
-     */
-    public void addLockToken(String lt) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Returns an empty string array to indicate that no lock tokens are held
-     * by this session. Subclasses should override this method to return the
-     * actual lock tokens held by this session.
-     *
-     * @return empty array
-     * @see Session#getLockTokens()
-     */
-    public String[] getLockTokens() {
-        return new String[0];
-    }
-
-    /**
-     * Unsupported operation. Subclasses should override this method to support
-     * lock token management.
-     *
-     * @param lock token
-     * @see Session#removeLockToken(String)
-     */
-    public void removeLockToken(String lt) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Unsupported operation. Subclasses should override this method to
-     * allow the creation of new {@link javax.jcr.Value Value} instances.
-     *
-     * @param lock token
-     * @see Session#removeLockToken(String)
-     */
-    public ValueFactory getValueFactory()
-            throws UnsupportedRepositoryOperationException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * Returns <code>true</code> to indicate that the session has not been
-     * closed. Subclasses should override this method to correctly report
-     * the state of the session.
-     *
-     * @return always <code>true</code>
-     * @see Session#isLive()
-     */
-    public boolean isLive() {
-        return true;
-    }
-
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/BaseWorkspace.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/BaseWorkspace.java
deleted file mode 100644
index 2b26b2c..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/BaseWorkspace.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.base;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-import javax.jcr.AccessDeniedException;
-import javax.jcr.InvalidItemStateException;
-import javax.jcr.InvalidSerializedDataException;
-import javax.jcr.ItemExistsException;
-import javax.jcr.NamespaceRegistry;
-import javax.jcr.NoSuchWorkspaceException;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.UnsupportedRepositoryOperationException;
-import javax.jcr.Workspace;
-import javax.jcr.lock.LockException;
-import javax.jcr.nodetype.ConstraintViolationException;
-import javax.jcr.nodetype.NodeTypeManager;
-import javax.jcr.observation.ObservationManager;
-import javax.jcr.query.QueryManager;
-import javax.jcr.version.Version;
-import javax.jcr.version.VersionException;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.sax.SAXResult;
-import javax.xml.transform.stream.StreamSource;
-
-import org.xml.sax.ContentHandler;
-
-/**
- * Workspace base class.
- */
-public class BaseWorkspace implements Workspace {
-
-    private static final NamespaceRegistry NAMESPACE_REGISTRY =
-        new BaseNamespaceRegistry();
-
-    /** Not implemented. {@inheritDoc} */
-    public Session getSession() {
-        throw new UnsupportedOperationException();
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public String getName() {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Implemented by calling <code>copy(getName(), srcAbsPath, destAbsPath).
-     * {@inheritDoc}
-     */
-    public void copy(String srcAbsPath, String destAbsPath)
-            throws ConstraintViolationException, VersionException,
-            AccessDeniedException, PathNotFoundException, ItemExistsException,
-            LockException, RepositoryException {
-        copy(getName(), srcAbsPath, destAbsPath);
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public void copy(String srcWorkspace, String srcAbsPath, String destAbsPath)
-            throws NoSuchWorkspaceException, ConstraintViolationException,
-            VersionException, AccessDeniedException, PathNotFoundException,
-            ItemExistsException, LockException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public void clone(String srcWorkspace, String srcAbsPath,
-            String destAbsPath, boolean removeExisting)
-            throws NoSuchWorkspaceException, ConstraintViolationException,
-            VersionException, AccessDeniedException, PathNotFoundException,
-            ItemExistsException, LockException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public void move(String srcAbsPath, String destAbsPath)
-            throws ConstraintViolationException, VersionException,
-            AccessDeniedException, PathNotFoundException, ItemExistsException,
-            LockException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public void restore(Version[] versions, boolean removeExisting)
-            throws ItemExistsException,
-            UnsupportedRepositoryOperationException, VersionException,
-            LockException, InvalidItemStateException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public QueryManager getQueryManager() throws RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public NamespaceRegistry getNamespaceRegistry() throws RepositoryException {
-        return NAMESPACE_REGISTRY;
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public NodeTypeManager getNodeTypeManager() throws RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public ObservationManager getObservationManager()
-            throws UnsupportedRepositoryOperationException, RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public String[] getAccessibleWorkspaceNames() throws RepositoryException {
-        return new String[] { getName() };
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public ContentHandler getImportContentHandler(String parentAbsPath,
-            int uuidBehavior) throws PathNotFoundException,
-            ConstraintViolationException, VersionException, LockException,
-            RepositoryException {
-        throw new UnsupportedRepositoryOperationException();
-    }
-
-    /**
-     * Implemented by calling
-     * <code>transformer.transform(new StreamSource(in), new SAXResult(handler))</code>
-     * with an identity {@link Transformer Transformer} and a
-     * {@link ContentHandler ContentHandler} instance created by calling
-     * <code>getImportContentHandler(parentAbsPath, uuidBehaviour)</code>.
-     * Possible {@see TransformerException TransformerExceptions} and
-     * {@see TransformerConfigurationException TransformerConfigurationExceptions}
-     * are converted to {@link IOException IOExceptions}.
-     * {@inheritDoc}
-     */
-    public void importXML(String parentAbsPath, InputStream in, int uuidBehavior)
-            throws IOException, PathNotFoundException, ItemExistsException,
-            ConstraintViolationException, InvalidSerializedDataException,
-            LockException, RepositoryException {
-        try {
-            ContentHandler handler =
-                getImportContentHandler(parentAbsPath, uuidBehavior);
-
-            TransformerFactory factory = TransformerFactory.newInstance();
-            Transformer transformer = factory.newTransformer();
-            transformer.transform(new StreamSource(in), new SAXResult(handler));
-        } catch (TransformerConfigurationException e) {
-            throw new IOException(
-                    "Unable to configure a SAX transformer: " + e.getMessage());
-        } catch (TransformerException e) {
-            throw new IOException(
-                    "Unable to deserialize a SAX stream: " + e.getMessage());
-        }
-    }
-
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/nodetype/BaseItemDefinition.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/nodetype/BaseItemDefinition.java
deleted file mode 100644
index 4e688fd..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/nodetype/BaseItemDefinition.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.base.nodetype;
-
-import javax.jcr.nodetype.ItemDefinition;
-import javax.jcr.nodetype.NodeType;
-import javax.jcr.version.OnParentVersionAction;
-
-/**
- * Item definition base class.
- */
-public class BaseItemDefinition implements ItemDefinition {
-
-    /** Not implemented. {@inheritDoc} */
-    public NodeType getDeclaringNodeType() {
-        throw new UnsupportedOperationException();
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public String getName() {
-        throw new UnsupportedOperationException();
-    }
-
-    /** Always returns <code>false</code>. {@inheritDoc} */
-    public boolean isAutoCreated() {
-        return false;
-    }
-
-    /** Always returns <code>false</code>. {@inheritDoc} */
-    public boolean isMandatory() {
-        return false;
-    }
-
-    /**
-     * Always returns <code>OnParentVersionAction.IGNORE</code>.
-     * {@inheritDoc}
-     */
-    public int getOnParentVersion() {
-        return OnParentVersionAction.IGNORE;
-    }
-
-    /** Always returns <code>false</code>. {@inheritDoc} */
-    public boolean isProtected() {
-        return false;
-    }
-
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/nodetype/BaseNodeDefinition.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/nodetype/BaseNodeDefinition.java
deleted file mode 100644
index 0467d70..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/nodetype/BaseNodeDefinition.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.base.nodetype;
-
-import javax.jcr.nodetype.NodeDefinition;
-import javax.jcr.nodetype.NodeType;
-
-/**
- * Node definition base class.
- */
-public class BaseNodeDefinition extends BaseItemDefinition implements NodeDefinition {
-
-    /** Always returns an empty node type array. {@inheritDoc} */
-    public NodeType[] getRequiredPrimaryTypes() {
-        return new NodeType[0];
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public NodeType getDefaultPrimaryType() {
-        throw new UnsupportedOperationException();
-    }
-
-    /** Always returns <code>false</code>. {@inheritDoc} */
-    public boolean allowsSameNameSiblings() {
-        return false;
-    }
-
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/nodetype/BaseNodeType.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/nodetype/BaseNodeType.java
deleted file mode 100644
index 08352d5..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/nodetype/BaseNodeType.java
+++ /dev/null
@@ -1,271 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.base.nodetype;
-
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Set;
-
-import javax.jcr.Value;
-import javax.jcr.nodetype.ItemDefinition;
-import javax.jcr.nodetype.NodeDefinition;
-import javax.jcr.nodetype.NodeType;
-import javax.jcr.nodetype.PropertyDefinition;
-
-/**
- * Node type base class.
- */
-public class BaseNodeType implements NodeType {
-
-    /** Not implemented. {@inheritDoc} */
-    public String getName() {
-        throw new UnsupportedOperationException();
-    }
-
-    /** Always returns <code>false</code>. {@inheritDoc} */
-    public boolean isMixin() {
-        return false;
-    }
-
-    /** Always returns <code>false</code>. {@inheritDoc} */
-    public boolean hasOrderableChildNodes() {
-        return false;
-    }
-
-    /** Not implemented. {@inheritDoc} */
-    public String getPrimaryItemName() {
-        throw new UnsupportedOperationException();
-    }
-
-    /** Always returns an empty supertype array. {@inheritDoc} */
-    public NodeType[] getDeclaredSupertypes() {
-        return new NodeType[0];
-    }
-
-    /**
-     * Implemented by calling <code>getDeclaredSupertypes()</code> and
-     * recursively collecting all supertypes. The collected supertype
-     * set is returned as a node type array.
-     * {@inheritDoc}
-     */
-    public NodeType[] getSupertypes() {
-        Set supertypes = new HashSet();
-
-        NodeType[] declared = getDeclaredSupertypes();
-        for (int i = 0; i < declared.length; i++) {
-            supertypes.addAll(Arrays.asList(declared[i].getSupertypes()));
-        }
-        supertypes.addAll(Arrays.asList(declared));
-
-        return (NodeType[]) supertypes.toArray(new NodeType[supertypes.size()]);
-    }
-
-    /**
-     * Implemented by calling <code>getName()</code> and comparing the
-     * result to the given node type name. If the match fails, recursively
-     * checks all declared supertypes.
-     * {@inheritDoc}
-     */
-    public boolean isNodeType(String nodeTypeName) {
-        if (nodeTypeName.equals(getName())) {
-            return true;
-        } else {
-            NodeType[] types = getDeclaredSupertypes();
-            for (int i = 0; i < types.length; i++) {
-                if (types[i].isNodeType(nodeTypeName)) {
-                    return true;
-                }
-            }
-            return false;
-        }
-    }
-
-    /** Always returns an empty property definition array. {@inheritDoc} */
-    public PropertyDefinition[] getDeclaredPropertyDefinitions() {
-        return new PropertyDefinition[0];
-    }
-
-    /**
-     * Implemented by calling <code>getDeclaredPropertyDefinitions()</code>
-     * this node type and all supertypes returned by
-     * <code>getSupertypes()</code>. The collected property definition set
-     * is returned as a property definition array.
-     * {@inheritDoc}
-     */
-    public PropertyDefinition[] getPropertyDefinitions() {
-        Set definitions = new HashSet();
-
-        NodeType[] supertypes = getSupertypes();
-        for (int i = 0; i < supertypes.length; i++) {
-            definitions.addAll(
-                    Arrays.asList(supertypes[i].getPropertyDefinitions()));
-        }
-        definitions.addAll(Arrays.asList(getDeclaredPropertyDefinitions()));
-
-        return (PropertyDefinition[])
-            definitions.toArray(new PropertyDefinition[definitions.size()]);
-    }
-
-    /** Always returns an empty node definition array. {@inheritDoc} */
-    public NodeDefinition[] getDeclaredChildNodeDefinitions() {
-        return new NodeDefinition[0];
-    }
-
-    /**
-     * Implemented by calling <code>getDeclaredChildNodeDefinitions()</code>
-     * on this node type and all supertypes returned by
-     * <code>getSupertypes()</code>. The collected node definition set
-     * is returned as a node definition array.
-     * {@inheritDoc}
-     */
-    public NodeDefinition[] getChildNodeDefinitions() {
-        Set defs = new HashSet();
-
-        NodeType[] types = getSupertypes();
-        for (int i = 0; i < types.length; i++) {
-            defs.addAll(Arrays.asList(types[i].getChildNodeDefinitions()));
-        }
-        defs.addAll(Arrays.asList(getDeclaredChildNodeDefinitions()));
-
-        return (NodeDefinition[]) defs.toArray(new NodeDefinition[0]);
-    }
-
-
-    /**
-     * Returns the definition of the named property.
-     * <p>
-     * This internal utility method is used by the predicate methods
-     * in this class.
-     *
-     * @param propertyName property name
-     * @return property definition, or <code>null</code> if not found
-     */
-    private PropertyDefinition getPropertyDefinition(String propertyName) {
-        PropertyDefinition[] definitions = getPropertyDefinitions();
-        for (int i = 0; i < definitions.length; i++) {
-            if (propertyName.equals(definitions[i].getName())) {
-                return definitions[i];
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Implemented by finding the definition of the named property (or the
-     * wildcard property definition if the named property definition is not
-     * found) and checking whether the defined property is single-valued.
-     * More detailed value constraints are not implemented, but this method
-     * will simply return <code>true</code> instead of throwing an
-     * {@link UnsupportedOperationException UnsupportedOperationException}
-     * for all value constraint comparisons.
-     * {@inheritDoc}
-     */
-    public boolean canSetProperty(String propertyName, Value value) {
-        PropertyDefinition definition = getPropertyDefinition(propertyName);
-        if (definition == null) {
-            definition = getPropertyDefinition("*");
-        }
-        if (definition == null || definition.isMultiple()) {
-            return false;
-        } else {
-            return true; // TODO check constraints!
-        }
-    }
-
-    /**
-     * Implemented by finding the definition of the named property (or the
-     * wildcard property definition if the named property definition is not
-     * found) and checking whether the defined property is multi-valued.
-     * More detailed value constraints are not implemented, but this method
-     * will simply return <code>true</code> instead of throwing an
-     * {@link UnsupportedOperationException UnsupportedOperationException}
-     * for all value constraint comparisons.
-     * {@inheritDoc}
-     */
-    public boolean canSetProperty(String propertyName, Value[] values) {
-        PropertyDefinition def = getPropertyDefinition(propertyName);
-        if (def == null) {
-            def = getPropertyDefinition("*");
-        }
-        if (def == null || !def.isMultiple()) {
-            return false;
-        } else {
-            return true; // TODO check constraints!
-        }
-    }
-
-    /**
-     * Returns the definition of the named child node.
-     * <p>
-     * This internal utility method is used by the predicate methods
-     * in this class.
-     *
-     * @param childNodeName child node name
-     * @return node definition, or <code>null</code> if not found
-     */
-    private NodeDefinition getChildNodeDefinition(String childNodeName) {
-        NodeDefinition[] definitions = getChildNodeDefinitions();
-        for (int i = 0; i < definitions.length; i++) {
-            if (childNodeName.equals(definitions[i].getName())) {
-                return definitions[i];
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Implemented by finding the definition of the named child node (or the
-     * wildcard child node definition if the named child node definition is
-     * not found). Returns <code>true</code> if a node definition is found,
-     * <code>false</code> otherwise.
-     * {@inheritDoc}
-     */
-    public boolean canAddChildNode(String childNodeName) {
-        NodeDefinition definition = getChildNodeDefinition(childNodeName);
-        if (definition == null) {
-            definition = getChildNodeDefinition("*");
-        }
-        return definition != null;
-    }
-
-    /**
-     * Not implemented. Implementing this method requires access to the
-     * node type manager in order to resolve the given node type name.
-     * {@inheritDoc}
-     */
-    public boolean canAddChildNode(String childNodeName, String nodeTypeName) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Implemented by finding the definition of the named item (property or
-     * child node) and checking that the defined item is not mandatory.
-     * {@inheritDoc}
-     */
-    public boolean canRemoveItem(String itemName) {
-        ItemDefinition definition = getPropertyDefinition(itemName);
-        if (definition == null) {
-            definition = getChildNodeDefinition(itemName);
-        }
-        if (definition == null) {
-            return true;
-        } else {
-            return definition.isMandatory();
-        }
-    }
-
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/nodetype/BaseNodeTypeManager.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/nodetype/BaseNodeTypeManager.java
deleted file mode 100644
index 4dc0b83..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/nodetype/BaseNodeTypeManager.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.base.nodetype;
-
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Vector;
-
-import javax.jcr.RepositoryException;
-import javax.jcr.UnsupportedRepositoryOperationException;
-import javax.jcr.nodetype.NoSuchNodeTypeException;
-import javax.jcr.nodetype.NodeType;
-import javax.jcr.nodetype.NodeTypeIterator;
-import javax.jcr.nodetype.NodeTypeManager;
-
-import org.apache.jackrabbit.iterator.ArrayNodeTypeIterator;
-
-/**
- * Node type manager base class.
- */
-public class BaseNodeTypeManager implements NodeTypeManager {
-
-    /**
-     * Returns an empty node type iterator. Subclasses should override this
-     * method to return the available node types.
-     *
-     * @return empty node type iterator
-     * @see NodeTypeManager#getAllNodeTypes()
-     */
-    public NodeTypeIterator getAllNodeTypes() throws RepositoryException {
-        return new ArrayNodeTypeIterator(new NodeType[0]);
-    }
-
-    /**
-     * Iterates through the node types returned by the
-     * {@link #getAllNodeTypes() getAllNodeTypes()} method and returns the
-     * node type with the given name. If a matching node type is not found,
-     * then a {@link NoSuchNodeTypeException} is thrown. Subclasses may
-     * want to override this method for better performance.
-     *
-     * @param node type name
-     * @return named node type
-     * @see NodeTypeManager#getNodeType(String)
-     */
-    public NodeType getNodeType(String nodeTypeName) throws RepositoryException {
-        NodeTypeIterator types = getAllNodeTypes();
-        while (types.hasNext()) {
-            NodeType type = types.nextNodeType();
-            if (nodeTypeName.equals(type.getName())) {
-                return type;
-            }
-        }
-        throw new NoSuchNodeTypeException("Type not found: " + nodeTypeName);
-    }
-
-    /**
-     * Iterates through the node types returned by the
-     * {@link #getAllNodeTypes() getAllNodeTypes()} method and returns an
-     * {@link ArrayNodeTypeIterator} containing all the primary node types.
-     * Subclasses may want to override this method for better performance.
-     *
-     * @return primary node types
-     * @see NodeTypeManager#getPrimaryNodeTypes()
-     */
-    public NodeTypeIterator getPrimaryNodeTypes() throws RepositoryException {
-        List primaryTypes = new LinkedList();
-
-        NodeTypeIterator types = getAllNodeTypes();
-        while (types.hasNext()) {
-            NodeType type = types.nextNodeType();
-            if (!type.isMixin()) {
-                primaryTypes.add(type);
-            }
-        }
-
-        return new ArrayNodeTypeIterator(primaryTypes);
-    }
-
-    /**
-     * Iterates through the node types returned by the
-     * {@link #getAllNodeTypes() getAllNodeTypes()} method and returns an
-     * {@link ArrayNodeTypeIterator} containing all the mixin node types.
-     * Subclasses may want to override this method for better performance.
-     *
-     * @return mixin node types
-     * @see NodeTypeManager#getMixinNodeTypes()
-     */
-    public NodeTypeIterator getMixinNodeTypes() throws RepositoryException {
-        List mixinTypes = new LinkedList();
-
-        NodeTypeIterator types = getAllNodeTypes();
-        while (types.hasNext()) {
-            NodeType type = types.nextNodeType();
-            if (type.isMixin()) {
-                mixinTypes.add(type);
-            }
-        }
-
-        return new ArrayNodeTypeIterator(mixinTypes);
-    }
-
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/nodetype/BasePropertyDefinition.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/nodetype/BasePropertyDefinition.java
deleted file mode 100644
index 595fece..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/nodetype/BasePropertyDefinition.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.base.nodetype;
-
-import javax.jcr.PropertyType;
-import javax.jcr.Value;
-import javax.jcr.nodetype.PropertyDefinition;
-
-/**
- * Property definition base class.
- */
-public class BasePropertyDefinition extends BaseItemDefinition
-        implements PropertyDefinition {
-
-    /** Always returns <code>PropertyType.UNDEFINED</code>. {@inheritDoc} */
-    public int getRequiredType() {
-        return PropertyType.UNDEFINED;
-    }
-
-    /** Always returns <code>null</code>. {@inheritDoc} */
-    public String[] getValueConstraints() {
-        return null;
-    }
-
-    /** Always returns <code>null</code>. {@inheritDoc} */
-    public Value[] getDefaultValues() {
-        return null;
-    }
-
-    /** Always returns <code>false</code>. {@inheritDoc} */
-    public boolean isMultiple() {
-        return false;
-    }
-
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/package.html b/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/package.html
deleted file mode 100644
index de0be96..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/package.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<body>
-General base classes for implementing the JCR interfaces.
-<p>
-This package contains simple base class implementations of the JCR API
-interfaces. These classes implement the API methods either by throwing
-Unsupported(Repository)OperationExceptions or by calling other API methods.
-For example the BaseProperty.getString() method is implemented as
-Property.getValue().getString(). See the javadoc comments of each method
-for implementation details.
-</p>
-<p>
-The purpose of this package is to make it easy to incrementally implement
-the JCR API without creating a large numbers of stub methods. A JCR
-implementation class can inherit one of these base classes and only override
-the methods it needs.
-</p>
-<h2>Desing principles</h2>
-<p>
-The base classes in this package follow the design principles listed below.
-The purpose of these design principles is to avoid introducing unnecessary
-dependencies or complexities.
-</p>
-<ul>
-  <li>
-    <strong>No member variables.</strong> To avoid introducing any extra
-    memory overhead or complex state and object equality issues, none of
-    these base classes have <em>any</em> member variables, private or
-    otherwise. However the implemented methods are free to use as many
-    local variables as they like.
-  </li>
-  <li>
-    <strong>No extra methods.</strong> The only non-private methods defined
-    in these base classes are the public methods declared in the JCR
-    interfaces. Private utility methods are allowed to avoid duplicating code,
-    but <em>no</em> protected or public methods other than those declared by
-    the JCR API are allowed.
-  </li>
-</ul>
-</body>
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/AbstractDecorator.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/AbstractDecorator.java
deleted file mode 100644
index af003e7..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/AbstractDecorator.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.decorator;
-
-import javax.jcr.Session;
-
-/**
- * Provides fields to common objects used by any decorator:
- * <ul>
- * <li><code>DecoratorFactory</code>: the decorator factory in use</li>
- * <li><code>Session</code>: the decorated session which was used to create
- * this decorator</li>
- * </ul>
- */
-public abstract class AbstractDecorator {
-
-    /**
-     * The decorator factory. Used to decorate returned objects.
-     */
-    protected final DecoratorFactory factory;
-
-    /**
-     * The decorated session to which the returned objects belong.
-     */
-    protected final Session session;
-
-    /**
-     * Constructs an abstract decorator.
-     *
-     * @param factory decorator factory
-     * @param session decorated session
-     */
-    public AbstractDecorator(DecoratorFactory factory, Session session) {
-        this.factory = factory;
-        this.session = session;
-    }
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/DecoratingNodeIterator.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/DecoratingNodeIterator.java
deleted file mode 100644
index 2836597..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/DecoratingNodeIterator.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.decorator;
-
-import javax.jcr.Node;
-import javax.jcr.NodeIterator;
-import javax.jcr.Session;
-
-/**
- * Node iterator that decorates all iterated nodes. This utility class is
- * used by the decorator layer to manage the decoration of all the nodes
- * returned by an underlying node iterator. This class delegates
- * all method calls to the underlying node iterator and uses the given
- * decorator factory to decorate all the returned node instances.
- */
-public class DecoratingNodeIterator extends DecoratingRangeIterator
-        implements NodeIterator {
-
-    /**
-     * Creates a decorating node iterator.
-     *
-     * @param factory decorator factory
-     * @param session decorated session
-     * @param iterator underlying node iterator
-     */
-    public DecoratingNodeIterator(
-            DecoratorFactory factory, Session session, NodeIterator iterator) {
-        super(factory, session, iterator);
-    }
-
-    /**
-     * Decorates and returns the next node from the underlying node iterator.
-     *
-     * @return next node (decorated)
-     * @see NodeIterator#nextNode()
-     */
-    public Node nextNode() {
-        return (Node) next();
-    }
-
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/DecoratingPropertyIterator.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/DecoratingPropertyIterator.java
deleted file mode 100644
index 9eaae2b..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/DecoratingPropertyIterator.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.decorator;
-
-import javax.jcr.Session;
-import javax.jcr.PropertyIterator;
-import javax.jcr.Property;
-
-/**
- */
-public class DecoratingPropertyIterator extends DecoratingRangeIterator
-        implements PropertyIterator {
-
-    /**
-     * Creates a decorating property iterator.
-     *
-     * @param factory decorator factory
-     * @param session decorated session
-     * @param iterator underlying property iterator
-     */
-    public DecoratingPropertyIterator(DecoratorFactory factory,
-                 Session session,
-                 PropertyIterator iterator) {
-        super(factory, session, iterator);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Property nextProperty() {
-        return (Property) next();
-    }
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/DecoratingRangeIterator.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/DecoratingRangeIterator.java
deleted file mode 100644
index 12c7d74..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/DecoratingRangeIterator.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.decorator;
-
-import javax.jcr.Item;
-import javax.jcr.Node;
-import javax.jcr.Property;
-import javax.jcr.RangeIterator;
-import javax.jcr.Session;
-import javax.jcr.version.Version;
-import javax.jcr.version.VersionHistory;
-
-/**
- * Range iterator that decorates all iterated objects. This class is used
- * as the base class of the various decorating iterator utility classes used
- * by the decorator layer.
- * <p>
- * All the method calls are delegated to the underlying iterator,
- * and best effort is made to decorate the objects returned by the
- * {@link #next() next()} method.
- */
-public class DecoratingRangeIterator
-        extends AbstractDecorator implements RangeIterator {
-
-    /** The underlying iterator. */
-    protected final RangeIterator iterator;
-
-    /**
-     * Creates a decorating iterator.
-     *
-     * @param factory decorator factory
-     * @param session decorated session
-     * @param iterator underlying iterator
-     */
-    public DecoratingRangeIterator(
-            DecoratorFactory factory, Session session, RangeIterator iterator) {
-        super(factory, session);
-        this.iterator = iterator;
-    }
-
-    /**
-     * Advances the underlying iterator.
-     *
-     * @param skipNum number of elements to skip
-     * @see RangeIterator#skip(long)
-     */
-    public void skip(long skipNum) {
-        iterator.skip(skipNum);
-    }
-
-    /**
-     * Returns the size of the underlying iterator.
-     *
-     * @return size of the iterator
-     * @see RangeIterator#getSize()
-     */
-    public long getSize() {
-        return iterator.getSize();
-    }
-
-    /**
-     * Returns the position of the underlying iterator.
-     *
-     * @return position of the iterator
-     * @see RangeIterator#getPosition()
-     */
-    public long getPosition() {
-        return iterator.getPosition();
-    }
-
-    /**
-     * Checks whether the underlying iterator has more elements.
-     *
-     * @return <code>true</code> if more elements exist,
-     *         <code>false</code> otherwise
-     * @see java.util.Iterator#hasNext()
-     */
-    public boolean hasNext() {
-        return iterator.hasNext();
-    }
-
-    /**
-     * Decorates and returns the next objects from the underlying iterator.
-     *
-     * @return decorated object
-     * @throws UnsupportedOperationException if the returned object can not
-     *                                       be decorated
-     * @see java.util.Iterator#next()
-     */
-    public Object next() {
-        Object object = iterator.next();
-        if (object instanceof Version) {
-            return factory.getVersionDecorator(session, (Version) object);
-        } else if (object instanceof VersionHistory) {
-            return factory.getVersionHistoryDecorator(session, (VersionHistory) object);
-        } else if (object instanceof Node) {
-            return factory.getNodeDecorator(session, (Node) object);
-        } else if (object instanceof Property) {
-            return factory.getPropertyDecorator(session, (Property) object);
-        } else if (object instanceof Item) {
-            return factory.getItemDecorator(session, (Item) object);
-        } else {
-            throw new UnsupportedOperationException("No decorator available for " + object);
-        }
-    }
-
-    /**
-     * Removes the current object from the underlying iterator.
-     *
-     * @see java.util.Iterator#remove()
-     */
-    public void remove() {
-        iterator.remove();
-    }
-
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/DecoratingVersionIterator.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/DecoratingVersionIterator.java
deleted file mode 100644
index acb6524..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/DecoratingVersionIterator.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.decorator;
-
-import org.apache.jackrabbit.decorator.DecoratorFactory;
-import org.apache.jackrabbit.decorator.DecoratingRangeIterator;
-
-import javax.jcr.version.VersionIterator;
-import javax.jcr.version.Version;
-import javax.jcr.Session;
-
-/**
- */
-public class DecoratingVersionIterator extends DecoratingRangeIterator
-        implements VersionIterator {
-
-    /**
-     * Creates a decorating version iterator.
-     *
-     * @param factory decorator factory
-     * @param session decorated session
-     * @param iterator underlying version iterator
-     */
-    public DecoratingVersionIterator(DecoratorFactory factory,
-                 Session session,
-                 VersionIterator iterator) {
-        super(factory, session, iterator);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Version nextVersion() {
-        return (Version) next();
-    }
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/DecoratorFactory.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/DecoratorFactory.java
deleted file mode 100644
index 10db317..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/DecoratorFactory.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.decorator;
-
-import javax.jcr.Item;
-import javax.jcr.Node;
-import javax.jcr.Property;
-import javax.jcr.Repository;
-import javax.jcr.Session;
-import javax.jcr.Workspace;
-import javax.jcr.ValueFactory;
-import javax.jcr.ItemVisitor;
-import javax.jcr.query.QueryResult;
-import javax.jcr.query.Query;
-import javax.jcr.query.QueryManager;
-import javax.jcr.version.Version;
-import javax.jcr.version.VersionHistory;
-import javax.jcr.lock.Lock;
-
-/**
- * Factory interface for creating decorator instances. The decorator
- * classes create new decorator instances using a factory to make it
- * easier to customize the behaviour of a decorator layer.
- */
-public interface DecoratorFactory {
-
-    /**
-     * Creates a repository decorator.
-     *
-     * @param repository the underlying repository instance
-     * @return decorator for the given repository
-     */
-    Repository getRepositoryDecorator(Repository repository);
-
-    /**
-     * Creates a session decorator. The created session decorator will
-     * return the given repository (decorator) instance from the
-     * {@link Session#getRepository() getRepository()} method to avoid
-     * breaking the decorator layer.
-     * <p>
-     * The following example code illustrates how this method should be
-     * used to implement the repository login methods.
-     * <pre>
-     *     DecoratorFactory factory = ...; // The decorator factory
-     *     Session session = ...;          // The underlying session instance
-     *     return factory.getSessionDecorator(this, session);
-     * </pre>
-     *
-     * @param repository the repository (decorator) instance used to create
-     *                   the session decorator
-     * @param session    the underlying session instance
-     * @return decorator for the given session
-     */
-    Session getSessionDecorator(Repository repository, Session session);
-
-    /**
-     * Creates a workspace decorator.
-     *
-     * @param session   the session (decorator) instance used to create the
-     *                  workspace decorator
-     * @param workspace the underlying workspace instance
-     * @return workspace decorator
-     */
-    Workspace getWorkspaceDecorator(Session session, Workspace workspace);
-
-    /**
-     * Creates a node decorator.
-     * <p/>
-     * Note: this method must also take care to create appropriate decorators
-     * for subtypes of node: Version and VersionHistory!
-     *
-     * @param session the session (decorator) instance used to create the
-     *                node decorator
-     * @param node    the underlying node instance
-     * @return node decorator
-     */
-    Node getNodeDecorator(Session session, Node node);
-
-    /**
-     * Creates a property decorator.
-     *
-     * @param session  the session (decorator) instance used to create the
-     *                 property decorator
-     * @param property the underlying property instance
-     * @return property decorator
-     */
-    Property getPropertyDecorator(Session session, Property property);
-
-    /**
-     * Creates an item decorator.
-     *
-     * @param session the session (decorator) instance used to create the
-     *                item decorator
-     * @param item    the underlying item instance
-     * @return item decorator
-     */
-    Item getItemDecorator(Session session, Item item);
-
-    /**
-     * Creates a lock decorator.
-     *
-     * @param session the session (decorator) instance used to create the
-     *                lock decorator
-     * @param lock    the underlying lock instance
-     * @return lock decorator
-     */
-    Lock getLockDecorator(Session session, Lock lock);
-
-    /**
-     * Creates a version decorator.
-     *
-     * @param session the session (decorator) instance used to create the version
-     *                decorator
-     * @param version the underlying version instance
-     * @return version decorator
-     */
-    Version getVersionDecorator(Session session, Version version);
-
-    /**
-     * Creates a version history decorator.
-     *
-     * @param session        the session (decorator) instance used to create the
-     *                       version history decorator.
-     * @param versionHistory the underlying version history instance
-     * @return version history decorator
-     */
-    VersionHistory getVersionHistoryDecorator(Session session,
-                                              VersionHistory versionHistory);
-
-    /**
-     * Creates a query manager decorator.
-     *
-     * @param session      the session (decorator) instance used to create the
-     *                     query manager decorator.
-     * @param queryManager the underlying query manager instance.
-     * @return query manager decorator.
-     */
-    QueryManager getQueryManagerDecorator(Session session, QueryManager queryManager);
-
-    /**
-     * Creates a query decorator.
-     *
-     * @param session the session (decorator) instance used to create the query
-     *                decorator.
-     * @param query   the underlying query instance.
-     * @return query decorator.
-     */
-    Query getQueryDecorator(Session session, Query query);
-
-    /**
-     * Creates a query result decorator.
-     *
-     * @param session the session (decorator) instance used to create the query
-     *                result decorator.
-     * @param result  the underlying query result instance.
-     * @return query result decorator.
-     */
-    QueryResult getQueryResultDecorator(Session session, QueryResult result);
-
-    /**
-     * Creates a value factory decorator.
-     *
-     * @param session      the session (decorator) instance used to create the
-     *                     value factory decorator.
-     * @param valueFactory the underlying value factory instance.
-     * @return value factory decorator.
-     */
-    ValueFactory getValueFactoryDecorator(Session session, ValueFactory valueFactory);
-
-    /**
-     * Creates a item visitor decorator.
-     *
-     * @param session the session (decorator) instance used to create the item
-     *                visitor decorator.
-     * @param visitor the underlying item visitor instance.
-     * @return item visitor decorator.
-     */
-    ItemVisitor getItemVisitorDecorator(Session session, ItemVisitor visitor);
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/DefaultDecoratorFactory.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/DefaultDecoratorFactory.java
deleted file mode 100644
index fb02c46..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/DefaultDecoratorFactory.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.decorator;
-
-import javax.jcr.Item;
-import javax.jcr.Node;
-import javax.jcr.Property;
-import javax.jcr.Repository;
-import javax.jcr.Session;
-import javax.jcr.Workspace;
-import javax.jcr.ValueFactory;
-import javax.jcr.ItemVisitor;
-import javax.jcr.query.Query;
-import javax.jcr.query.QueryResult;
-import javax.jcr.query.QueryManager;
-import javax.jcr.version.Version;
-import javax.jcr.version.VersionHistory;
-import javax.jcr.lock.Lock;
-
-/**
- * Default implementation of a {@link DecoratorFactory}. All decorator instances
- * simply wrap the original instance and forward the call to it.
- */
-public class DefaultDecoratorFactory implements DecoratorFactory {
-
-    /**
-     * {@inheritDoc}
-     */
-    public Repository getRepositoryDecorator(Repository repository) {
-        return new RepositoryDecorator(this, repository);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public Session getSessionDecorator(Repository repository, Session session) {
-        return new SessionDecorator(this, repository, session);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public Workspace getWorkspaceDecorator(Session session, Workspace workspace) {
-        return new WorkspaceDecorator(this, session, workspace);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public Node getNodeDecorator(Session session, Node node) {
-        if (node instanceof Version) {
-            return getVersionDecorator(session, (Version) node);
-        } else if (node instanceof VersionHistory) {
-            return getVersionHistoryDecorator(session, (VersionHistory) node);
-        } else {
-            return new NodeDecorator(this, session, node);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public Property getPropertyDecorator(Session session, Property property) {
-        return new PropertyDecorator(this, session, property);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public Lock getLockDecorator(Session session, Lock lock) {
-        return new LockDecorator(this, session, lock);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public Version getVersionDecorator(Session session, Version version) {
-        return new VersionDecorator(this, session, version);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public VersionHistory getVersionHistoryDecorator(Session session,
-                                                     VersionHistory versionHistory) {
-        return new VersionHistoryDecorator(this, session, versionHistory);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public Item getItemDecorator(Session session, Item item) {
-        if (item instanceof Version) {
-            return getVersionDecorator(session, (Version) item);
-        } else if (item instanceof VersionHistory) {
-            return getVersionHistoryDecorator(session, (VersionHistory) item);
-        } else if (item instanceof Node) {
-            return getNodeDecorator(session, (Node) item);
-        } else if (item instanceof Property) {
-            return getPropertyDecorator(session, (Property) item);
-        } else {
-            return new ItemDecorator(this, session, item);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public QueryManager getQueryManagerDecorator(Session session,
-                                                 QueryManager queryManager) {
-        return new QueryManagerDecorator(this, session, queryManager);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public Query getQueryDecorator(Session session, Query query) {
-        return new QueryDecorator(this, session, query);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public QueryResult getQueryResultDecorator(Session session,
-                                               QueryResult result) {
-        return new QueryResultDecorator(this, session, result);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public ValueFactory getValueFactoryDecorator(Session session,
-                                                 ValueFactory valueFactory) {
-        return new ValueFactoryDecorator(this, session, valueFactory);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public ItemVisitor getItemVisitorDecorator(Session session,
-                                               ItemVisitor visitor) {
-        return new ItemVisitorDecorator(this, session, visitor);
-    }
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/ItemDecorator.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/ItemDecorator.java
deleted file mode 100644
index 442852f..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/ItemDecorator.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.decorator;
-
-import javax.jcr.AccessDeniedException;
-import javax.jcr.InvalidItemStateException;
-import javax.jcr.Item;
-import javax.jcr.ItemNotFoundException;
-import javax.jcr.ItemVisitor;
-import javax.jcr.Node;
-import javax.jcr.ReferentialIntegrityException;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.lock.LockException;
-import javax.jcr.nodetype.ConstraintViolationException;
-import javax.jcr.version.VersionException;
-
-/**
- */
-public class ItemDecorator extends AbstractDecorator implements Item {
-
-    /**
-     * The underlying item to decorate.
-     */
-    protected final Item item;
-
-
-    public ItemDecorator(DecoratorFactory factory, Session session, Item item) {
-        super(factory, session);
-        this.item = item;
-    }
-
-    /**
-     * Returns the underlying item that <code>this</code>
-     * <code>ItemDecorator</code> decorates.
-     *
-     * @return the underlying item.
-     */
-    public Item unwrap() {
-        return item;
-    }
-
-    /**
-     * Returns the underlying <code>item</code> of the <code>item</code>
-     * that decorates it. Unwrapping <code>null</code> returns <code>null</code>.
-     *
-     * @param item decorates the underlying item.
-     * @return the underlying item.
-     * @throws IllegalStateException if <code>item</code> is not of type
-     *                               {@link ItemDecorator}.
-     */
-    public static Item unwrap(Item item) {
-        if (item == null) {
-            return null;
-        }
-        if (item instanceof ItemDecorator) {
-            item = ((ItemDecorator) item).unwrap();
-        } else {
-            throw new IllegalStateException("item is not of type ItemDecorator");
-        }
-        return item;
-    }
-
-    /**
-     * Returns the decorated session through which this item decorator
-     * was acquired.
-     *
-     * @return decorated session
-     */
-    public Session getSession() throws RepositoryException {
-        return session;
-    }
-
-    /** {@inheritDoc} */
-    public String getPath() throws RepositoryException {
-        return item.getPath();
-    }
-
-    /** {@inheritDoc} */
-    public String getName() throws RepositoryException {
-        return item.getName();
-    }
-
-    /** {@inheritDoc} */
-    public Item getAncestor(int depth) throws ItemNotFoundException,
-            AccessDeniedException, RepositoryException {
-        Item ancestor = item.getAncestor(depth);
-        return factory.getItemDecorator(session, ancestor);
-    }
-
-    /** {@inheritDoc} */
-    public Node getParent() throws ItemNotFoundException,
-            AccessDeniedException, RepositoryException {
-        Node parent = item.getParent();
-        return factory.getNodeDecorator(session, parent);
-    }
-
-    /** {@inheritDoc} */
-    public int getDepth() throws RepositoryException {
-        return item.getDepth();
-    }
-
-    /** {@inheritDoc} */
-    public boolean isNode() {
-        return item.isNode();
-    }
-
-    /** {@inheritDoc} */
-    public boolean isNew() {
-        return item.isNew();
-    }
-
-    /** {@inheritDoc} */
-    public boolean isModified() {
-        return item.isModified();
-    }
-
-    /** {@inheritDoc} */
-    public boolean isSame(Item otherItem) throws RepositoryException {
-        return item.isSame(unwrap(otherItem));
-    }
-
-    /** {@inheritDoc} */
-    public void accept(ItemVisitor visitor) throws RepositoryException {
-        item.accept(factory.getItemVisitorDecorator(session, visitor));
-    }
-
-    /** {@inheritDoc} */
-    public void save() throws AccessDeniedException,
-            ConstraintViolationException, InvalidItemStateException,
-            ReferentialIntegrityException, VersionException, LockException,
-            RepositoryException {
-        item.save();
-    }
-
-    /** {@inheritDoc} */
-    public void refresh(boolean keepChanges) throws InvalidItemStateException,
-            RepositoryException {
-        item.refresh(keepChanges);
-    }
-
-    /** {@inheritDoc} */
-    public void remove() throws VersionException, LockException,
-            RepositoryException {
-        item.remove();
-    }
-
-    public boolean equals(Object obj) {
-        if (obj instanceof ItemDecorator) {
-            ItemDecorator other = (ItemDecorator)obj;
-            return item.equals(other.unwrap());
-        }
-        return false;
-    }
-
-    public int hashCode() {
-        return item.hashCode();
-    }
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/ItemVisitorDecorator.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/ItemVisitorDecorator.java
deleted file mode 100644
index 50d3d9c..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/ItemVisitorDecorator.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.decorator;
-
-import javax.jcr.ItemVisitor;
-import javax.jcr.Property;
-import javax.jcr.RepositoryException;
-import javax.jcr.Node;
-import javax.jcr.Session;
-
-/**
- */
-public class ItemVisitorDecorator
-        extends AbstractDecorator implements ItemVisitor {
-
-    protected final ItemVisitor visitor;
-
-    public ItemVisitorDecorator(DecoratorFactory factory, Session session, ItemVisitor visitor) {
-        super(factory, session);
-        this.visitor = visitor;
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public void visit(Property property) throws RepositoryException {
-        visitor.visit(factory.getPropertyDecorator(session, property));
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public void visit(Node node) throws RepositoryException {
-        visitor.visit(factory.getNodeDecorator(session, node));
-    }
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/LockDecorator.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/LockDecorator.java
deleted file mode 100644
index 4708e1f..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/LockDecorator.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.decorator;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.lock.Lock;
-import javax.jcr.lock.LockException;
-
-/**
- *
- */
-public class LockDecorator extends AbstractDecorator implements Lock {
-
-    protected final Lock lock;
-
-    public LockDecorator(DecoratorFactory factory, Session session, Lock lock) {
-        super(factory, session);
-        this.lock = lock;
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Node getNode() {
-        return factory.getNodeDecorator(session, lock.getNode());
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public String getLockOwner() {
-        return lock.getLockOwner();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public boolean isDeep() {
-        return lock.isDeep();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public String getLockToken() {
-        return lock.getLockToken();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public boolean isLive() throws RepositoryException {
-        return lock.isLive();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public boolean isSessionScoped() {
-        return lock.isSessionScoped();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public void refresh() throws LockException, RepositoryException {
-        lock.refresh();
-    }
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/NodeDecorator.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/NodeDecorator.java
deleted file mode 100644
index 9ac0e6a..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/NodeDecorator.java
+++ /dev/null
@@ -1,582 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.decorator;
-
-import java.io.InputStream;
-import java.util.Calendar;
-
-import javax.jcr.AccessDeniedException;
-import javax.jcr.InvalidItemStateException;
-import javax.jcr.Item;
-import javax.jcr.ItemExistsException;
-import javax.jcr.ItemNotFoundException;
-import javax.jcr.NoSuchWorkspaceException;
-import javax.jcr.Node;
-import javax.jcr.NodeIterator;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.Property;
-import javax.jcr.PropertyIterator;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.UnsupportedRepositoryOperationException;
-import javax.jcr.Value;
-import javax.jcr.ValueFormatException;
-import javax.jcr.MergeException;
-import javax.jcr.lock.Lock;
-import javax.jcr.lock.LockException;
-import javax.jcr.nodetype.ConstraintViolationException;
-import javax.jcr.nodetype.NoSuchNodeTypeException;
-import javax.jcr.nodetype.NodeDefinition;
-import javax.jcr.nodetype.NodeType;
-import javax.jcr.version.Version;
-import javax.jcr.version.VersionException;
-import javax.jcr.version.VersionHistory;
-
-public class NodeDecorator extends ItemDecorator implements Node {
-
-    protected Node node;
-
-    public NodeDecorator(DecoratorFactory factory, Session session, Node node) {
-        super(factory, session, node);
-        this.node = node;
-    }
-
-    /**
-     * Returns the underlying <code>Node</code> of the <code>node</code>
-     * that decorates it. Unwrapping <code>null</code> returns <code>null</code>.
-     *
-     * @param node decorates the underlying node.
-     * @return the underlying node.
-     * @throws IllegalStateException if <code>node</code> is not of type
-     *                               {@link NodeDecorator}.
-     */
-    public static Node unwrap(Node node) {
-        if (node == null) {
-            return null;
-        }
-        if (node instanceof NodeDecorator) {
-            node = (Node) ((NodeDecorator) node).unwrap();
-        } else {
-            throw new IllegalStateException("node is not of type NodeDecorator");
-        }
-        return node;
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Node addNode(String name) throws ItemExistsException,
-            PathNotFoundException, VersionException,
-            ConstraintViolationException, LockException, RepositoryException {
-        Node child = node.addNode(name);
-        return factory.getNodeDecorator(session, child);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Node addNode(String name, String type) throws ItemExistsException,
-            PathNotFoundException, NoSuchNodeTypeException, LockException,
-            VersionException, ConstraintViolationException, RepositoryException {
-        Node child = node.addNode(name, type);
-        return factory.getNodeDecorator(session, child);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public void orderBefore(String srcChildRelPath, String destChildRelPath)
-            throws UnsupportedRepositoryOperationException, VersionException,
-            ConstraintViolationException, ItemNotFoundException,
-            LockException, RepositoryException {
-        node.orderBefore(srcChildRelPath, destChildRelPath);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Property setProperty(String name, Value value)
-            throws ValueFormatException, VersionException, LockException,
-            ConstraintViolationException, RepositoryException {
-        Property prop = node.setProperty(name, value);
-        return factory.getPropertyDecorator(session, prop);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Property setProperty(String name, Value value, int type)
-            throws ValueFormatException, VersionException, LockException,
-            ConstraintViolationException, RepositoryException {
-        Property prop = node.setProperty(name, value, type);
-        return factory.getPropertyDecorator(session, prop);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Property setProperty(String name, Value[] values)
-            throws ValueFormatException, VersionException, LockException,
-            ConstraintViolationException, RepositoryException {
-        Property prop = node.setProperty(name, values);
-        return factory.getPropertyDecorator(session, prop);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Property setProperty(String name, Value[] values, int type)
-            throws ValueFormatException, VersionException, LockException,
-            ConstraintViolationException, RepositoryException {
-        Property prop = node.setProperty(name, values, type);
-        return factory.getPropertyDecorator(session, prop);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Property setProperty(String name, String[] values)
-            throws ValueFormatException, VersionException, LockException,
-            ConstraintViolationException, RepositoryException {
-        Property prop = node.setProperty(name, values);
-        return factory.getPropertyDecorator(session, prop);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Property setProperty(String name, String[] values, int type)
-            throws ValueFormatException, VersionException, LockException,
-            ConstraintViolationException, RepositoryException {
-        Property prop = node.setProperty(name, values, type);
-        return factory.getPropertyDecorator(session, prop);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Property setProperty(String name, String value)
-            throws ValueFormatException, VersionException, LockException,
-            ConstraintViolationException, RepositoryException {
-        Property prop = node.setProperty(name, value);
-        return factory.getPropertyDecorator(session, prop);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Property setProperty(String name, String value, int type)
-            throws ValueFormatException, VersionException, LockException,
-            ConstraintViolationException, RepositoryException {
-        Property prop = node.setProperty(name, value, type);
-        return factory.getPropertyDecorator(session, prop);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Property setProperty(String name, InputStream value)
-            throws ValueFormatException, VersionException, LockException,
-            ConstraintViolationException, RepositoryException {
-        Property prop = node.setProperty(name, value);
-        return factory.getPropertyDecorator(session, prop);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Property setProperty(String name, boolean value)
-            throws ValueFormatException, VersionException, LockException,
-            ConstraintViolationException, RepositoryException {
-        Property prop = node.setProperty(name, value);
-        return factory.getPropertyDecorator(session, prop);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Property setProperty(String name, double value)
-            throws ValueFormatException, VersionException, LockException,
-            ConstraintViolationException, RepositoryException {
-        Property prop = node.setProperty(name, value);
-        return factory.getPropertyDecorator(session, prop);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Property setProperty(String name, long value)
-            throws ValueFormatException, VersionException, LockException,
-            ConstraintViolationException, RepositoryException {
-        Property prop = node.setProperty(name, value);
-        return factory.getPropertyDecorator(session, prop);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Property setProperty(String name, Calendar value)
-            throws ValueFormatException, VersionException, LockException,
-            ConstraintViolationException, RepositoryException {
-        Property prop = node.setProperty(name, value);
-        return factory.getPropertyDecorator(session, prop);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Property setProperty(String name, Node value)
-            throws ValueFormatException, VersionException, LockException,
-            ConstraintViolationException, RepositoryException {
-        Property prop = node.setProperty(name, NodeDecorator.unwrap(value));
-        return factory.getPropertyDecorator(session, prop);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Node getNode(String relPath) throws PathNotFoundException, RepositoryException {
-        Node n = node.getNode(relPath);
-        return factory.getNodeDecorator(session, n);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public NodeIterator getNodes() throws RepositoryException {
-        return new DecoratingNodeIterator(factory, session, node.getNodes());
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public NodeIterator getNodes(String namePattern)
-            throws RepositoryException {
-        return new DecoratingNodeIterator(factory, session, node.getNodes(namePattern));
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Property getProperty(String relPath)
-            throws PathNotFoundException, RepositoryException {
-        Property prop = node.getProperty(relPath);
-        return factory.getPropertyDecorator(session, prop);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public PropertyIterator getProperties() throws RepositoryException {
-        return new DecoratingPropertyIterator(factory, session, node.getProperties());
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public PropertyIterator getProperties(String namePattern)
-            throws RepositoryException {
-        return new DecoratingPropertyIterator(factory, session, node.getProperties(namePattern));
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Item getPrimaryItem() throws ItemNotFoundException,
-            RepositoryException {
-        return factory.getItemDecorator(session, node.getPrimaryItem());
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public String getUUID() throws UnsupportedRepositoryOperationException,
-            RepositoryException {
-        return node.getUUID();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public int getIndex() throws RepositoryException {
-        return node.getIndex();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public PropertyIterator getReferences() throws RepositoryException {
-        return new DecoratingPropertyIterator(factory, session, node.getReferences());
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public boolean hasNode(String relPath) throws RepositoryException {
-        return node.hasNode(relPath);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public boolean hasProperty(String relPath) throws RepositoryException {
-        return node.hasProperty(relPath);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public boolean hasNodes() throws RepositoryException {
-        return node.hasNodes();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public boolean hasProperties() throws RepositoryException {
-        return node.hasProperties();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public NodeType getPrimaryNodeType() throws RepositoryException {
-        return node.getPrimaryNodeType();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public NodeType[] getMixinNodeTypes() throws RepositoryException {
-        return node.getMixinNodeTypes();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public boolean isNodeType(String nodeTypeName) throws RepositoryException {
-        return node.isNodeType(nodeTypeName);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public void addMixin(String mixinName)
-            throws NoSuchNodeTypeException, VersionException,
-            ConstraintViolationException, LockException, RepositoryException {
-        node.addMixin(mixinName);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public void removeMixin(String mixinName)
-            throws NoSuchNodeTypeException, VersionException,
-            ConstraintViolationException, LockException, RepositoryException {
-        node.removeMixin(mixinName);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public boolean canAddMixin(String mixinName)
-            throws NoSuchNodeTypeException, RepositoryException {
-        return node.canAddMixin(mixinName);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public NodeDefinition getDefinition() throws RepositoryException {
-        return node.getDefinition();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Version checkin() throws VersionException,
-            UnsupportedRepositoryOperationException, InvalidItemStateException,
-            LockException, RepositoryException {
-        Version version = node.checkin();
-        return factory.getVersionDecorator(session, version);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public void checkout() throws UnsupportedRepositoryOperationException,
-            LockException, RepositoryException {
-        node.checkout();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public void doneMerge(Version version)
-            throws VersionException, InvalidItemStateException,
-            UnsupportedRepositoryOperationException, RepositoryException {
-        node.doneMerge(VersionDecorator.unwrap(version));
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public void cancelMerge(Version version)
-            throws VersionException, InvalidItemStateException,
-            UnsupportedRepositoryOperationException, RepositoryException {
-        node.cancelMerge(VersionDecorator.unwrap(version));
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public void update(String srcWorkspaceName)
-            throws NoSuchWorkspaceException, AccessDeniedException,
-            LockException, InvalidItemStateException, RepositoryException {
-        node.update(srcWorkspaceName);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public NodeIterator merge(String srcWorkspace, boolean bestEffort)
-            throws NoSuchWorkspaceException, AccessDeniedException,
-            MergeException, LockException, InvalidItemStateException,
-            RepositoryException {
-        NodeIterator nodes = node.merge(srcWorkspace, bestEffort);
-        return new DecoratingNodeIterator(factory, session, nodes);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public String getCorrespondingNodePath(String workspaceName)
-            throws ItemNotFoundException, NoSuchWorkspaceException,
-            AccessDeniedException, RepositoryException {
-        return node.getCorrespondingNodePath(workspaceName);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public boolean isCheckedOut() throws RepositoryException {
-        return node.isCheckedOut();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public void restore(String versionName, boolean removeExisting)
-            throws VersionException, ItemExistsException,
-            UnsupportedRepositoryOperationException, LockException,
-            InvalidItemStateException, RepositoryException {
-        node.restore(versionName, removeExisting);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public void restore(Version version, boolean removeExisting)
-            throws VersionException, ItemExistsException,
-            UnsupportedRepositoryOperationException, LockException,
-            RepositoryException {
-        node.restore(VersionDecorator.unwrap(version), removeExisting);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public void restore(Version version,
-                        String relPath,
-                        boolean removeExisting)
-            throws PathNotFoundException, ItemExistsException,
-            VersionException, ConstraintViolationException,
-            UnsupportedRepositoryOperationException, LockException,
-            InvalidItemStateException, RepositoryException {
-        node.restore(VersionDecorator.unwrap(version), relPath, removeExisting);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public void restoreByLabel(String versionLabel, boolean removeExisting)
-            throws VersionException, ItemExistsException,
-            UnsupportedRepositoryOperationException, LockException,
-            InvalidItemStateException, RepositoryException {
-        node.restoreByLabel(versionLabel, removeExisting);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public VersionHistory getVersionHistory()
-            throws UnsupportedRepositoryOperationException, RepositoryException {
-        VersionHistory hist = node.getVersionHistory();
-        return factory.getVersionHistoryDecorator(session, hist);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Version getBaseVersion()
-            throws UnsupportedRepositoryOperationException, RepositoryException {
-        return factory.getVersionDecorator(session, node.getBaseVersion());
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Lock lock(boolean isDeep, boolean isSessionScoped)
-            throws UnsupportedRepositoryOperationException, LockException,
-            AccessDeniedException, InvalidItemStateException,
-            RepositoryException {
-        Lock lock = node.lock(isDeep, isSessionScoped);
-        return factory.getLockDecorator(session, lock);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Lock getLock() throws UnsupportedRepositoryOperationException,
-            LockException, AccessDeniedException, RepositoryException {
-        Lock lock = node.getLock();
-        return factory.getLockDecorator(session, lock);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public void unlock() throws UnsupportedRepositoryOperationException,
-            LockException, AccessDeniedException, InvalidItemStateException,
-            RepositoryException {
-        node.unlock();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public boolean holdsLock() throws RepositoryException {
-        return node.holdsLock();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public boolean isLocked() throws RepositoryException {
-        return node.isLocked();
-    }
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/PropertyDecorator.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/PropertyDecorator.java
deleted file mode 100644
index 20918a7..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/PropertyDecorator.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.decorator;
-
-import javax.jcr.Property;
-import javax.jcr.Value;
-import javax.jcr.ValueFormatException;
-import javax.jcr.RepositoryException;
-import javax.jcr.Node;
-import javax.jcr.Session;
-import javax.jcr.nodetype.ConstraintViolationException;
-import javax.jcr.nodetype.PropertyDefinition;
-import javax.jcr.lock.LockException;
-import javax.jcr.version.VersionException;
-import java.io.InputStream;
-import java.util.Calendar;
-
-/**
- */
-public class PropertyDecorator extends ItemDecorator implements Property {
-
-    protected final Property property;
-
-    public PropertyDecorator(DecoratorFactory factory,
-                             Session session,
-                             Property property) {
-        super(factory, session, property);
-        this.property = property;
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public void setValue(Value value)
-            throws ValueFormatException, VersionException, LockException,
-            ConstraintViolationException, RepositoryException {
-        property.setValue(value);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public void setValue(Value[] values)
-            throws ValueFormatException, VersionException, LockException,
-            ConstraintViolationException, RepositoryException {
-        property.setValue(values);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public void setValue(String s)
-            throws ValueFormatException, VersionException, LockException,
-            ConstraintViolationException, RepositoryException {
-        property.setValue(s);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public void setValue(String[] strings)
-            throws ValueFormatException, VersionException, LockException,
-            ConstraintViolationException, RepositoryException {
-        property.setValue(strings);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public void setValue(InputStream inputStream)
-            throws ValueFormatException, VersionException, LockException,
-            ConstraintViolationException, RepositoryException {
-        property.setValue(inputStream);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public void setValue(long l)
-            throws ValueFormatException, VersionException, LockException,
-            ConstraintViolationException, RepositoryException {
-        property.setValue(l);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public void setValue(double v)
-            throws ValueFormatException, VersionException, LockException,
-            ConstraintViolationException, RepositoryException {
-        property.setValue(v);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public void setValue(Calendar calendar)
-            throws ValueFormatException, VersionException, LockException,
-            ConstraintViolationException, RepositoryException {
-        property.setValue(calendar);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public void setValue(boolean b)
-            throws ValueFormatException, VersionException, LockException,
-            ConstraintViolationException, RepositoryException {
-        property.setValue(b);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public void setValue(Node node)
-            throws ValueFormatException, VersionException, LockException,
-            ConstraintViolationException, RepositoryException {
-        property.setValue(NodeDecorator.unwrap(node));
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Value getValue() throws ValueFormatException, RepositoryException {
-        return property.getValue();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Value[] getValues() throws ValueFormatException, RepositoryException {
-        return property.getValues();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public String getString() throws ValueFormatException, RepositoryException {
-        return property.getString();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public InputStream getStream() throws ValueFormatException, RepositoryException {
-        return property.getStream();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public long getLong() throws ValueFormatException, RepositoryException {
-        return property.getLong();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public double getDouble() throws ValueFormatException, RepositoryException {
-        return property.getDouble();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Calendar getDate() throws ValueFormatException, RepositoryException {
-        return property.getDate();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public boolean getBoolean() throws ValueFormatException, RepositoryException {
-        return property.getBoolean();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Node getNode() throws ValueFormatException, RepositoryException {
-        return factory.getNodeDecorator(session, property.getNode());
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public long getLength() throws ValueFormatException, RepositoryException {
-        return property.getLength();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public long[] getLengths() throws ValueFormatException, RepositoryException {
-        return property.getLengths();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public PropertyDefinition getDefinition() throws RepositoryException {
-        return property.getDefinition();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public int getType() throws RepositoryException {
-        return property.getType();
-    }
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/QueryDecorator.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/QueryDecorator.java
deleted file mode 100644
index ceae8cb..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/QueryDecorator.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.decorator;
-
-import org.apache.jackrabbit.decorator.DecoratorFactory;
-
-import javax.jcr.query.Query;
-import javax.jcr.query.QueryResult;
-import javax.jcr.RepositoryException;
-import javax.jcr.ItemNotFoundException;
-import javax.jcr.Node;
-import javax.jcr.ItemExistsException;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.UnsupportedRepositoryOperationException;
-import javax.jcr.Session;
-import javax.jcr.lock.LockException;
-import javax.jcr.nodetype.ConstraintViolationException;
-import javax.jcr.version.VersionException;
-
-/**
- */
-public class QueryDecorator extends AbstractDecorator implements Query {
-
-    protected final Query query;
-
-    public QueryDecorator(DecoratorFactory factory, Session session, Query query) {
-        super(factory, session);
-        this.query = query;
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public QueryResult execute() throws RepositoryException {
-        return factory.getQueryResultDecorator(session, query.execute());
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public String getStatement() {
-        return query.getStatement();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public String getLanguage() {
-        return query.getLanguage();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public String getStoredQueryPath() throws ItemNotFoundException, RepositoryException {
-        return query.getStoredQueryPath();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Node storeAsNode(String absPath) throws ItemExistsException, PathNotFoundException, VersionException, ConstraintViolationException, LockException, UnsupportedRepositoryOperationException, RepositoryException {
-        Node node = query.storeAsNode(absPath);
-        return factory.getNodeDecorator(session, node);
-    }
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/QueryManagerDecorator.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/QueryManagerDecorator.java
deleted file mode 100644
index bc03998..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/QueryManagerDecorator.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.decorator;
-
-import org.apache.jackrabbit.decorator.DecoratorFactory;
-import org.apache.jackrabbit.decorator.NodeDecorator;
-
-import javax.jcr.query.QueryManager;
-import javax.jcr.query.Query;
-import javax.jcr.query.InvalidQueryException;
-import javax.jcr.RepositoryException;
-import javax.jcr.Node;
-import javax.jcr.Session;
-
-/**
- */
-public class QueryManagerDecorator
-        extends AbstractDecorator implements QueryManager {
-
-    protected final QueryManager manager;
-
-    public QueryManagerDecorator(DecoratorFactory factory, Session session, QueryManager manager) {
-        super(factory, session);
-        this.manager = manager;
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Query createQuery(String statement, String language)
-            throws InvalidQueryException, RepositoryException {
-        return factory.getQueryDecorator(session,
-                manager.createQuery(statement, language));
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Query getQuery(Node node) throws InvalidQueryException, RepositoryException {
-        Query query = manager.getQuery(NodeDecorator.unwrap(node));
-        return factory.getQueryDecorator(session, query);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public String[] getSupportedQueryLanguages() throws RepositoryException {
-        return manager.getSupportedQueryLanguages();
-    }
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/QueryResultDecorator.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/QueryResultDecorator.java
deleted file mode 100644
index dfd6eb8..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/QueryResultDecorator.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.decorator;
-
-import org.apache.jackrabbit.decorator.DecoratorFactory;
-import org.apache.jackrabbit.decorator.DecoratingNodeIterator;
-
-import javax.jcr.query.QueryResult;
-import javax.jcr.query.RowIterator;
-import javax.jcr.RepositoryException;
-import javax.jcr.NodeIterator;
-import javax.jcr.Session;
-
-/**
- */
-public class QueryResultDecorator
-        extends AbstractDecorator implements QueryResult {
-
-    protected final QueryResult result;
-
-    public QueryResultDecorator(DecoratorFactory factory, Session session, QueryResult result) {
-        super(factory, session);
-        this.result = result;
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public String[] getColumnNames() throws RepositoryException {
-        return result.getColumnNames();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public RowIterator getRows() throws RepositoryException {
-        return result.getRows();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public NodeIterator getNodes() throws RepositoryException {
-        NodeIterator nodes = result.getNodes();
-        return new DecoratingNodeIterator(factory, session, nodes);
-    }
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/RepositoryDecorator.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/RepositoryDecorator.java
deleted file mode 100644
index 4e5790d..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/RepositoryDecorator.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.decorator;
-
-import javax.jcr.Credentials;
-import javax.jcr.LoginException;
-import javax.jcr.NoSuchWorkspaceException;
-import javax.jcr.Repository;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-
-/**
- * Simple {@link Repository Repository} decorator.
- */
-public class RepositoryDecorator implements Repository {
-
-    private DecoratorFactory factory;
-
-    private Repository repository;
-
-    public RepositoryDecorator(
-            DecoratorFactory factory, Repository repository) {
-        this.factory = factory;
-        this.repository = repository;
-    }
-
-    /**
-     * Forwards the method call to the underlying repository.
-     */
-    public String[] getDescriptorKeys() {
-        return repository.getDescriptorKeys();
-    }
-
-    /**
-     * Forwards the method call to the underlying repository.
-     */
-    public String getDescriptor(String key) {
-        return repository.getDescriptor(key);
-    }
-
-    /**
-     * Forwards the method call to the underlying repository. The returned
-     * session is wrapped into a session decorator using the decorator factory.
-     *
-     * @return decorated session
-     */
-    public Session login(Credentials credentials, String workspaceName) throws
-            LoginException, NoSuchWorkspaceException, RepositoryException {
-        Session session = repository.login(credentials, workspaceName);
-        return factory.getSessionDecorator(this, session); 
-    }
-
-    /**
-     * Calls <code>login(credentials, null)</code>.
-     *
-     * @return decorated session
-     * @see #login(Credentials, String)
-     */
-    public Session login(Credentials credentials) throws LoginException,
-            NoSuchWorkspaceException, RepositoryException {
-        return login(credentials, null);
-    }
-
-    /**
-     * Calls <code>login(null, workspaceName)</code>.
-     *
-     * @return decorated session
-     * @see #login(Credentials, String)
-     */
-    public Session login(String workspaceName) throws LoginException,
-            NoSuchWorkspaceException, RepositoryException {
-        return login(null, workspaceName);
-    }
-
-    /**
-     * Calls <code>login(null, null)</code>.
-     *
-     * @return decorated session
-     * @see #login(Credentials, String)
-     */
-    public Session login() throws LoginException, NoSuchWorkspaceException,
-            RepositoryException {
-        return login(null, null);
-    }
-
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/SessionDecorator.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/SessionDecorator.java
deleted file mode 100644
index 06a80bc..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/SessionDecorator.java
+++ /dev/null
@@ -1,335 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.decorator;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.security.AccessControlException;
-
-import javax.jcr.AccessDeniedException;
-import javax.jcr.Credentials;
-import javax.jcr.InvalidItemStateException;
-import javax.jcr.InvalidSerializedDataException;
-import javax.jcr.Item;
-import javax.jcr.ItemExistsException;
-import javax.jcr.ItemNotFoundException;
-import javax.jcr.LoginException;
-import javax.jcr.NamespaceException;
-import javax.jcr.Node;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.Property;
-import javax.jcr.Repository;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.UnsupportedRepositoryOperationException;
-import javax.jcr.ValueFactory;
-import javax.jcr.Workspace;
-import javax.jcr.lock.LockException;
-import javax.jcr.nodetype.ConstraintViolationException;
-import javax.jcr.version.VersionException;
-
-import org.xml.sax.ContentHandler;
-import org.xml.sax.SAXException;
-
-/**
- */
-public class SessionDecorator implements Session {
-
-    protected final DecoratorFactory factory;
-
-    protected final Repository repository;
-
-    protected final Session session;
-
-    /**
-     * @param factory
-     * @param repository the repository (decorator) that was used to create the
-     *                   session decorator.
-     * @param session
-     */
-    public SessionDecorator(
-            DecoratorFactory factory, Repository repository, Session session) {
-        this.factory = factory;
-        this.repository = repository;
-        this.session = session;
-    }
-
-    /** {@inheritDoc} */
-    public Repository getRepository() {
-        return repository;
-    }
-
-    /**
-     * Forwards the method call to the underlying session.
-     */
-    public String getUserID() {
-        return session.getUserID();
-    }
-
-    /**
-     * Forwards the method call to the underlying session.
-     */
-    public Object getAttribute(String name) {
-        return session.getAttribute(name);
-    }
-
-    /**
-     * Forwards the method call to the underlying session.
-     */
-    public String[] getAttributeNames() {
-        return session.getAttributeNames();
-    }
-
-    /**
-     * Forwards the method call to the underlying session. The returned
-     * workspace is wrapped into a workspace decorator using the decorator
-     * factory.
-     *
-     * @return decorated workspace
-     */
-    public Workspace getWorkspace() {
-        return factory.getWorkspaceDecorator(this, session.getWorkspace());
-    }
-
-    /**
-     * Forwards the method call to the underlying session. The returned
-     * session is wrapped into a session decorator using the decorator factory.
-     *
-     * @return decorated session
-     */
-    public Session impersonate(Credentials credentials) throws LoginException,
-            RepositoryException {
-        Session newSession = session.impersonate(credentials);
-        return factory.getSessionDecorator(repository, newSession);
-    }
-
-    /**
-     * Forwards the method call to the underlying session. The returned
-     * node is wrapped into a node decorator using the decorator factory.
-     *
-     * @return decorated node
-     */
-    public Node getRootNode() throws RepositoryException {
-        Node root = session.getRootNode();
-        return factory.getNodeDecorator(this, root);
-    }
-
-    /**
-     * Forwards the method call to the underlying session. The returned
-     * node is wrapped into a node decorator using the decorator factory.
-     *
-     * @return decorated node
-     */
-    public Node getNodeByUUID(String uuid) throws ItemNotFoundException,
-            RepositoryException {
-        Node node = session.getNodeByUUID(uuid);
-        return factory.getNodeDecorator(this, node);
-    }
-
-    /**
-     * Forwards the method call to the underlying session. The returned
-     * item is wrapped into a node, property, or item decorator using
-     * the decorator factory. The decorator type depends on the type
-     * of the underlying item.
-     *
-     * @return decorated item, property, or node
-     */
-    public Item getItem(String absPath) throws PathNotFoundException,
-            RepositoryException {
-        Item item = session.getItem(absPath);
-        return factory.getItemDecorator(this, item);
-    }
-
-    /**
-     * Forwards the method call to the underlying session.
-     */
-    public boolean itemExists(String path) throws RepositoryException {
-        return session.itemExists(path);
-    }
-
-    /**
-     * Forwards the method call to the underlying session.
-     */
-    public void move(String srcAbsPath, String destAbsPath) throws
-            ItemExistsException, PathNotFoundException, VersionException,
-            RepositoryException {
-        session.move(srcAbsPath, destAbsPath);
-    }
-
-    /**
-     * Forwards the method call to the underlying session.
-     */
-    public void save() throws AccessDeniedException,
-            ConstraintViolationException, InvalidItemStateException,
-            VersionException, LockException, RepositoryException {
-        session.save();
-    }
-
-    /**
-     * Forwards the method call to the underlying session.
-     */
-    public void refresh(boolean keepChanges) throws RepositoryException {
-        session.refresh(keepChanges);
-    }
-
-    /**
-     * Forwards the method call to the underlying session.
-     */
-    public boolean hasPendingChanges() throws RepositoryException {
-        return session.hasPendingChanges();
-    }
-
-    /**
-     * Forwards the method call to the underlying session.
-     */
-    public void checkPermission(String absPath, String actions)
-            throws AccessControlException, RepositoryException {
-        session.checkPermission(absPath, actions);
-    }
-
-    /**
-     * Forwards the method call to the underlying session.
-     */
-    public ContentHandler getImportContentHandler(
-            String parentAbsPath, int uuidBehaviour)
-            throws PathNotFoundException, ConstraintViolationException,
-            VersionException, LockException, RepositoryException {
-        return session.getImportContentHandler(parentAbsPath, uuidBehaviour);
-    }
-
-    /**
-     * Forwards the method call to the underlying session.
-     */
-    public void importXML(
-            String parentAbsPath, InputStream in, int uuidBehaviour)
-            throws IOException, PathNotFoundException, ItemExistsException,
-            ConstraintViolationException, VersionException,
-            InvalidSerializedDataException, LockException, RepositoryException {
-        session.importXML(parentAbsPath, in, uuidBehaviour);
-    }
-
-    /**
-     * Forwards the method call to the underlying session.
-     */
-    public void exportSystemView(
-            String absPath, ContentHandler contentHandler,
-            boolean binaryAsLink, boolean noRecurse)
-            throws PathNotFoundException, SAXException, RepositoryException {
-        session.exportSystemView(
-                absPath, contentHandler, binaryAsLink, noRecurse);
-    }
-
-    /**
-     * Forwards the method call to the underlying session.
-     */
-    public void exportSystemView(
-            String absPath, OutputStream out,
-            boolean binaryAsLink, boolean noRecurse)
-            throws IOException, PathNotFoundException, RepositoryException {
-        session.exportSystemView(absPath, out, binaryAsLink, noRecurse);
-    }
-
-    /**
-     * Forwards the method call to the underlying session.
-     */
-    public void exportDocumentView(
-            String absPath, ContentHandler contentHandler,
-            boolean binaryAsLink, boolean noRecurse)
-            throws PathNotFoundException, SAXException, RepositoryException {
-        session.exportDocumentView(
-                absPath, contentHandler, binaryAsLink, noRecurse);
-    }
-
-    /**
-     * Forwards the method call to the underlying session.
-     */
-    public void exportDocumentView(
-            String absPath, OutputStream out,
-            boolean binaryAsLink, boolean noRecurse) 
-            throws IOException, PathNotFoundException, RepositoryException {
-        session.exportDocumentView(absPath, out, binaryAsLink, noRecurse);
-    }
-
-    /**
-     * Forwards the method call to the underlying session.
-     */
-    public void setNamespacePrefix(String prefix, String uri)
-            throws NamespaceException, RepositoryException {
-        session.setNamespacePrefix(prefix, uri);
-    }
-
-    /**
-     * Forwards the method call to the underlying session.
-     */
-    public String[] getNamespacePrefixes() throws RepositoryException {
-        return session.getNamespacePrefixes();
-    }
-
-    /**
-     * Forwards the method call to the underlying session.
-     */
-    public String getNamespaceURI(String prefix) throws NamespaceException,
-            RepositoryException {
-        return session.getNamespaceURI(prefix);
-    }
-
-    /**
-     * Forwards the method call to the underlying session.
-     */
-    public String getNamespacePrefix(String uri) throws NamespaceException,
-            RepositoryException {
-        return session.getNamespacePrefix(uri);
-    }
-
-    /**
-     * Forwards the method call to the underlying session.
-     */
-    public void logout() {
-        session.logout();
-    }
-
-    /**
-     * Forwards the method call to the underlying session.
-     */
-    public void addLockToken(String lt) {
-        session.addLockToken(lt);
-    }
-
-    /**
-     * Forwards the method call to the underlying session.
-     */
-    public String[] getLockTokens() {
-        return session.getLockTokens();
-    }
-
-    /**
-     * Forwards the method call to the underlying session.
-     */
-    public void removeLockToken(String lt) {
-        session.removeLockToken(lt);
-    }
-
-    public ValueFactory getValueFactory()
-            throws UnsupportedRepositoryOperationException, RepositoryException {
-        return factory.getValueFactoryDecorator(this, session.getValueFactory());
-    }
-
-    public boolean isLive() {
-        return session.isLive();
-    }
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/TrussDecoratorFactory.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/TrussDecoratorFactory.java
deleted file mode 100644
index c998fd3..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/TrussDecoratorFactory.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.decorator;
-
-import org.apache.log4j.Logger;
-
-import javax.jcr.Node;
-import javax.jcr.Session;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.RepositoryException;
-import javax.jcr.NodeIterator;
-import javax.jcr.version.Version;
-import javax.jcr.version.VersionHistory;
-
-/**
- * Decorator implementation that logs all calls to:
- * <ul>
- * <li>{@link javax.jcr.Node#getNode(String)}</li>
- * <li>{@link javax.jcr.Node#getNodes()}</li>
- * <li>{@link javax.jcr.Node#getNodes(String)}</li>
- * </ul>
- */
-public class TrussDecoratorFactory extends DefaultDecoratorFactory {
-
-    private static final Logger log = Logger.getLogger(TrussDecoratorFactory.class);
-
-    /**
-     * @inheritDoc
-     */
-    public Node getNodeDecorator(Session session, Node node) {
-        if (node instanceof Version) {
-            return getVersionDecorator(session, (Version) node);
-        } else if (node instanceof VersionHistory) {
-            return getVersionHistoryDecorator(session, (VersionHistory) node);
-        } else {
-            return new TrussNodeDecorator(this, session, node);
-        }
-    }
-
-    /**
-     * Node decorator that logs calls to {@link #getNode(String)},
-     * {@link #getNodes()} and {@link #getNodes(String)}.
-     */
-    private static final class TrussNodeDecorator extends NodeDecorator {
-
-        public TrussNodeDecorator(DecoratorFactory factory, Session session, Node node) {
-            super(factory, session, node);
-        }
-
-        /**
-         * @inheritDoc
-         */
-        public Node getNode(String relPath)
-                throws PathNotFoundException, RepositoryException {
-            log.info("<" + node.getPath() + ">.getNode(" + relPath + ")");
-            return super.getNode(relPath);
-        }
-
-        /**
-         * @inheritDoc
-         */
-        public NodeIterator getNodes() throws RepositoryException {
-            log.info("<" + node.getPath() + ">.getNodes()");
-            return super.getNodes();
-        }
-
-        /**
-         * @inheritDoc
-         */
-        public NodeIterator getNodes(String namePattern)
-                throws RepositoryException {
-            log.info("<" + node.getPath() + ">.getNodes(" + namePattern + ")");
-            return super.getNodes(namePattern);
-        }
-    }
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/ValueFactoryDecorator.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/ValueFactoryDecorator.java
deleted file mode 100644
index 17d2143..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/ValueFactoryDecorator.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.decorator;
-
-import javax.jcr.ValueFactory;
-import javax.jcr.Value;
-import javax.jcr.ValueFormatException;
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import java.util.Calendar;
-import java.io.InputStream;
-
-/**
- */
-public class ValueFactoryDecorator
-        extends AbstractDecorator implements ValueFactory {
-
-    protected final ValueFactory valueFactory;
-
-    public ValueFactoryDecorator(DecoratorFactory factory, Session session, ValueFactory valueFactory) {
-        super(factory, session);
-        this.valueFactory = valueFactory;
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Value createValue(String value) {
-        return valueFactory.createValue(value);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Value createValue(String value, int type)
-            throws ValueFormatException {
-        return valueFactory.createValue(value, type);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Value createValue(long value) {
-        return valueFactory.createValue(value);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Value createValue(double value) {
-        return valueFactory.createValue(value);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Value createValue(boolean value) {
-        return valueFactory.createValue(value);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Value createValue(Calendar value) {
-        return valueFactory.createValue(value);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Value createValue(InputStream value) {
-        return valueFactory.createValue(value);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Value createValue(Node value) throws RepositoryException {
-        return valueFactory.createValue(NodeDecorator.unwrap(value));
-    }
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/VersionDecorator.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/VersionDecorator.java
deleted file mode 100644
index 580108f..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/VersionDecorator.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.decorator;
-
-import org.apache.jackrabbit.decorator.NodeDecorator;
-import org.apache.jackrabbit.decorator.DecoratorFactory;
-
-import javax.jcr.Session;
-import javax.jcr.RepositoryException;
-import javax.jcr.version.Version;
-import javax.jcr.version.VersionHistory;
-import java.util.Calendar;
-
-/**
- */
-public class VersionDecorator extends NodeDecorator implements Version {
-
-    protected final Version version;
-
-    public VersionDecorator(DecoratorFactory factory,
-                            Session session,
-                            Version version) {
-        super(factory, session, version);
-        this.version = version;
-    }
-
-    /**
-     * Returns the underlying <code>Version</code> of the <code>version</code>
-     * that decorates it. Unwrapping <code>null</code> returns <code>null</code>.
-     *
-     * @param version decorates the underlying version.
-     * @return the underlying version.
-     * @throws IllegalStateException if <code>version</code> is not of type
-     *                               {@link VersionDecorator}.
-     */
-    public static Version unwrap(Version version) {
-        if (version == null) {
-            return null;
-        }
-        if (version instanceof VersionDecorator) {
-            version = (Version) ((VersionDecorator) version).unwrap();
-        } else {
-            throw new IllegalStateException("version is not of type VersionDecorator");
-        }
-        return version;
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public VersionHistory getContainingHistory() throws RepositoryException {
-        VersionHistory vHistory = version.getContainingHistory();
-        return factory.getVersionHistoryDecorator(session, vHistory);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Calendar getCreated() throws RepositoryException {
-        return version.getCreated();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Version[] getSuccessors() throws RepositoryException {
-        Version[] successors = version.getSuccessors();
-        for (int i = 0; i < successors.length; i++) {
-            successors[i] = factory.getVersionDecorator(session, successors[i]);
-        }
-        return successors;
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Version[] getPredecessors() throws RepositoryException {
-        Version[] predecessors = version.getPredecessors();
-        for (int i = 0; i < predecessors.length; i++) {
-            predecessors[i] = factory.getVersionDecorator(session, predecessors[i]);
-        }
-        return predecessors;
-    }
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/VersionHistoryDecorator.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/VersionHistoryDecorator.java
deleted file mode 100644
index 897d760..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/VersionHistoryDecorator.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.decorator;
-
-import org.apache.jackrabbit.decorator.NodeDecorator;
-import org.apache.jackrabbit.decorator.DecoratorFactory;
-import org.apache.jackrabbit.decorator.DecoratingVersionIterator;
-import org.apache.jackrabbit.decorator.VersionDecorator;
-
-import javax.jcr.version.VersionHistory;
-import javax.jcr.version.Version;
-import javax.jcr.version.VersionIterator;
-import javax.jcr.version.VersionException;
-import javax.jcr.Session;
-import javax.jcr.RepositoryException;
-import javax.jcr.ReferentialIntegrityException;
-import javax.jcr.AccessDeniedException;
-import javax.jcr.UnsupportedRepositoryOperationException;
-
-/**
- */
-public class VersionHistoryDecorator extends NodeDecorator
-        implements VersionHistory {
-
-    protected final VersionHistory versionHistory;
-
-    public VersionHistoryDecorator(DecoratorFactory factory,
-                                   Session session,
-                                   VersionHistory versionHistory) {
-        super(factory, session, versionHistory);
-        this.versionHistory = versionHistory;
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public String getVersionableUUID() throws RepositoryException {
-        return versionHistory.getVersionableUUID();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Version getRootVersion() throws RepositoryException {
-        Version version = versionHistory.getRootVersion();
-        return factory.getVersionDecorator(session, version);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public VersionIterator getAllVersions() throws RepositoryException {
-        return new DecoratingVersionIterator(factory, session, versionHistory.getAllVersions());
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Version getVersion(String versionName) throws VersionException, RepositoryException {
-        Version version = versionHistory.getVersion(versionName);
-        return factory.getVersionDecorator(session, version);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Version getVersionByLabel(String label) throws RepositoryException {
-        Version version = versionHistory.getVersionByLabel(label);
-        return factory.getVersionDecorator(session, version);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public void addVersionLabel(String versionName,
-                                String label,
-                                boolean moveLabel) throws VersionException, RepositoryException {
-        versionHistory.addVersionLabel(versionName, label, moveLabel);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public void removeVersionLabel(String label) throws VersionException, RepositoryException {
-        versionHistory.removeVersionLabel(label);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public boolean hasVersionLabel(String label) throws RepositoryException {
-        return versionHistory.hasVersionLabel(label);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public boolean hasVersionLabel(Version version, String label)
-            throws VersionException, RepositoryException {
-        return versionHistory.hasVersionLabel(VersionDecorator.unwrap(version), label);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public String[] getVersionLabels() throws RepositoryException {
-        return versionHistory.getVersionLabels();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public String[] getVersionLabels(Version version)
-            throws VersionException, RepositoryException {
-        return versionHistory.getVersionLabels(VersionDecorator.unwrap(version));
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public void removeVersion(String versionName)
-            throws ReferentialIntegrityException, AccessDeniedException,
-            UnsupportedRepositoryOperationException, VersionException,
-            RepositoryException {
-        versionHistory.removeVersion(versionName);
-    }
-
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/WorkspaceDecorator.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/WorkspaceDecorator.java
deleted file mode 100644
index c6f978f..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/WorkspaceDecorator.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.decorator;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-import javax.jcr.AccessDeniedException;
-import javax.jcr.InvalidItemStateException;
-import javax.jcr.InvalidSerializedDataException;
-import javax.jcr.ItemExistsException;
-import javax.jcr.NamespaceRegistry;
-import javax.jcr.NoSuchWorkspaceException;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.UnsupportedRepositoryOperationException;
-import javax.jcr.Workspace;
-import javax.jcr.lock.LockException;
-import javax.jcr.nodetype.ConstraintViolationException;
-import javax.jcr.nodetype.NodeTypeManager;
-import javax.jcr.observation.ObservationManager;
-import javax.jcr.query.QueryManager;
-import javax.jcr.version.Version;
-import javax.jcr.version.VersionException;
-
-import org.xml.sax.ContentHandler;
-
-/**
- * Simple workspace decorator.
- */
-public class WorkspaceDecorator extends AbstractDecorator implements Workspace {
-
-    /** The underlying workspace instance. */
-    protected final Workspace workspace;
-
-    /**
-     * Creates a workspace decorator.
-     *
-     * @param factory
-     * @param session
-     * @param workspace
-     */
-    public WorkspaceDecorator(
-            DecoratorFactory factory, Session session, Workspace workspace) {
-        super(factory, session);
-        this.workspace = workspace;
-    }
-
-    /** {@inheritDoc} */
-    public Session getSession() {
-        return session;
-    }
-
-    /**
-     * Forwards the method call to the underlying workspace.
-     */
-    public String getName() {
-        return workspace.getName();
-    }
-
-    /**
-     * Forwards the method call to the underlying workspace.
-     */
-    public void copy(String srcAbsPath, String destAbsPath)
-            throws ConstraintViolationException, VersionException,
-            AccessDeniedException, PathNotFoundException, ItemExistsException,
-            LockException, RepositoryException {
-        workspace.copy(srcAbsPath, destAbsPath);
-    }
-
-    /**
-     * Forwards the method call to the underlying workspace.
-     */
-    public void copy(String srcWorkspace, String srcAbsPath, String destAbsPath)
-            throws NoSuchWorkspaceException, ConstraintViolationException,
-            VersionException, AccessDeniedException, PathNotFoundException,
-            ItemExistsException, LockException, RepositoryException {
-        workspace.copy(srcWorkspace, srcAbsPath, destAbsPath);
-    }
-
-    /**
-     * Forwards the method call to the underlying workspace.
-     */
-    public void clone(String srcWorkspace, String srcAbsPath,
-            String destAbsPath, boolean removeExisting)
-            throws NoSuchWorkspaceException, ConstraintViolationException,
-            VersionException, AccessDeniedException, PathNotFoundException,
-            ItemExistsException, LockException, RepositoryException {
-        workspace.clone(srcWorkspace, srcAbsPath, destAbsPath, removeExisting);
-    }
-
-    /**
-     * Forwards the method call to the underlying workspace.
-     */
-    public void move(String srcAbsPath, String destAbsPath)
-            throws ConstraintViolationException, VersionException,
-            AccessDeniedException, PathNotFoundException, ItemExistsException,
-            LockException, RepositoryException {
-        workspace.move(srcAbsPath, destAbsPath);
-    }
-
-    /**
-     * Forwards the method call to the underlying workspace.
-     */
-    public void restore(Version[] versions, boolean removeExisting)
-            throws ItemExistsException,
-            UnsupportedRepositoryOperationException, VersionException,
-            LockException, InvalidItemStateException, RepositoryException {
-        Version[] tmp = new Version[versions.length];
-        for (int i = 0; i < versions.length; i++) {
-            tmp[i] = VersionDecorator.unwrap(versions[i]);
-        }
-        workspace.restore(tmp, removeExisting);
-    }
-
-    /**
-     * Forwards the method call to the underlying workspace.
-     */
-    public QueryManager getQueryManager() throws RepositoryException {
-        return factory.getQueryManagerDecorator(session, workspace.getQueryManager());
-    }
-
-    /**
-     * Forwards the method call to the underlying workspace.
-     */
-    public NamespaceRegistry getNamespaceRegistry() throws RepositoryException {
-        return workspace.getNamespaceRegistry();
-    }
-
-    /**
-     * Forwards the method call to the underlying workspace.
-     */
-    public NodeTypeManager getNodeTypeManager() throws RepositoryException {
-        return workspace.getNodeTypeManager();
-    }
-
-    /**
-     * Forwards the method call to the underlying workspace.
-     */
-    public ObservationManager getObservationManager() throws
-            UnsupportedRepositoryOperationException, RepositoryException {
-        return workspace.getObservationManager();
-    }
-
-    /**
-     * Forwards the method call to the underlying workspace.
-     */
-    public String[] getAccessibleWorkspaceNames() throws RepositoryException {
-        return workspace.getAccessibleWorkspaceNames();
-    }
-
-    /**
-     * Forwards the method call to the underlying workspace.
-     */
-    public ContentHandler getImportContentHandler(
-            String parentAbsPath, int uuidBehaviour)
-            throws PathNotFoundException, ConstraintViolationException,
-            VersionException, LockException, RepositoryException {
-        return workspace.getImportContentHandler(parentAbsPath, uuidBehaviour);
-    }
-
-    /**
-     * Forwards the method call to the underlying workspace.
-     */
-    public void importXML(
-            String parentAbsPath, InputStream in, int uuidBehaviour)
-            throws IOException, PathNotFoundException, ItemExistsException,
-            ConstraintViolationException, InvalidSerializedDataException,
-            LockException, RepositoryException {
-        workspace.importXML(parentAbsPath, in, uuidBehaviour);
-    }
-
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/package.html b/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/package.html
deleted file mode 100644
index ae2c409..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/package.html
+++ /dev/null
@@ -1,69 +0,0 @@
-<body>
-Generic JCR decorator layer.
-<p>
-This package implements a generic decorator layer for the Content Repository
-for Java technology API (JCR). This layer can be used to add various extra
-functionality and responsibilities to existing JCR implementations without
-having to modify or even access the original source code. The decorator layer
-implemented by this package functions entirely on the JCR API level without
-any dependencies to an underlying implementation.
-<p>
-This decorator layer implements the Decorator design pattern on a package
-level for the entire javax.jcr package. A client only needs to decorate
-a top level Repository instance, and the decorator layer will automatically
-handle the decoration of all Session, Node, and other JCR objects acquired
-using the decorated repository.
-
-<h2>Usage of the decorator layer</h2>
-<p>
-To use the decorator layer, a client should first acquire a Repository
-reference using whatever mechanism supported by the repository implementation
-in use. Then the client needs to create a DecoratorFactory instance and use
-it to decorate the repository. The resulting repository decorator can then
-be used as a normal repository instance. All other decorator instantiation
-will then be handled internally by the decorator layer using the given
-decorator factory.
-<p>
-The following example code illustrates how the decorator layer is instantiated
-and used.
-<pre>
-    // Acquire a repository instance normally
-    Repository repo = ...;
-    
-    // Create the decorator layer
-    DecoratorFactory factory = ...;
-    Repository deco = factory.getRepositoryDecorator(repo);
-    
-    // Use the decorated repository via the normal JCR API
-    Session session = deco.login();
-    Node root = session.getRootNode();
-    Node node = root.getNode(...);
-    Property prop = node.getProperty(...);
-</pre>
-<p>
-The diagram below shows the object instances created by default
-by the above code.
-<p align="center">
-<img src="doc-files/instances.jpg">
-</p>
-
-<h2>Extending the decorator layer</h2>
-<p>
-The Factory design pattern used in the DecoratorFactory interface and the
-default decorator classes makes it easy to extend the functionality of the
-decorator layer. Specific decorator functionality can be added by subclassing
-the default decorators included in this package and providing a custom
-DecoratorFactory that uses these specific decorator classes instead of the
-defaults.
-<p>
-For example, a decorator for mapping user accounts between authentication
-realms could subclass the RepositoryDecorator and SessionDecorator classes
-and override the login() and impersonate() methods with custom functionality.
-The decorator implementation would also provide a customized DecoratorFactory
-for creating a decorator layer that uses the user account mapping
-functionality. The layer can then be wrapped on top of an existing
-repository implementation.
-<p>
-See the org.apache.jackrabbit.cache and org.apache.jackrabbit.trace packages
-for examples of such decorator implementations.
-</body>
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/iterator/ArrayIterator.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/iterator/ArrayIterator.java
deleted file mode 100644
index 83b1e33..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/iterator/ArrayIterator.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.iterator;
-
-import java.util.NoSuchElementException;
-
-import javax.jcr.RangeIterator;
-
-/**
- * Array implementation of the JCR
- * {@link javax.jcr.RangeIterator RangeIterator} interface. This class
- * implements the RangeIterator functionality for an underlying array
- * of objects. Used as the base class for the type-specific iterator
- * classes defined in this package.
- */
-class ArrayIterator implements RangeIterator {
-
-    /** The current iterator position. */
-    private int position;
-
-    /** The underlying array of objects. */
-    private final Object[] array;
-
-    /**
-     * Creates an iterator for the given array of objects.
-     *
-     * @param array the objects to iterate
-     */
-    protected ArrayIterator(Object[] array) {
-        this.position = 0;
-        this.array = array;
-    }
-
-    /**
-     * Checks whether there are more elements in the array.
-     *
-     * @return <code>true</code> if more elements are available,
-     *         <code>false</code> otherwise
-     * @see Iterator#hasNext()
-     */
-    public boolean hasNext() {
-        return (position < array.length);
-    }
-
-    /**
-     * Returns the next array element and advances the array position.
-     *
-     * @return next element
-     * @see Iterator#next()
-     */
-    public Object next() {
-        return array[position++];
-    }
-
-    /**
-     * Element removal is not supported.
-     *
-     * @throws UnsupportedOperationException always thrown
-     * @see Iterator#remove()
-     */
-    public void remove() throws UnsupportedOperationException {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Advances the array position the given number of elements.
-     *
-     * @param items number of items to skip
-     * @throws IllegalArgumentException if the given number of items is negative
-     * @throws NoSuchElementException if skipping past the end of the array
-     * @see RangeIterator#skip(long)
-     */
-    public void skip(long items)
-            throws IllegalArgumentException, NoSuchElementException {
-        if (items < 0) {
-            throw new IllegalArgumentException("Negative number of items");
-        } else if (position + items < array.length) {
-            position += items;
-        } else {
-            throw new NoSuchElementException("No more elements in the array");
-        }
-    }
-
-    /**
-     * Returns the length of the array.
-     *
-     * @return array length
-     * @see RangeIterator#getSize()
-     */
-    public long getSize() {
-        return array.length;
-    }
-
-    /**
-     * Returns the current array position
-     *
-     * @return array position
-     * @see RangeIterator#getPosition()
-     */
-    public long getPosition() {
-        return position;
-    }
-
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/iterator/ArrayNodeIterator.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/iterator/ArrayNodeIterator.java
deleted file mode 100644
index 325d4d7..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/iterator/ArrayNodeIterator.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.iterator;
-
-import java.util.Collection;
-
-import javax.jcr.Node;
-import javax.jcr.NodeIterator;
-
-/**
- * Array implementation of the JCR
- * {@link javax.jcr.NodeIterator NodeIterator} interface.
- */
-public class ArrayNodeIterator extends ArrayIterator implements NodeIterator {
-
-    /**
-     * Creates an iterator for the given array of nodes.
-     *
-     * @param nodes the nodes to iterate
-     */
-    public ArrayNodeIterator(Node[] nodes) {
-        super(nodes);
-    }
-
-    /**
-     * Creates an iterator for the given collection of nodes.
-     *
-     * @param nodes the nodes to iterate
-     */
-    public ArrayNodeIterator(Collection nodes) {
-        this((Node[]) nodes.toArray(new Node[nodes.size()]));
-    }
-
-    /**
-     * Returns the next node in the array.
-     *
-     * @return next node
-     * @see NodeIterator#nextNode()
-     */
-    public Node nextNode() {
-        return (Node) next();
-    }
-
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/iterator/ArrayNodeTypeIterator.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/iterator/ArrayNodeTypeIterator.java
deleted file mode 100644
index 1b9f954..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/iterator/ArrayNodeTypeIterator.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.iterator;
-
-import java.util.Collection;
-
-import javax.jcr.nodetype.NodeType;
-import javax.jcr.nodetype.NodeTypeIterator;
-
-/**
- * Array implementation of the JCR
- * {@link javax.jcr.NodeTypeIterator NodeTypeIterator} interface.
- */
-public class ArrayNodeTypeIterator extends ArrayIterator implements
-        NodeTypeIterator {
-
-    /**
-     * Creates an iterator for the given array of node types.
-     *
-     * @param types the node types to iterate
-     */
-    public ArrayNodeTypeIterator(NodeType[] types) {
-        super(types);
-    }
-
-    /**
-     * Creates an iterator for the given collection of node types.
-     *
-     * @param types the node types to iterate
-     */
-    public ArrayNodeTypeIterator(Collection types) {
-        this((NodeType[]) types.toArray(new NodeType[types.size()]));
-    }
-
-    /**
-     * Returns the next node type in the array.
-     *
-     * @return next node type
-     * @see NodeTypeIterator#nextNodeType()
-     */
-    public NodeType nextNodeType() {
-        return (NodeType) next();
-    }
-
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/iterator/ArrayPropertyIterator.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/iterator/ArrayPropertyIterator.java
deleted file mode 100644
index ed85fb8..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/iterator/ArrayPropertyIterator.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.iterator;
-
-import java.util.Collection;
-
-import javax.jcr.Property;
-import javax.jcr.PropertyIterator;
-
-/**
- * Array implementation of the JCR
- * {@link javax.jcr.PropertyIterator PropertyIterator} interface.
- */
-public class ArrayPropertyIterator extends ArrayIterator
-        implements PropertyIterator {
-
-    /**
-     * Creates an iterator for the given array of properties.
-     *
-     * @param properties the properties to iterate
-     */
-    public ArrayPropertyIterator(Property[] properties) {
-        super(properties);
-    }
-
-    /**
-     * Creates an iterator for the given collection of properties.
-     *
-     * @param properties the properties to iterate
-     */
-    public ArrayPropertyIterator(Collection properties) {
-        this((Property[]) properties.toArray(new Property[properties.size()]));
-    }
-
-    /**
-     * Returns the next property in the array.
-     *
-     * @return next property
-     * @see PropertyIterator#nextProperty()
-     */
-    public Property nextProperty() {
-        return (Property) next();
-    }
-
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/iterator/package.html b/contrib/jcr-ext/src/java/org/apache/jackrabbit/iterator/package.html
deleted file mode 100644
index f4fe0af..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/iterator/package.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<body>
-Utility classes for implementing JCR iterators based on static arrays.
-<p>
-This package contains array-based implementations of the JCR
-{@link javax.jcr.RangeIterator RangeIterator} interfaces.
-This package depends only on the standard JCR and J2SE APIs.
-</body>
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/lite/LiteNamespaceRegistry.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/lite/LiteNamespaceRegistry.java
deleted file mode 100644
index e37217c..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/lite/LiteNamespaceRegistry.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.lite;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import javax.jcr.NamespaceException;
-import javax.jcr.NamespaceRegistry;
-import javax.jcr.RepositoryException;
-
-import org.apache.jackrabbit.base.BaseNamespaceRegistry;
-
-/**
- * TODO
- */
-public class LiteNamespaceRegistry extends BaseNamespaceRegistry
-        implements NamespaceRegistry {
-
-    private final Map namespaces = new HashMap();
-
-    public LiteNamespaceRegistry() {
-        addNamespace("jcr", "http://www.jcp.org/jcr/1.0");
-        addNamespace("nt", "http://www.jcp.org/jcr/nt/1.0");
-        addNamespace("mix", "http://www.jcp.org/jcr/mix/1.0");
-        addNamespace("xml", "http://www.w3.org/XML/1998/namespace");
-        addNamespace("", "");
-    }
-
-    protected void addNamespace(String prefix, String uri) {
-        namespaces.put(prefix, uri);
-    }
-
-    public String getPrefix(String uri) throws RepositoryException {
-        Iterator iterator = namespaces.entrySet().iterator();
-        while (iterator.hasNext()) {
-            Map.Entry entry = (Map.Entry) iterator.next();
-            if (uri.equals(entry.getValue())) {
-                return (String) entry.getKey();
-            }
-        }
-        throw new NamespaceException("Namespace URI " + uri + " not found");
-    }
-
-    public String[] getPrefixes() throws RepositoryException {
-        return (String[])
-            namespaces.keySet().toArray(new String[namespaces.size()]);
-    }
-
-    public String getURI(String prefix) throws RepositoryException {
-        String uri = (String) namespaces.get(prefix);
-        if (uri != null) {
-            return uri;
-        } else {
-            throw new NamespaceException("Prefix " + prefix + " not found");
-        }
-    }
-
-    public String[] getURIs() throws RepositoryException {
-        return (String[])
-            namespaces.values().toArray(new String[namespaces.size()]);
-    }
-
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/lite/LiteNode.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/lite/LiteNode.java
deleted file mode 100644
index 39e5a28..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/lite/LiteNode.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.lite;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-
-import org.apache.jackrabbit.base.BaseNode;
-
-/**
- * TODO
- */
-public class LiteNode extends BaseNode implements Node {
-
-    private Session session;
-
-    public Session getSession() throws RepositoryException {
-        return session;
-    }
-
-    protected void setSession(Session session) {
-        this.session = session;
-    }
-
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/lite/LiteRepository.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/lite/LiteRepository.java
deleted file mode 100644
index 9013bed..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/lite/LiteRepository.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.lite;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.Properties;
-
-import javax.jcr.Repository;
-
-import org.apache.jackrabbit.base.BaseRepository;
-
-/**
- * TODO
- */
-public class LiteRepository extends BaseRepository implements Repository {
-
-    private final Properties descriptors = new Properties();
-
-    public LiteRepository() {
-        setDescriptor(
-                Repository.SPEC_NAME_DESC,
-                "Content Repository API for Java(TM) Technology Specification");
-        setDescriptor(Repository.SPEC_VERSION_DESC, "1.0");
-    }
-
-    /**
-     * Sets the value of the repository descriptor with the given key.
-     *
-     * @param key descriptor key
-     * @param value descriptor value
-     */
-    protected void setDescriptor(String key, String value) {
-        descriptors.setProperty(key, value);
-    }
-    
-    /**
-     * Returns the value of the repository descriptor with the given key.
-     *
-     * @param descriptor key
-     * @return descriptor value, or <code>null</code> if not found
-     * @see Repository#getDescriptor(String)
-     */
-    public String getDescriptor(String key) {
-        return descriptors.getProperty(key);
-    }
-
-    /**
-     * Returns the available repository descriptor keys.
-     *
-     * @return descriptor keys
-     * @see Repository#getDescriptorKeys()
-     */
-    public String[] getDescriptorKeys() {
-        List keys = Collections.list(descriptors.propertyNames());
-        return (String[]) keys.toArray(new String[keys.size()]);
-    }
-
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/lite/LiteSession.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/lite/LiteSession.java
deleted file mode 100644
index a8e5325..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/lite/LiteSession.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.lite;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-import javax.jcr.Repository;
-import javax.jcr.Session;
-import javax.jcr.Workspace;
-
-import org.apache.jackrabbit.base.BaseSession;
-
-/**
- * TODO
- */
-public class LiteSession extends BaseSession implements Session {
-
-    /** The content repository to which this session belongs. */
-    private Repository repository;
-
-    /** The workspace associated with this session. */
-    private Workspace workspace;
-
-    private final Map attributes = new HashMap();
-
-    private String userID;
-
-    private boolean live = true;
-
-    /** Lock tokens held by this session. */
-    private final Set lockTokens = new HashSet();
-
-    /**
-     * Returns the content repository to which this session belongs.
-     * Subclasses can use the
-     * {@link #setRepository(Repository) setRepository(Repository)} method
-     * to set the content repository during session construction.
-     *
-     * @return content repository
-     * @see Session#getRepository()
-     */
-    public Repository getRepository() {
-        return repository;
-    }
-
-    /**
-     * Sets the content repository to which this session belongs.
-     *
-     * @param repository content repository
-     * @see getRepository()
-     */
-    protected void setRepository(Repository repository) {
-        this.repository = repository;
-    }
-
-    /**
-     * Returns the workspace associated with this session. Subclasses can use
-     * the {@link #setWorkspace(Workspace) setWorkspace(Workspace)} method
-     * to set the workspace during session construction.
-     *
-     * @return workspace
-     * @see Session#getWorkspace()
-     */
-    public Workspace getWorkspace() {
-        return workspace;
-    }
-
-    /**
-     * Sets the workspace associated with this session.
-     *
-     * @param workspace workspace
-     * @see #getWorkspace()
-     */
-    protected void setWorkspace(Workspace workspace) {
-        this.workspace = workspace;
-    }
-
-    /** {@inheritDoc} */
-    public Object getAttribute(String name) {
-        return attributes.get(name);
-    }
-    
-    protected void setAttribute(String name, Object value) {
-        attributes.put(name, value);
-    }
-
-    /** {@inheritDoc} */
-    public String[] getAttributeNames() {
-        return (String[])
-            attributes.keySet().toArray(new String[attributes.size()]);
-    }
-
-    /** {@inheritDoc} */
-    public String getUserID() {
-        return userID;
-    }
-
-    protected void setUserID(String userID) {
-        this.userID = userID;
-    }
-
-    /**
-     * Checks whether the session is still active.
-     *
-     * @return <code>true</code> if the close() method has <em>not</em>
-     *         been called, <code>false</code> if it has
-     * @see Session#isLive()
-     */
-    public boolean isLive() {
-        return live;
-    }
-
-    /**
-     * Marks the session as closed.
-     *
-     * @see Session#logout()
-     */
-    public void logout() {
-        live = false;
-    }
-
-    /**
-     * Adds the given lock token.
-     *
-     * @param lt lock token
-     * @see Session#addLockToken(String)
-     */
-    public void addLockToken(String lt) {
-        lockTokens.add(lt);
-    }
-
-    /**
-     * Returns the lock tokens held by this session.
-     *
-     * @return lock tokens
-     * @see Session#getLockTokens()
-     */
-    public String[] getLockTokens() {
-        return (String[]) lockTokens.toArray(new String[lockTokens.size()]);
-    }
-
-    /**
-     * Removes the given lock token.
-     *
-     * @param lt lock token
-     * @see Session#removeLockToken(String)
-     */
-    public void removeLockToken(String lt) {
-        lockTokens.remove(lt);
-    }
-
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/lite/LiteWorkspace.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/lite/LiteWorkspace.java
deleted file mode 100644
index 59a7698..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/lite/LiteWorkspace.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.lite;
-
-import javax.jcr.NamespaceRegistry;
-import javax.jcr.Session;
-import javax.jcr.Workspace;
-import javax.jcr.nodetype.NodeTypeManager;
-
-import org.apache.jackrabbit.base.BaseWorkspace;
-
-/**
- * TODO
- */
-public class LiteWorkspace extends BaseWorkspace implements Workspace {
-
-    private Session session;
-
-    private NamespaceRegistry namespaceRegistry;
-
-    private NodeTypeManager nodeTypeManager;
-
-    public Session getSession() {
-        return session;
-    }
-
-    protected void setSession(Session session) {
-        this.session = session;
-    }
-
-    public NamespaceRegistry getNamespaceRegistry() {
-        return namespaceRegistry;
-    }
-
-    protected void setNamespaceRegistry(NamespaceRegistry namespaceRegistry) {
-        this.namespaceRegistry = namespaceRegistry;
-    }
-
-    public NodeTypeManager getNodeTypeManager() {
-        return nodeTypeManager;
-    }
-
-    protected void setNodeTypeManager(NodeTypeManager nodeTypeManager) {
-        this.nodeTypeManager = nodeTypeManager;
-    }
-
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/lite/nodetype/LiteNodeTypeManager.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/lite/nodetype/LiteNodeTypeManager.java
deleted file mode 100644
index 6763bc5..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/lite/nodetype/LiteNodeTypeManager.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.lite.nodetype;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import javax.jcr.RepositoryException;
-import javax.jcr.nodetype.NodeType;
-import javax.jcr.nodetype.NodeTypeIterator;
-import javax.jcr.nodetype.NodeTypeManager;
-
-import org.apache.jackrabbit.base.nodetype.BaseNodeTypeManager;
-import org.apache.jackrabbit.iterator.ArrayNodeTypeIterator;
-
-public class LiteNodeTypeManager extends BaseNodeTypeManager
-        implements NodeTypeManager {
-
-    private final Set types = new HashSet();
-
-    protected void addNodeType(NodeType type) {
-        types.add(type);
-    }
-
-    public NodeTypeIterator getAllNodeTypes() throws RepositoryException {
-        return new ArrayNodeTypeIterator(types);
-    }
-
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/lite/nodetype/LitePropertyDefinition.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/lite/nodetype/LitePropertyDefinition.java
deleted file mode 100644
index 4cee22d..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/lite/nodetype/LitePropertyDefinition.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.lite.nodetype;
-
-import javax.jcr.nodetype.NodeType;
-import javax.jcr.nodetype.PropertyDefinition;
-
-import org.apache.jackrabbit.base.nodetype.BasePropertyDefinition;
-
-public class LitePropertyDefinition extends BasePropertyDefinition
-        implements PropertyDefinition {
-
-    private NodeType declaringNodeType;
-
-    private int requiredType;
-
-    private int onParentVersion;
-
-    private boolean multiple;
-
-    private boolean autoCreated;
-
-    private boolean mandatory;
-
-    private boolean _protected;
-
-    public NodeType getDeclaringNodeType() {
-        return declaringNodeType;
-    }
-
-    protected void setDeclaringNodeType(NodeType declaringNodeType) {
-        this.declaringNodeType = declaringNodeType;
-    }
-
-    public int getRequiredType() {
-        return requiredType;
-    }
-
-    protected void setRequiredType(int requiredType) {
-        this.requiredType = requiredType;
-    }
-
-    public int getOnParentVersion() {
-        return onParentVersion;
-    }
-
-    protected void setOnParentVersion(int onParentVersion) {
-        this.onParentVersion = onParentVersion;
-    }
-
-    public boolean isMultiple() {
-        return multiple;
-    }
-
-    protected void setMultiple(boolean multiple) {
-        this.multiple = multiple;
-    }
-
-    public boolean isAutoCreated() {
-        return autoCreated;
-    }
-
-    protected void setAutoCreated(boolean autoCreated) {
-        this.autoCreated = autoCreated;
-    }
-
-    public boolean isMandatory() {
-        return mandatory;
-    }
-
-    protected void setMandatory(boolean mandatory) {
-        this.mandatory = mandatory;
-    }
-
-    public boolean isProtected() {
-        return _protected;
-    }
-
-    protected void setProtected(boolean _protected) {
-        this._protected = _protected;
-    }
-    
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/session/SessionHelper.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/session/SessionHelper.java
deleted file mode 100644
index a57619d..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/session/SessionHelper.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*

- * Copyright 2004-2005 The Apache Software Foundation or its licensors,

- *                     as applicable.

- *

- * Licensed under the Apache License, Version 2.0 (the "License");

- * you may not use this file except in compliance with the License.

- * You may obtain a copy of the License at

- *

- *      http://www.apache.org/licenses/LICENSE-2.0

- *

- * Unless required by applicable law or agreed to in writing, software

- * distributed under the License is distributed on an "AS IS" BASIS,

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- * See the License for the specific language governing permissions and

- * limitations under the License.

- */

-package org.apache.jackrabbit.session;

-

-import javax.jcr.NamespaceException;

-import javax.jcr.RepositoryException;

-import javax.jcr.Session;

-import javax.jcr.nodetype.NoSuchNodeTypeException;

-import javax.jcr.nodetype.NodeType;

-

-import org.apache.jackrabbit.name.QName;

-

-/**

- * Helper class for accessing the namespaces and node types associated

- * with a JCR Session.

- */

-public final class SessionHelper {

-

-    /** The session to which this frontend instance is bound. */

-    private final Session session;

-

-    /**

-     * Creates a helper for accessing the given session.

-     *

-     * @param session current session

-     */

-    public SessionHelper(Session session) {

-        this.session = session;

-    }

-

-    /**

-     * Returns the prefixed JCR name that represents the given

-     * qualified name.

-     *

-     * @param name qualified name

-     * @return prefixed JCR name

-     * @throws IllegalStateException if the namespace does not exist

-     * @throws RuntimeException if a repository error occurs

-     */

-    public String getName(QName name)

-            throws IllegalStateException, RuntimeException {

-        try {

-            String prefix = session.getNamespacePrefix(name.getNamespaceURI());

-            if (prefix.length() > 0) {

-                return prefix + ":" + name.getLocalName();

-            } else {

-                return name.getLocalName();

-            }

-        } catch (NamespaceException e) {

-            throw new IllegalStateException("Expected namespace not found. " + e.getMessage());

-        } catch (RepositoryException e) {

-            throw new RuntimeException("Unexpected repository error", e);

-        }

-    }

-

-    /**

-     * Returns the named node type. This method is used to convert

-     * qualified node type names to actual NodeType objects of the current

-     * node type manager. The returned node type is acquired using the standard

-     * JCR API starting with <code>getWorkspace().getNodeTypeManager()</code>

-     * from the current session.

-     *

-     * @param name qualified node type name

-     * @return named node type

-     * @throws IllegalStateException if the named node type does not exist

-     * @throws RuntimeException      if a repository error occurs

-     */

-    public NodeType getNodeType(QName name)

-            throws IllegalStateException, RuntimeException {

-        return getNodeType(getName(name));

-    }

-

-    /**

-     * Returns the named node type. This method is used to convert

-     * node type names to actual NodeType objects of the current node

-     * type manager. The returned node type is acquired using the standard

-     * JCR API starting with <code>getWorkspace().getNodeTypeManager()</code>

-     * from the current session.

-     *

-     * @param name node type name

-     * @return named node type

-     * @throws IllegalStateException if the named node type does not exist

-     * @throws RuntimeException      if a repository error occurs

-     */

-    public NodeType getNodeType(String name)

-            throws IllegalStateException, RuntimeException {

-        try {

-            return

-                session.getWorkspace().getNodeTypeManager().getNodeType(name);

-        } catch (NoSuchNodeTypeException e) {

-            throw new IllegalStateException("Expected node type not found" + e.getMessage());

-        } catch (RepositoryException e) {

-            throw new RuntimeException("Unexpected repository error", e);

-        }

-    }

-

-    /**

-     * Compares session helpers for equality. Two session helpers are equal

-     * if they refer to the same session.

-     *

-     * @param that the object to compare this one to

-     * @return <code>true</code> if the objects are equal,

-     *         <code>false</code> otherwise

-     * @see Object#equals(Object)

-     */

-    public boolean equals(Object that) {

-        if (this == that) {

-            return true;

-        } else if (that instanceof SessionHelper) {

-            return session.equals(((SessionHelper) that).session);

-        } else {

-            return false;

-        }

-    }

-

-    /**

-     * Calculates the session helper hash code. This method simply returns

-     * the hash code of the underlying session.

-     *

-     * @return session hash code

-     * @see Object#hashCode()

-     */

-    public int hashCode() {

-        return session.hashCode();

-    }

-

-}

diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/session/SessionNamespaceRegistry.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/session/SessionNamespaceRegistry.java
deleted file mode 100644
index 5a6d561..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/session/SessionNamespaceRegistry.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/*

- * Copyright 2004-2005 The Apache Software Foundation or its licensors,

- *                     as applicable.

- *

- * Licensed under the Apache License, Version 2.0 (the "License");

- * you may not use this file except in compliance with the License.

- * You may obtain a copy of the License at

- *

- *      http://www.apache.org/licenses/LICENSE-2.0

- *

- * Unless required by applicable law or agreed to in writing, software

- * distributed under the License is distributed on an "AS IS" BASIS,

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- * See the License for the specific language governing permissions and

- * limitations under the License.

- */

-package org.apache.jackrabbit.session;

-

-import java.util.Arrays;

-import java.util.HashSet;

-import java.util.Properties;

-import java.util.Set;

-

-import javax.jcr.NamespaceException;

-import javax.jcr.NamespaceRegistry;

-import javax.jcr.RepositoryException;

-import javax.jcr.UnsupportedRepositoryOperationException;

-

-import org.apache.xerces.util.XMLChar;

-

-public final class SessionNamespaceRegistry implements NamespaceRegistry {

-

-    /** The underlying global namespace registry. */

-    private final NamespaceRegistry registry;

-

-    /** Local prefix to namespace URI mappings. */

-    private final Properties prefixToURI;

-

-    /** Local namespace URI to prefix mappings. */

-    private final Properties uriToPrefix;

-

-    /** The global prefixes hidden by local mappings. */

-    private final Set hiddenPrefixes;

-

-    /**

-     * Creates a local namespace registry based on the given global

-     * namespace registry. The local namespace mappings are initially empty.

-     *

-     * @param registry global namespace registry

-     */

-    public SessionNamespaceRegistry(NamespaceRegistry registry) {

-        this.registry = registry;

-        this.prefixToURI = new Properties();

-        this.uriToPrefix = new Properties();

-        this.hiddenPrefixes = new HashSet();

-    }

-

-    /**

-     * Creates a local namespace mapping. See the JCR specification

-     * for the details of this rather complex operation.

-     * <p>

-     * This method implements the specified semantics of the

-     * Session.setNamespacePrefix method. Session implementations can use

-     * this method as follows:

-     * <pre>

-     *     NamespaceRegistry registry = new SessionNamespaceRegistry(

-     *             getWorkspace().getNamespaceRegistry());

-     *

-     *     public void setNamespacePrefix(String prefix, String uri)

-     *             throws NamespaceException, RepositoryException {

-     *         return registry.registerNamespace(prefix, uri);

-     *     }

-     * </pre>

-     *

-     * @param prefix namespace prefix

-     * @param uri    namespace URI

-     * @throws NamespaceException  if the given namespace mapping is invalid

-     * @throws RepositoryException on repository errors

-     * @see NamespaceRegistry#registerNamespace(String, String)

-     * @see javax.jcr.Session#setNamespacePrefix(String, String)

-     */

-    public void registerNamespace(String prefix, String uri)

-            throws NamespaceException, RepositoryException {

-        if (prefix.length() == 0) {

-            throw new NamespaceException("The empty prefix is reserved");

-        } else if (uri.length() == 0) {

-            throw new NamespaceException("The empty namespace URI is reserved");

-        } else if (prefix.toLowerCase().startsWith("xml")) {

-            throw new NamespaceException("The xml* prefixes are reserved");

-        } else if (!XMLChar.isValidNCName(prefix)) {

-            throw new NamespaceException("Invalid prefix format");

-        }

-

-        // Note: throws a NamespaceException if the URI is not registered

-        String oldPrefix = getPrefix(uri);

-

-        String oldURI;

-        try {

-            oldURI = getURI(prefix);

-        } catch (NamespaceException e) {

-            oldURI = null;

-        }

-        if (oldURI == null) {

-            hiddenPrefixes.add(oldPrefix);

-            prefixToURI.remove(oldPrefix);

-            prefixToURI.setProperty(prefix, uri);

-            uriToPrefix.setProperty(uri, prefix);

-        } else if (!uri.equals(oldURI)) {

-            throw new NamespaceException(

-                    "Cannot hide an existing namespace mapping");

-        }

-    }

-

-    /**

-     * Not implemented. It is not possible to unregister namespaces from

-     * a session, you need to access the global namespace registry directly.

-     *

-     * @param prefix namespace prefix

-     * @throws UnsupportedRepositoryOperationException always thrown

-     */

-    public void unregisterNamespace(String prefix)

-            throws UnsupportedRepositoryOperationException {

-        throw new UnsupportedRepositoryOperationException();

-    }

-

-    /**

-     * Returns the currently mapped namespace prefixes. The returned set

-     * contains all locally mapped prefixes and those global prefixes that

-     * have not been hidden by local mappings.

-     * <p>

-     * This method implements the specified semantics of the

-     * Session.getNamespacePrefixes method. Session implementations can use

-     * this method as follows:

-     * <pre>

-     *     NamespaceRegistry registry = new SessionNamespaceRegistry(

-     *             getWorkspace().getNamespaceRegistry());

-     *

-     *     public String getNamespacePrefixes() throws RepositoryException {

-     *         return registry.getPrefixes();

-     *     }

-     * </pre>

-     *

-     * @return namespace prefixes

-     * @throws RepositoryException on repository errors

-     * @see NamespaceRegistry#getPrefixes()

-     * @see javax.jcr.Session#getNamespacePrefixes()

-     */

-    public String[] getPrefixes() throws RepositoryException {

-        HashSet prefixes = new HashSet();

-        prefixes.addAll(Arrays.asList(registry.getPrefixes()));

-        prefixes.removeAll(hiddenPrefixes);

-        prefixes.addAll(prefixToURI.keySet());

-        return (String[]) prefixes.toArray(new String[prefixes.size()]);

-    }

-

-    /**

-     * Returns the registered namespace URIs. This method call is simply

-     * forwarded to the underlying global namespace registry as it is not

-     * possible to locally add new namespace URIs.

-     *

-     * @return namespace URIs

-     * @throws RepositoryException on repository errors

-     * @see NamespaceRegistry#getURIs()

-     */

-    public String[] getURIs() throws RepositoryException {

-        return registry.getURIs();

-    }

-

-    /**

-     * Returns the namespace URI that is mapped to the given prefix.

-     * Returns the local namespace mapping if the prefix is locally

-     * mapped, otherwise falls back to the underlying global namespace

-     * registry unless the prefix has been hidden by local namespace

-     * mappings.

-     * <p>

-     * This method implements the specified semantics of the

-     * Session.getNamespaceURI method. Session implementations can use

-     * this method as follows:

-     * <pre>

-     *     NamespaceRegistry registry = new SessionNamespaceRegistry(

-     *             getWorkspace().getNamespaceRegistry());

-     *

-     *     public String getNamespaceURI(String prefix)

-     *             throws NamespaceException, RepositoryException {

-     *         return registry.getURI(prefix);

-     *     }

-     * </pre>

-     *

-     * @param prefix namespace prefix

-     * @return namespace URI

-     * @throws NamespaceException  if the prefix is not registered or

-     *                             currently visible

-     * @throws RepositoryException on repository errors

-     * @see NamespaceRegistry#getURI(String)

-     * @see javax.jcr.Session#getNamespaceURI(String)

-     */

-    public String getURI(String prefix)

-            throws NamespaceException, RepositoryException {

-        String uri = prefixToURI.getProperty(prefix);

-        if (uri != null) {

-            return uri;

-        } else if (!hiddenPrefixes.contains(prefix)) {

-            return registry.getURI(prefix);

-        } else {

-            throw new NamespaceException(

-                    "Namespace mapping not found for prefix " + prefix);

-        }

-    }

-

-    /**

-     * Returns the prefix that is mapped to the given namespace URI.

-     * Returns the local prefix if the namespace URI is locally mapped,

-     * otherwise falls back to the underlying global namespace registry.

-     * <p>

-     * This method implements the specified semantics of the

-     * Session.getNamespacePrefix method. Session implementations can use

-     * this method as follows:

-     * <pre>

-     *     NamespaceRegistry registry = new SessionNamespaceRegistry(

-     *             getWorkspace().getNamespaceRegistry());

-     *

-     *     public String getNamespacePrefix(String uri)

-     *             throws NamespaceException, RepositoryException {

-     *         return registry.getPrefix(uri);

-     *     }

-     * </pre>

-     *

-     * @param uri namespace URI

-     * @return namespace prefix

-     * @throws NamespaceException  if the namespace URI is not registered

-     * @throws RepositoryException on repository errors

-     * @see NamespaceRegistry#getPrefix(String)

-     * @see javax.jcr.Session#getNamespacePrefix(String)

-     */

-    public String getPrefix(String uri)

-            throws NamespaceException, RepositoryException {

-        String prefix = uriToPrefix.getProperty(uri);

-        if (prefix != null) {

-            return prefix;

-        } else {

-            return registry.getPrefix(uri);

-        }

-    }

-

-}

diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/session/nodetype/SessionItemDefinition.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/session/nodetype/SessionItemDefinition.java
deleted file mode 100644
index 25473e8..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/session/nodetype/SessionItemDefinition.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*

- * Copyright 2004-2005 The Apache Software Foundation or its licensors,

- *                     as applicable.

- *

- * Licensed under the Apache License, Version 2.0 (the "License");

- * you may not use this file except in compliance with the License.

- * You may obtain a copy of the License at

- *

- *      http://www.apache.org/licenses/LICENSE-2.0

- *

- * Unless required by applicable law or agreed to in writing, software

- * distributed under the License is distributed on an "AS IS" BASIS,

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- * See the License for the specific language governing permissions and

- * limitations under the License.

- */

-package org.apache.jackrabbit.session.nodetype;

-

-import javax.jcr.nodetype.ItemDefinition;

-import javax.jcr.nodetype.NodeType;

-

-import org.apache.jackrabbit.session.SessionHelper;

-import org.apache.jackrabbit.state.nodetype.ItemDefinitionState;

-

-/**

- * Immutable and session-bound item definition frontend. An instance

- * of this class presents the underlying item definition state using

- * the JCR ItemDefinition interface.

- * <p>

- * By not exposing the setter methods of the underlying state instance,

- * this class intentionally makes it impossible for a JCR client to modify

- * item definition information.

- */

-class SessionItemDefinition implements ItemDefinition {

-

-    /** Helper for accessing the current session. */

-    private final SessionHelper helper;

-

-    /** The node type that contains this item definition. */

-    private final NodeType type;

-

-    /** The underlying item definitions state. */

-    private final ItemDefinitionState state;

-

-    /**

-     * Creates an item definition frontend that is bound to the

-     * given node type, session, and underlying item definition state.

-     *

-     * @param helper helper for accessing the current session

-     * @param type declaring node type

-     * @param state underlying item definition state

-     */

-    protected SessionItemDefinition(

-            SessionHelper helper, NodeType type, ItemDefinitionState state) {

-        this.helper = helper;

-        this.type = type;

-        this.state = state;

-    }

-

-    /**

-     * Returns the node type that contains this item definition.

-     *

-     * @return declaring node type

-     * @see ItemDefinition#getDeclaringNodeType()

-     */

-    public NodeType getDeclaringNodeType() {

-        return type;

-    }

-

-    /**

-     * Returns the prefixed JCR name of this item definition. The underlying

-     * qualified name is mapped to a prefixed JCR name using the namespace

-     * mappings of the current session.

-     *

-     * @return prefixed JCR name

-     * @see ItemDefinition#getName()

-     */

-    public String getName() {

-        return helper.getName(state.getName());

-    }

-

-    /**

-     * Returns the value of the AutoCreated item definition property.

-     * The returned value is retrieved from the underlying item

-     * definition state.

-     *

-     * @return AutoCreated property value

-     * @see ItemDefinition#isAutoCreated()

-     */

-    public boolean isAutoCreated() {

-        return state.isAutoCreated();

-    }

-

-    /**

-     * Returns the value of the Mandatory item definition property.

-     * The returned value is retrieved from the underlying item

-     * definition state.

-     *

-     * @return Mandatory property value

-     * @see ItemDefinition#isMandatory()

-     */

-    public boolean isMandatory() {

-        return state.isMandatory();

-    }

-

-    /**

-     * Returns the value of the OnParentVersion item definition property.

-     * The returned value is retrieved from the underlying item

-     * definition state.

-     *

-     * @return OnParentVersion property value

-     * @see ItemDefinition#getOnParentVersion()

-     */

-    public int getOnParentVersion() {

-        return state.getOnParentVersion();

-    }

-

-    /**

-     * Returns the value of the Protected item definition property.

-     * The returned value is retrieved from the underlying item

-     * definition state.

-     *

-     * @return Protected property value

-     * @see ItemDefinition#isProtected()

-     */

-    public boolean isProtected() {

-        return state.isProtected();

-    }

-

-    /**

-     * Compares objects for equality. Returns <code>true</code> if the

-     * given object is a SessionItemDefinition with the same underlying item

-     * definition state, session, and declaring node type.

-     * <p>

-     * Note that the item definition state class does not override the equals

-     * method and thus the mutable state instances are compared for

-     * reference equality.

-     *

-     * @param that the object to compare this object with

-     * @return <code>true</code> if the objects are equal,

-     *         <code>false</code> otherwise

-     * @see Object#equals(Object)

-     */

-    public boolean equals(Object that) {

-        if (this == that) {

-            return true;

-        } else if (that instanceof SessionItemDefinition) {

-            return state.equals(((SessionItemDefinition) that).state)

-                && helper.equals(((SessionItemDefinition) that).helper)

-                && type.equals(((SessionItemDefinition) that).type);

-        } else {

-            return false;

-        }

-    }

-

-    /**

-     * Returns a hash code for this object. To satisfy the equality

-     * constraints the returned hash code is a combination of the

-     * hash codes of the underlying node type state, session, and declaring

-     * node type.

-     *

-     * @return hash code

-     * @see Object#hashCode()

-     */

-    public int hashCode() {

-        int code = 17;

-        code = code * 37 + state.hashCode();

-        code = code * 37 + helper.hashCode();

-        code = code * 37 + type.hashCode();

-        return code;

-    }

-

-}

diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/session/nodetype/SessionNodeDefinition.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/session/nodetype/SessionNodeDefinition.java
deleted file mode 100644
index e028d12..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/session/nodetype/SessionNodeDefinition.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*

- * Copyright 2004-2005 The Apache Software Foundation or its licensors,

- *                     as applicable.

- *

- * Licensed under the Apache License, Version 2.0 (the "License");

- * you may not use this file except in compliance with the License.

- * You may obtain a copy of the License at

- *

- *      http://www.apache.org/licenses/LICENSE-2.0

- *

- * Unless required by applicable law or agreed to in writing, software

- * distributed under the License is distributed on an "AS IS" BASIS,

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- * See the License for the specific language governing permissions and

- * limitations under the License.

- */

-package org.apache.jackrabbit.session.nodetype;

-

-import java.util.HashSet;

-import java.util.Set;

-

-import javax.jcr.nodetype.NodeDefinition;

-import javax.jcr.nodetype.NodeType;

-

-import org.apache.jackrabbit.session.SessionHelper;

-import org.apache.jackrabbit.name.QName;

-import org.apache.jackrabbit.state.nodetype.NodeDefinitionState;

-

-/**

- * Immutable and session-bound node definition frontend. An instance

- * of this class presents the underlying node definition state using

- * the JCR NodeDef interface.

- * <p>

- * By not exposing the setter methods of the underlying state instance,

- * this class intentionally makes it impossible for a JCR client to modify

- * node definition information.

- */

-final class SessionNodeDefinition extends SessionItemDefinition

-        implements NodeDefinition {

-

-    /** Helper for accessing the current session. */

-    private final SessionHelper helper;

-

-    /** The underlying node definition state. */

-    private final NodeDefinitionState state;

-

-    /**

-     * Creates a node definition frontend that is bound to the

-     * given node type, session, and underlying node definition state.

-     *

-     * @param helper helper for accessing the current session

-     * @param type declaring node type

-     * @param state underlying node definition state

-     */

-    public SessionNodeDefinition(

-            SessionHelper helper, NodeType type, NodeDefinitionState state) {

-        super(helper, type, state);

-        this.helper = helper;

-        this.state = state;

-    }

-

-    /**

-     * Returns the default primary type of the defined node. The returned

-     * node type is retrieved from the node type manager of the current

-     * session using the node type name stored in the underlying state.

-     *

-     * @return default primary type

-     * @see NodeDefinition#getDefaultPrimaryType()

-     */

-    public NodeType getDefaultPrimaryType() {

-        return helper.getNodeType(state.getDefaultPrimaryTypeName());

-    }

-

-    /**

-     * Returns the required primary types of the defined node. The returned

-     * node types are retrieved from the node type manager of the current

-     * session using the node type names stored in the underlying state.

-     * <p>

-     * The returned array is freshly instantiated and not a part of the

-     * underlying state, so it can be freely modified.

-     *

-     * @return required primary types

-     * @see NodeDefinition#getRequiredPrimaryTypes()

-     */

-    public NodeType[] getRequiredPrimaryTypes() {

-        Set types = new HashSet();

-        QName[] names = state.getRequiredPrimaryTypeNames();

-        for (int i = 0; i < names.length; i++) {

-            types.add(helper.getNodeType(names[i]));

-        }

-        return (NodeType[]) types.toArray(new NodeType[types.size()]);

-    }

-

-    /**

-     * Returns the value of the AllowsSameNameSiblings node definition property.

-     * The returned value is retrieved from the underlying node definition

-     * state.

-     *

-     * @return AllowsSameNameSiblings property value

-     * @see NodeDefinition#allowsSameNameSiblings()

-     */

-    public boolean allowsSameNameSiblings() {

-        return state.allowsSameNameSiblings();

-    }

-

-}

diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/session/nodetype/SessionNodeType.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/session/nodetype/SessionNodeType.java
deleted file mode 100644
index 6d82867..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/session/nodetype/SessionNodeType.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/*

- * Copyright 2004-2005 The Apache Software Foundation or its licensors,

- *                     as applicable.

- *

- * Licensed under the Apache License, Version 2.0 (the "License");

- * you may not use this file except in compliance with the License.

- * You may obtain a copy of the License at

- *

- *      http://www.apache.org/licenses/LICENSE-2.0

- *

- * Unless required by applicable law or agreed to in writing, software

- * distributed under the License is distributed on an "AS IS" BASIS,

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- * See the License for the specific language governing permissions and

- * limitations under the License.

- */

-package org.apache.jackrabbit.session.nodetype;

-

-import java.util.HashSet;

-import java.util.Set;

-

-import javax.jcr.nodetype.NodeDefinition;

-import javax.jcr.nodetype.NodeType;

-import javax.jcr.nodetype.PropertyDefinition;

-

-import org.apache.jackrabbit.session.SessionHelper;

-import org.apache.jackrabbit.base.nodetype.BaseNodeType;

-import org.apache.jackrabbit.name.QName;

-import org.apache.jackrabbit.state.nodetype.NodeDefinitionState;

-import org.apache.jackrabbit.state.nodetype.NodeTypeState;

-import org.apache.jackrabbit.state.nodetype.PropertyDefinitionState;

-

-/**

- * Immutable and session-bound node type frontend. An instance

- * of this class presents the underlying node type state using

- * the JCR NodeType interface. This class also contains simple

- * implementations of the higher-order methods defined by the

- * NodeType interface.

- * <p>

- * By not exposing the setter methods of the underlying state instance,

- * this class intentionally makes it impossible for a JCR client to modify

- * node type information.

- */

-final class SessionNodeType extends BaseNodeType implements NodeType {

-

-    /** The wildcard item definition name. */

-    private static final String WILDCARD = "*";

-

-    /** Helper for accessing the current session. */

-    private final SessionHelper helper;

-

-    /** The underlying node type state. */

-    private final NodeTypeState state;

-

-    /**

-     * Creates a node type frontend that is bound to the

-     * given session and underlying node type state.

-     *

-     * @param helper helper for accessing the current session

-     * @param state underlying node type state

-     */

-    public SessionNodeType(SessionHelper helper, NodeTypeState state) {

-        this.helper = helper;

-        this.state = state;

-    }

-

-    /**

-     * Returns the name of the node type. The returned name is retrieved

-     * from the underlying node type state and converted into a prefixed

-     * JCR name using the namespace mappings of the current session.

-     *

-     * @return node type name

-     * @see NodeType#getName()

-     */

-    public String getName() {

-        return helper.getName(state.getName());

-    }

-

-    /**

-     * Returns the value of the Mixin node type property. The returned

-     * value is retrieved from the underlying node type state.

-     *

-     * @return Mixin property value

-     * @see NodeType#isMixin()

-     */

-    public boolean isMixin() {

-        return state.isMixin();

-    }

-

-    /**

-     * Returns the value of the HasOrderableChildNodes node type property.

-     * The returned value is retrieved from the underlying node type state.

-     *

-     * @return HasOrderableChildNodes property value

-     * @see NodeType#hasOrderableChildNodes()

-     */

-    public boolean hasOrderableChildNodes() {

-        return state.hasOrderableChildNodes();

-    }

-

-    /**

-     * Returns the name of the primary item of this node type.

-     * The returned name is retrieved from the underlying node type state

-     * and converted into a prefixed JCR name using the namespace mappings

-     * of the current session.

-     *

-     * @return primary item name, or <code>null</code> if not specified

-     * @see NodeType#getPrimaryItemName()

-     */

-    public String getPrimaryItemName() {

-        QName name = state.getPrimaryItemName();

-        if (name != null) {

-            return helper.getName(name);

-        } else {

-            return null;

-        }

-    }

-

-    /**

-     * Returns the declared supertypes of this node type. The returned

-     * node types are retrieved from the node type manager of the current

-     * session using the supertype names stored in the underlying state.

-     * <p>

-     * The returned array is freshly instantiated and not a part of the

-     * underlying state, so it can be freely modified.

-     *

-     * @return declared supertypes

-     * @see NodeType#getDeclaredSupertypes()

-     */

-    public NodeType[] getDeclaredSupertypes() {

-        Set types = new HashSet();

-        QName[] names = state.getSupertypeNames();

-        for (int i = 0; i < names.length; i++) {

-            types.add(helper.getNodeType(names[i]));

-        }

-        return (NodeType[]) types.toArray(new NodeType[types.size()]);

-    }

-

-    /**

-     * Returns the declared child node definitions of this node type.

-     * The returned child node definitions are SessionNodeDefs instantiated

-     * using the node definition states returned by the underlying node type

-     * state.

-     * <p>

-     * The returned array is freshly instantiated and not a part of the

-     * underlying state, so it can be freely modified.

-     *

-     * @return declared child node definitions

-     * @see SessionNodeDefinition

-     * @see NodeType#getDeclaredChildNodeDefinitions()

-     */

-    public NodeDefinition[] getDeclaredChildNodeDefinitions() {

-        Set definitions = new HashSet();

-        NodeDefinitionState[] states = state.getChildNodeDefinitionStates();

-        for (int i = 0; i < states.length; i++) {

-            definitions.add(new SessionNodeDefinition(helper, this, states[i]));

-        }

-        return (NodeDefinition[])

-            definitions.toArray(new NodeDefinition[definitions.size()]);

-    }

-

-    /**

-     * Returns the declared property definitions of this node type.

-     * The returned property definitions are SessionPropertyDefs instantiated

-     * using the property definition states returned by the underlying

-     * node type state.

-     * <p>

-     * The returned array is freshly instantiated and not a part of the

-     * underlying state, so it can be freely modified.

-     *

-     * @return declared child node definitions

-     * @see SessionPropertyDefinition

-     * @see NodeType#getDeclaredChildNodeDefs()

-     */

-    public PropertyDefinition[] getDeclaredPropertyDefinitions() {

-        Set definitions = new HashSet();

-        PropertyDefinitionState[] states =

-            state.getPropertyDefinitionStates();

-        for (int i = 0; i < states.length; i++) {

-            definitions.add(

-                    new SessionPropertyDefinition(helper, this, states[i]));

-        }

-        return (PropertyDefinition[])

-            definitions.toArray(new PropertyDefinition[definitions.size()]);

-    }

-

-    /**

-     * Compares objects for equality. Returns <code>true</code> if the

-     * given object is a SessionNodeType with the same underlying node

-     * type state and session.

-     * <p>

-     * Note that the node type state class does not override the equals

-     * method and thus the mutable state instances are compared for

-     * reference equality.

-     *

-     * @param that the object to compare this object with

-     * @return <code>true</code> if the objects are equal,

-     *         <code>false</code> otherwise

-     * @see Object#equals(Object)

-     */

-    public boolean equals(Object that) {

-        if (this == that) {

-            return true;

-        } else if (that instanceof SessionNodeType) {

-            return state.equals(((SessionNodeType) that).state)

-                && helper.equals(((SessionNodeType) that).helper);

-        } else {

-            return false;

-        }

-    }

-

-    /**

-     * Returns a hash code for this object. To satisfy the equality

-     * constraints the returned hash code is a combination of the

-     * hash codes of the underlying node type state and session.

-     *

-     * @return hash code

-     * @see Object#hashCode()

-     */

-    public int hashCode() {

-        int code = 17;

-        code = code * 37 + state.hashCode();

-        code = code * 37 + helper.hashCode();

-        return code;

-    }

-

-}

diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/session/nodetype/SessionNodeTypeManager.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/session/nodetype/SessionNodeTypeManager.java
deleted file mode 100644
index a6c948e..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/session/nodetype/SessionNodeTypeManager.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*

- * Copyright 2004-2005 The Apache Software Foundation or its licensors,

- *                     as applicable.

- *

- * Licensed under the Apache License, Version 2.0 (the "License");

- * you may not use this file except in compliance with the License.

- * You may obtain a copy of the License at

- *

- *      http://www.apache.org/licenses/LICENSE-2.0

- *

- * Unless required by applicable law or agreed to in writing, software

- * distributed under the License is distributed on an "AS IS" BASIS,

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- * See the License for the specific language governing permissions and

- * limitations under the License.

- */

-package org.apache.jackrabbit.session.nodetype;

-

-import java.util.HashSet;

-import java.util.Set;

-

-import javax.jcr.nodetype.NodeTypeIterator;

-import javax.jcr.nodetype.NodeTypeManager;

-

-import org.apache.jackrabbit.base.nodetype.BaseNodeTypeManager;

-import org.apache.jackrabbit.iterator.ArrayNodeTypeIterator;

-import org.apache.jackrabbit.session.SessionHelper;

-import org.apache.jackrabbit.state.nodetype.NodeTypeManagerState;

-import org.apache.jackrabbit.state.nodetype.NodeTypeState;

-

-/**

- * Immutable and session-bound node type manager frontend. An instance

- * of this class presents the underlying node type manager state using

- * the JCR NodeTypeManager interface.

- * <p>

- * By not exposing the setter methods of the underlying state instance,

- * this class intentionally makes it impossible for a JCR client to modify

- * node type information.

- */

-public final class SessionNodeTypeManager extends BaseNodeTypeManager

-        implements NodeTypeManager {

-

-    /** Helper for accessing the current session. */

-    private final SessionHelper helper;

-

-    /** The underlying node type manager state instance. */

-    private final NodeTypeManagerState state;

-

-    /**

-     * Creates a node type manager frontend that is bound to the

-     * given session and underlying node type manager state.

-     *

-     * @param helper helper for accessing the current session

-     * @param state underlying node type manager state

-     */

-    public SessionNodeTypeManager(

-            SessionHelper helper, NodeTypeManagerState state) {

-        this.helper = helper;

-        this.state = state;

-    }

-

-    /**

-     * Returns all available node types. The returned node types are

-     * SessionNodeTypes instantiated using the node type states returned

-     * by the underlying node type manager state.

-     *

-     * @return all node types

-     * @see SessionNodeType

-     * @see NodeTypeManager#getAllNodeTypes()

-     * @see NodeTypeManagerState#getNodeTypeStates()

-     */

-    public NodeTypeIterator getAllNodeTypes() {

-        Set types = new HashSet();

-        NodeTypeState[] states = state.getNodeTypeStates();

-        for (int i = 0; i < states.length; i++) {

-            types.add(new SessionNodeType(helper, states[i]));

-        }

-        return new ArrayNodeTypeIterator(types);

-    }

-

-    /**

-     * Compares objects for equality. Returns <code>true</code> if the

-     * given object is a SessionNodeTypeManager with the same underlying node

-     * type manager state and session.

-     * <p>

-     * Note that the node type manager state class does not override the

-     * equals method and thus the mutable state instances are compared for

-     * reference equality.

-     *

-     * @param that the object to compare this object with

-     * @return <code>true</code> if the objects are equal,

-     *         <code>false</code> otherwise

-     * @see Object#equals(Object)

-     */

-    public boolean equals(Object that) {

-        if (this == that) {

-            return true;

-        } else if (that instanceof SessionNodeTypeManager) {

-            return state.equals(((SessionNodeTypeManager) that).state)

-                && helper.equals(((SessionNodeTypeManager) that).helper);

-        } else {

-            return false;

-        }

-    }

-

-    /**

-     * Returns a hash code for this object. To satisfy the equality

-     * constraints the returned hash code is a combination of the

-     * hash codes of the underlying node type manager state and session.

-     *

-     * @return hash code

-     * @see Object#hashCode()

-     */

-    public int hashCode() {

-        int code = 17;

-        code = code * 37 + state.hashCode();

-        code = code * 37 + helper.hashCode();

-        return code;

-    }

-

-}

diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/session/nodetype/SessionPropertyDefinition.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/session/nodetype/SessionPropertyDefinition.java
deleted file mode 100644
index 8ae2549..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/session/nodetype/SessionPropertyDefinition.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*

- * Copyright 2004-2005 The Apache Software Foundation or its licensors,

- *                     as applicable.

- *

- * Licensed under the Apache License, Version 2.0 (the "License");

- * you may not use this file except in compliance with the License.

- * You may obtain a copy of the License at

- *

- *      http://www.apache.org/licenses/LICENSE-2.0

- *

- * Unless required by applicable law or agreed to in writing, software

- * distributed under the License is distributed on an "AS IS" BASIS,

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- * See the License for the specific language governing permissions and

- * limitations under the License.

- */

-package org.apache.jackrabbit.session.nodetype;

-

-import javax.jcr.Value;

-import javax.jcr.nodetype.NodeType;

-import javax.jcr.nodetype.PropertyDefinition;

-

-import org.apache.jackrabbit.session.SessionHelper;

-import org.apache.jackrabbit.state.nodetype.PropertyDefinitionState;

-

-/**

- * Immutable and session-bound property definition frontend. An instance

- * of this class presents the underlying property definition state using

- * the JCR PropertyDef interface.

- * <p>

- * By not exposing the setter methods of the underlying state instance,

- * this class intentionally makes it impossible for a JCR client to modify

- * property definition information.

- */

-final class SessionPropertyDefinition extends SessionItemDefinition

-        implements PropertyDefinition {

-

-    /** The underlying property definition state. */

-    private final PropertyDefinitionState state;

-

-    /**

-     * Creates a property definition frontend that is bound to the

-     * given node type, session, and underlying property definition state.

-     *

-     * @param helper helper for accessing the current session

-     * @param type declaring node type

-     * @param state underlying property definition state

-     */

-    public SessionPropertyDefinition(

-            SessionHelper helper, NodeType type, PropertyDefinitionState state) {

-        super(helper, type, state);

-        this.state = state;

-    }

-

-    /**

-     * Returns the required type of the defined property. The returned value

-     * is retrieved from the underlying property definition state.

-     *

-     * @return required property type

-     * @see PropertyDef#getRequiredType()

-     */

-    public int getRequiredType() {

-        return state.getRequiredType();

-    }

-

-    /**

-     * Returns the constraint strings that specify the value constraint

-     * of the defined property. The returned string array is retrieved

-     * from the underlying property definition state, but is not by itself

-     * a part of the state and can thus be modified freely.

-     *

-     * @return value constraint strings

-     * @see PropertyDef#getValueConstraints()

-     */

-    public String[] getValueConstraints() {

-        return null; // TODO: See PropertyDefinitionState

-    }

-

-    /**

-     * Returns the value of the Multiple property definition property.

-     * The returned value is retrieved from the underlying property

-     * definition state.

-     *

-     * @return Multiple property value

-     * @see PropertyDef#isMultiple()

-     */

-    public boolean isMultiple() {

-        return state.isMultiple();

-    }

-

-    /** Not implemented. */

-    public Value[] getDefaultValues() {

-        return null; // TODO

-    }

-}

diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/session/nodetype/package.html b/contrib/jcr-ext/src/java/org/apache/jackrabbit/session/nodetype/package.html
deleted file mode 100644
index b39399b..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/session/nodetype/package.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<body>

-Immutable and session-bound frontend to node type information.

-<p>

-The classes in this package implement the

-{@link javax.jcr.nodetype JCR node type interfaces} based on an underlying

-node type state and the current session.

-</p>

-</body>

diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/state/nodetype/ItemDefinitionState.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/state/nodetype/ItemDefinitionState.java
deleted file mode 100644
index 0ddef8c..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/state/nodetype/ItemDefinitionState.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*

- * Copyright 2004-2005 The Apache Software Foundation or its licensors,

- *                     as applicable.

- *

- * Licensed under the Apache License, Version 2.0 (the "License");

- * you may not use this file except in compliance with the License.

- * You may obtain a copy of the License at

- *

- *      http://www.apache.org/licenses/LICENSE-2.0

- *

- * Unless required by applicable law or agreed to in writing, software

- * distributed under the License is distributed on an "AS IS" BASIS,

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- * See the License for the specific language governing permissions and

- * limitations under the License.

- */

-package org.apache.jackrabbit.state.nodetype;

-

-import javax.jcr.version.OnParentVersionAction;

-

-import org.apache.jackrabbit.name.QName;

-

-/**

- * Item definition state. This base class contains the common

- * state properties used by both property and node definitions.

- */

-public class ItemDefinitionState implements Comparable {

-

-    /** The qualified name of the defined item. */

-    private QName name = null;

-

-    /** The AutoCreated item definition property. */

-    private boolean autoCreated = false;

-

-    /** The Mandatory item definition property. */

-    private boolean mandatory = false;

-

-    /** The OnParentVersion item definition property. */

-    private int onParentVersion = OnParentVersionAction.COPY;

-

-    /** The Protected item definition property. */

-    private boolean isProtected = false; // avoid the reserved word "protected"

-

-    /**

-     * Returns the qualified name of the defined item.

-     *

-     * @return qualified name

-     */

-    public QName getName() {

-        return name;

-    }

-

-    /**

-     * Sets the qualified name of the defined item.

-     *

-     * @param name new qualified name

-     */

-    public void setName(QName name) {

-        this.name = name;

-    }

-

-    /**

-     * Returns the value of the AutoCreated item definition property.

-     *

-     * @return AutoCreated property value

-     */

-    public boolean isAutoCreated() {

-        return autoCreated;

-    }

-

-    /**

-     * Sets the value of the AutoCreated item definition property.

-     *

-     * @param autoCreated new AutoCreated property value

-     */

-    public void setAutoCreated(boolean autoCreated) {

-        this.autoCreated = autoCreated;

-    }

-

-    /**

-     * Returns the value of the Mandatory item definition property.

-     *

-     * @return Mandatory property value

-     */

-    public boolean isMandatory() {

-        return mandatory;

-    }

-

-    /**

-     * Sets the value of the Mandatory item definition property.

-     *

-     * @param mandatory new Mandatory property value

-     */

-    public void setMandatory(boolean mandatory) {

-        this.mandatory = mandatory;

-    }

-

-    /**

-     * Returns the value of the OnParentVerson item definition property.

-     *

-     * @return OnParentVersion property value

-     */

-    public int getOnParentVersion() {

-        return onParentVersion;

-    }

-

-    /**

-     * Sets the value of the OnParentVersion item definition property.

-     *

-     * @param onParentVersion new OnParentVersion property value

-     */

-    public void setOnParentVersion(int onParentVersion) {

-        this.onParentVersion = onParentVersion;

-    }

-

-    /**

-     * Returns the value of the Protected item definition property.

-     *

-     * @return Protected property value

-     */

-    public boolean isProtected() {

-        return isProtected;

-    }

-

-    /**

-     * Sets the value of the Protected item definition property.

-     *

-     * @param isProtected new Protected property value

-     */

-    public void setProtected(boolean isProtected) {

-        this.isProtected = isProtected;

-    }

-

-    public int compareTo(Object object) {

-        ItemDefinitionState that = (ItemDefinitionState) object;

-        if ((this.name == null) != (that.name == null)) {

-            return (name != null) ? -1 : 1;

-        } else if (this.name != null && this.name.compareTo(that.name) != 0) {

-            return this.name.compareTo(that.name);

-        } else if (this.autoCreated != that.autoCreated) {

-            return autoCreated ? -1 : 1;

-        } else if (this.mandatory != that.mandatory) {

-            return mandatory ? -1 : 1;

-        } else if (this.isProtected != that.isProtected) {

-            return isProtected ? -1 : 1;

-        } else {

-            return this.onParentVersion - that.onParentVersion;

-        }

-    }

-

-    public boolean equals(Object object) {

-        if (this == object) {

-            return true;

-        } else if (object instanceof ItemDefinitionState) {

-            ItemDefinitionState that = (ItemDefinitionState) object;

-            return ((name != null) ? name.equals(that.name) : (that.name == null))

-                && this.autoCreated == that.autoCreated

-                && this.isProtected == that.isProtected

-                && this.mandatory == that.mandatory

-                && this.onParentVersion == that.onParentVersion;

-        } else {

-            return false;

-        }

-    }

-

-    public int hashCode() {

-        int code = 37;

-        code = code * 17 + ((name != null) ? name.hashCode() : 0);

-        code = code * 17 + (autoCreated ? 1 : 0);

-        code = code * 17 + (isProtected ? 1 : 0);

-        code = code * 17 + (mandatory ? 1 : 0);

-        code = code * 17 + onParentVersion;

-        return code;

-    }

-    

-}

diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/state/nodetype/NodeDefinitionState.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/state/nodetype/NodeDefinitionState.java
deleted file mode 100644
index 36e51c5..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/state/nodetype/NodeDefinitionState.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*

- * Copyright 2004-2005 The Apache Software Foundation or its licensors,

- *                     as applicable.

- *

- * Licensed under the Apache License, Version 2.0 (the "License");

- * you may not use this file except in compliance with the License.

- * You may obtain a copy of the License at

- *

- *      http://www.apache.org/licenses/LICENSE-2.0

- *

- * Unless required by applicable law or agreed to in writing, software

- * distributed under the License is distributed on an "AS IS" BASIS,

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- * See the License for the specific language governing permissions and

- * limitations under the License.

- */

-package org.apache.jackrabbit.state.nodetype;

-

-import java.util.Arrays;

-

-import org.apache.jackrabbit.name.QName;

-

-/**

- * Node definition state. Instances of this class are used to hold

- * and manage the internal state of node definitions.

- */

-public class NodeDefinitionState extends ItemDefinitionState {

-

-    /** Name of the default primary type of the defined node. */

-    private QName defaultPrimaryTypeName = null;

-

-    /** Names of the required primary types of the defined node. */

-    private QName[] requiredPrimaryTypeNames = new QName[0];

-

-    /** The AllowsSameNameSiblings node definition property. */

-    private boolean allowsSameNameSiblings = false;

-

-    /**

-     * Returns the name of the default primary type of the defined node.

-     *

-     * @return default primary type name

-     */

-    public QName getDefaultPrimaryTypeName() {

-        return defaultPrimaryTypeName;

-    }

-

-    /**

-     * Sets the name of the default primary type of the defined node.

-     *

-     * @param defaultPrimaryType new default primary type name

-     */

-    public void setDefaultPrimaryTypeName(QName defaultPrimaryType) {

-        this.defaultPrimaryTypeName = defaultPrimaryType;

-    }

-

-    /**

-     * Returns the names of the required primary types of the defined node.

-     *

-     * @return type names

-     */

-    public QName[] getRequiredPrimaryTypeNames() {

-        return requiredPrimaryTypeNames;

-    }

-

-    /**

-     * Sets the list of required primary types.

-     *

-     * @param requiredPrimaryTypeNames type names

-     */

-    public void setRequiredPrimaryTypeName(QName[] requiredPrimaryTypeNames) {

-        this.requiredPrimaryTypeNames = requiredPrimaryTypeNames;

-        Arrays.sort(this.requiredPrimaryTypeNames);

-    }

-

-    /**

-     * Returns the value of the AllowsSameNameSiblings node definition property.

-     *

-     * @return AllowsSameNameSiblings property value

-     */

-    public boolean allowsSameNameSiblings() {

-        return allowsSameNameSiblings;

-    }

-

-    /**

-     * Sets the value of the AllowsSameNameSiblings node definition property.

-     *

-     * @param allowsSameNameSiblings new AllowsSameNameSiblings property value

-     */

-    public void setAllowsSameNameSiblings(boolean allowsSameNameSiblings) {

-        this.allowsSameNameSiblings = allowsSameNameSiblings;

-    }

-

-    public boolean equals(Object object) {

-        return (this == object)

-            || (object != null && new StateComparator().compare(this, object) == 0);

-    }

-

-    public int hashCode() {

-        int code = super.hashCode();

-        code = code * 17 + (allowsSameNameSiblings ? 1 : 0);

-        code = code * 17 + ((defaultPrimaryTypeName != null) ? defaultPrimaryTypeName.hashCode() : 0);

-        for (int i = 0; i < requiredPrimaryTypeNames.length; i++) {

-            code = code * 17 + requiredPrimaryTypeNames[i].hashCode();

-        }

-        return code;

-    }

-

-}

diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/state/nodetype/NodeTypeManagerState.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/state/nodetype/NodeTypeManagerState.java
deleted file mode 100644
index f4deaee..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/state/nodetype/NodeTypeManagerState.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*

- * Copyright 2004-2005 The Apache Software Foundation or its licensors,

- *                     as applicable.

- *

- * Licensed under the Apache License, Version 2.0 (the "License");

- * you may not use this file except in compliance with the License.

- * You may obtain a copy of the License at

- *

- *      http://www.apache.org/licenses/LICENSE-2.0

- *

- * Unless required by applicable law or agreed to in writing, software

- * distributed under the License is distributed on an "AS IS" BASIS,

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- * See the License for the specific language governing permissions and

- * limitations under the License.

- */

-package org.apache.jackrabbit.state.nodetype;

-

-/**

- * Node type manager state. Instances of this class are used to hold

- * and manage the internal state of node type managers.

- */

-public class NodeTypeManagerState {

-

-    /** Available node type states. */

-    private NodeTypeState[] nodeTypeStates;

-

-    /**

-     * Returns all available node type states.

-     *

-     * @return node type states

-     */

-    public NodeTypeState[] getNodeTypeStates() {

-        return nodeTypeStates;

-    }

-

-    /**

-     * Sets the node type manager state.

-     *

-     * @param nodeTypeStates node type states

-     */

-    public void setNodeTypeStates(NodeTypeState[] nodeTypeStates) {

-        this.nodeTypeStates = nodeTypeStates;

-    }

-

-}

diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/state/nodetype/NodeTypeState.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/state/nodetype/NodeTypeState.java
deleted file mode 100644
index 788a3d5..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/state/nodetype/NodeTypeState.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*

- * Copyright 2004-2005 The Apache Software Foundation or its licensors,

- *                     as applicable.

- *

- * Licensed under the Apache License, Version 2.0 (the "License");

- * you may not use this file except in compliance with the License.

- * You may obtain a copy of the License at

- *

- *      http://www.apache.org/licenses/LICENSE-2.0

- *

- * Unless required by applicable law or agreed to in writing, software

- * distributed under the License is distributed on an "AS IS" BASIS,

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- * See the License for the specific language governing permissions and

- * limitations under the License.

- */

-package org.apache.jackrabbit.state.nodetype;

-

-import org.apache.jackrabbit.name.QName;

-

-/**

- * Node type state. Instances of this class are used to hold

- * and manage the internal state of node types.

- */

-public class NodeTypeState {

-

-    /** Name of the node type. */

-    private QName name = null;

-

-    /** The Mixin node type property. */

-    private boolean mixin = false;

-

-    /** The HasOrderableChildNodes node type property. */

-    private boolean hasOrderableChildNodes = false;

-

-    /** Name of the primary item of the node type. */

-    private QName primaryItemName = null;

-

-    /** Names of the declared supertypes. */

-    private QName[] supertypeNames = new QName[0];

-

-    /** Child node definition states. */

-    private NodeDefinitionState[] childNodeDefinitionStates =

-        new NodeDefinitionState[0];

-

-    /** Property definition states. */

-    private PropertyDefinitionState[] propertyDefinitionStates =

-        new PropertyDefinitionState[0];

-

-    /**

-     * Returns the node type name.

-     *

-     * @return qualified name

-     */

-    public QName getName() {

-        return name;

-    }

-

-    /**

-     * Sets the node type name.

-     *

-     * @param name new qualified name

-     */

-    public void setName(QName name) {

-        this.name = name;

-    }

-

-    /**

-     * Returns the value of the Mixin node type property.

-     *

-     * @return Mixin property value

-     */

-    public boolean isMixin() {

-        return mixin;

-    }

-

-    /**

-     * Sets the value of the Mixin node type property.

-     *

-     * @param mixin new Mixin property value

-     */

-    public void setMixin(boolean mixin) {

-        this.mixin = mixin;

-    }

-

-    /**

-     * Returns the value of the HasOrderableChildNodes node type property.

-     *

-     * @return HasOrderableChildNodes property value

-     */

-    public boolean hasOrderableChildNodes() {

-        return hasOrderableChildNodes;

-    }

-

-    /**

-     * Sets the value of the HasOrderableChildNodes node type property.

-     *

-     * @param hasOrderableChildNodes new HasOrderableChildNodes property value

-     */

-    public void setHasOrderableChildNodes(boolean hasOrderableChildNodes) {

-        this.hasOrderableChildNodes = hasOrderableChildNodes;

-    }

-

-    /**

-     * Returns the name of the primary item of the node type.

-     *

-     * @return primary item name

-     */

-    public QName getPrimaryItemName() {

-        return primaryItemName;

-    }

-

-    /**

-     * Sets the name of the primary item of the node type.

-     *

-     * @param primaryItemName new primary item name

-     */

-    public void setPrimaryItemName(QName primaryItemName) {

-        this.primaryItemName = primaryItemName;

-    }

-

-    /**

-     * Returns the names of the declared supertypes.

-     *

-     * @return supertype names

-     */

-    public QName[] getSupertypeNames() {

-        return supertypeNames;

-    }

-

-    /**

-     * Sets the list of declared supertypes.

-     *

-     * @param supertypeNames supertype names

-     */

-    public void setSupertypeNames(QName[] supertypeNames) {

-        this.supertypeNames = supertypeNames;

-    }

-

-    /**

-     * Returns the child node definition states of the node type.

-     *

-     * @return child node definition states

-     */

-    public NodeDefinitionState[] getChildNodeDefinitionStates() {

-        return childNodeDefinitionStates;

-    }

-

-    /**

-     * Sets the list of child node definition states of the node type.

-     *

-     * @param childNodeDefinitionStates child node definition states

-     */

-    public void setChildNodeDefinitionStates(

-            NodeDefinitionState[] childNodeDefinitionStates) {

-        this.childNodeDefinitionStates = childNodeDefinitionStates;

-    }

-

-    /**

-     * Returns the property definition states of the node type.

-     *

-     * @return property definition states

-     */

-    public PropertyDefinitionState[] getPropertyDefinitionStates() {

-        return propertyDefinitionStates;

-    }

-

-    /**

-     * Sets the list of property definition states of the node type.

-     *

-     * @param propertyDefinitionStates property definition states

-     */

-    public void setPropertyDefinitionStates(

-            PropertyDefinitionState[] propertyDefinitionStates) {

-        this.propertyDefinitionStates = propertyDefinitionStates;

-    }

-

-    public boolean equals(Object object) {

-        return (this == object)

-            || (object != null && new StateComparator().compare(this, object) == 0);

-    }

-

-    public int hashCode() {

-        int code = 37;

-        code = code * 17 + ((name != null) ? name.hashCode() : 0);

-        code = code * 17 + (mixin ? 1 : 0);

-        code = code * 17 + (hasOrderableChildNodes ? 1 : 0);

-        return code;

-    }

-

-}

diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/state/nodetype/PropertyDefinitionState.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/state/nodetype/PropertyDefinitionState.java
deleted file mode 100644
index dc81a68..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/state/nodetype/PropertyDefinitionState.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*

- * Copyright 2004-2005 The Apache Software Foundation or its licensors,

- *                     as applicable.

- *

- * Licensed under the Apache License, Version 2.0 (the "License");

- * you may not use this file except in compliance with the License.

- * You may obtain a copy of the License at

- *

- *      http://www.apache.org/licenses/LICENSE-2.0

- *

- * Unless required by applicable law or agreed to in writing, software

- * distributed under the License is distributed on an "AS IS" BASIS,

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- * See the License for the specific language governing permissions and

- * limitations under the License.

- */

-package org.apache.jackrabbit.state.nodetype;

-

-import javax.jcr.PropertyType;

-

-/**

- * Property definition state. Instances of this class are used to hold

- * and manage the internal state of property definitions.

- */

-public class PropertyDefinitionState extends ItemDefinitionState {

-

-    /** Required type of the defined property. */

-    private int requiredType = PropertyType.UNDEFINED;

-

-    /** The Multiple property definition property. */

-    private boolean multiple = false;

-

-    /**

-     * Returns the required type of the defined property.

-     *

-     * @return required property type

-     */

-    public int getRequiredType() {

-        return requiredType;

-    }

-

-    /**

-     * Sets the required type of the defined property.

-     *

-     * @param requiredType new required property type

-     */

-    public void setRequiredType(int requiredType) {

-        this.requiredType = requiredType;

-    }

-

-    /**

-     * Returns the value of the Multiple property definition property.

-     *

-     * @return Multiple property value

-     */

-    public boolean isMultiple() {

-        return multiple;

-    }

-

-    /**

-     * Sets the value of the Multiple property definition property.

-     *

-     * @param multiple new Multiple property value

-     */

-    public void setMultiple(boolean multiple) {

-        this.multiple = multiple;

-    }

-

-    public boolean equals(Object object) {

-        if (this == object) {

-            return true;

-        } else if (object instanceof PropertyDefinitionState) {

-            PropertyDefinitionState that = (PropertyDefinitionState) object;

-            return super.equals(that)

-                && this.multiple == that.multiple

-                && this.requiredType == that.requiredType;

-        } else {

-            return false;

-        }

-    }

-

-    public int hashCode() {

-        int code = super.hashCode();

-        code = code * 17 + (multiple ? 1 : 0);

-        code = code * 17 + requiredType;

-        return code;

-    }

-

-}

diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/state/nodetype/StateComparator.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/state/nodetype/StateComparator.java
deleted file mode 100644
index 929b773..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/state/nodetype/StateComparator.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.state.nodetype;
-
-import java.util.Comparator;
-
-import org.apache.jackrabbit.name.QName;
-
-/**
- * TODO
- */
-class StateComparator implements Comparator {
-
-    public int compare(Object a, Object b) {
-        if (a instanceof NodeTypeState) {
-            return compareNodeTypeStates((NodeTypeState) a, (NodeTypeState) b);
-        } else if (a instanceof NodeDefinitionState) {
-            return compareNodeDefinitionStates((NodeDefinitionState) a, (NodeDefinitionState) b);
-        } else if (a instanceof PropertyDefinitionState) {
-            return comparePropertyDefinitionStates((PropertyDefinitionState) a, (PropertyDefinitionState) b);
-        } else if (a instanceof QName) {
-            return compareQNames((QName) a, (QName) b);
-        } else {
-            throw new ClassCastException("Unknown class: " + a.getClass());
-        }
-    }
-
-    private int compareNodeTypeStates(NodeTypeState a, NodeTypeState b) {
-        if (compareQNames(a.getName(), b.getName()) != 0) {
-            return compareQNames(a.getName(), b.getName());
-        } else if (a.isMixin() != b.isMixin()) {
-            return a.isMixin() ? -1 : 1;
-        } else if (a.hasOrderableChildNodes() != b.hasOrderableChildNodes()) {
-            return a.hasOrderableChildNodes() ? -1 : 1;
-        } else if (compareQNames(a.getPrimaryItemName(), b.getPrimaryItemName()) != 0) {
-            return compareQNames(a.getPrimaryItemName(), b.getPrimaryItemName());
-        } else if (compareQNameArrays(a.getSupertypeNames(), b.getSupertypeNames()) != 0) {
-            return compareQNameArrays(a.getSupertypeNames(), b.getSupertypeNames());
-        } else if (comparePropertyDefinitionStateArrays(a.getPropertyDefinitionStates(), b.getPropertyDefinitionStates()) != 0) {
-            return comparePropertyDefinitionStateArrays(a.getPropertyDefinitionStates(), b.getPropertyDefinitionStates());
-        } else {
-            return compareNodeDefinitionStateArrays(a.getChildNodeDefinitionStates(), b.getChildNodeDefinitionStates());
-        }
-    }
-
-    private int compareNodeDefinitionStateArrays(
-            NodeDefinitionState[] a, NodeDefinitionState[] b) {
-        for (int i = 0; i < a.length && i < b.length; i++) {
-            if (compareNodeDefinitionStates(a[i], b[i]) != 0) {
-                return compareNodeDefinitionStates(a[i], b[i]);
-            }
-        }
-        return a.length - b.length;
-    }
-
-    private int compareNodeDefinitionStates(
-            NodeDefinitionState a, NodeDefinitionState b) {
-        if (compareItemDefinitionStates(a, b) != 0) {
-            return compareItemDefinitionStates(a, b);
-        } else if (a.allowsSameNameSiblings() != b.allowsSameNameSiblings()) {
-            return a.allowsSameNameSiblings() ? -1 : 1;
-        } else if (compareQNames(a.getDefaultPrimaryTypeName(), b.getDefaultPrimaryTypeName()) != 0) {
-            return compareQNames(a.getDefaultPrimaryTypeName(), b.getDefaultPrimaryTypeName());
-        } else {
-            return compareQNameArrays(a.getRequiredPrimaryTypeNames(), b.getRequiredPrimaryTypeNames());
-        }
-    }
-
-    private int comparePropertyDefinitionStateArrays(
-            PropertyDefinitionState[] a, PropertyDefinitionState[] b) {
-        for (int i = 0; i < a.length && i < b.length; i++) {
-            if (comparePropertyDefinitionStates(a[i], b[i]) != 0) {
-                return comparePropertyDefinitionStates(a[i], b[i]);
-            }
-        }
-        return a.length - b.length;
-    }
-    private int comparePropertyDefinitionStates(
-            PropertyDefinitionState a, PropertyDefinitionState b) {
-        if (compareItemDefinitionStates(a, b) != 0) {
-            return compareItemDefinitionStates(a, b);
-        } else if (a.isMultiple() != b.isMultiple()) {
-            return a.isMultiple() ? -1 : 1;
-        } else {
-            return a.getRequiredType() - b.getRequiredType();
-        }
-    }
-
-    private int compareItemDefinitionStates(
-            ItemDefinitionState a, ItemDefinitionState b) {
-        if (compareQNames(a.getName(), b.getName()) != 0) {
-            return compareQNames(a.getName(), b.getName());
-        } else if (a.isAutoCreated() != b.isAutoCreated()) {
-            return a.isAutoCreated() ? -1 : 1;
-        } else if (a.isMandatory() != b.isMandatory()) {
-            return a.isMandatory() ? -1 : 1;
-        } else if (a.isProtected() != b.isProtected()) {
-            return b.isProtected() ? -1 : 1;
-        } else {
-            return a.getOnParentVersion() - b.getOnParentVersion();
-        }
-    }
-
-    private int compareQNameArrays(QName[] a, QName[] b) {
-        for (int i = 0; i < a.length && i < b.length; i++) {
-            if (compareQNames(a[i], b[i]) != 0) {
-                return compareQNames(a[i], b[i]);
-            }
-        }
-        return a.length - b.length;
-    }
-
-    private int compareQNames(QName a, QName b) {
-        if (a != null && b != null) {
-            return a.compareTo(b);
-        } else if (a != null) {
-            return -1;
-        } else if (b != null) {
-            return 1;
-        } else {
-            return 0;
-        }
-    }
-
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/state/nodetype/package.html b/contrib/jcr-ext/src/java/org/apache/jackrabbit/state/nodetype/package.html
deleted file mode 100644
index 26b53dc..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/state/nodetype/package.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<body>

-Node type state implementation.

-<p>

-The classes in this package provide a simple and straightforward mechanism

-for holding and managing node type information. The node type information

-managed by this package is mutable and not bound to a specific session.

-The {@link org.apache.jackrabbit.session.nodetype} package implements the

-standard {@link javax.jcr.nodetype JCR node type interfaces} based on

-underlying node type state managed by classes from this package.

-</body>

diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/DocumentViewExportVisitor.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/DocumentViewExportVisitor.java
deleted file mode 100644
index 6d7e26f..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/DocumentViewExportVisitor.java
+++ /dev/null
@@ -1,530 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.xml;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import javax.jcr.ItemVisitor;
-import javax.jcr.Node;
-import javax.jcr.NodeIterator;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.Property;
-import javax.jcr.PropertyIterator;
-import javax.jcr.PropertyType;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.Value;
-import javax.jcr.ValueFormatException;
-
-import org.apache.commons.codec.binary.Base64;
-import org.apache.jackrabbit.name.QName;
-import org.apache.xerces.util.XMLChar;
-import org.xml.sax.Attributes;
-import org.xml.sax.ContentHandler;
-import org.xml.sax.SAXException;
-import org.xml.sax.helpers.AttributesImpl;
-
-/**
- * Generic document view exporter for JCR content repositories.
- * This class can be used to implement the XML document view export
- * operations using nothing but the standard JCR interfaces. The
- * export operation is implemented as an ItemVisitor that generates
- * the document view SAX event stream as it traverses the selected
- * JCR content tree.
- *
- * <h2>Implementing a customized XML serializer</h2>
- * <p>
- * A client can extend this class to provide customized XML serialization
- * formats. By overriding the protected includeProperty() and includeNode()
- * methods, a subclass can select which properties and nodes will be included
- * in the serialized XML stream.
- * <p>
- * For example, the following code implements an XML serialization that only
- * contains the titles of the first two levels of the node tree.
- * <pre>
- *     ContentHandler handler = ...;
- *     final Node parent = ...;
- *     parent.accept(
- *         new DocumentViewExportVisitor(handler, true, false) {
- *
- *             protected boolean includeProperty(Property property)
- *                     throws RepositoryException {
- *                 return property.getName().equals("title");
- *             }
- *
- *             protected boolean includeNode(Node node)
- *                     throws RepositoryException {
- *                 return (node.getDepth() <= parent.getDepth() + 2);
- *             }
- *
- *         });
- * </pre>
- *
- * <h2>Implementing the standard export methods</h2>
- * <p>
- * The following is an example of the
- * Session.exportDocumentView(String, ContentHandler, boolean, boolean)
- * method implemented in terms of this exporter class:
- * <pre>
- *     public void exportDocumentView(
- *             String absPath, ContentHandler handler,
- *             boolean skipBinary, boolean noRecurse)
- *             throws PathNotFoundException, SAXException, RepositoryException {
- *         Item item = getItem(absPath);
- *         if (item.isNode()) {
- *             item.accept(new DocumentViewExportVisitor(
- *                     handler, skipBinary, noRecurse));
- *         } else {
- *             throw new PathNotFoundException("Invalid node path: " + path);
- *         }
- *     }
- * </pre>
- * <p>
- * The companion method
- * Session.exportDocumentView(String, OutputStream, boolean, boolean)
- * can be implemented in terms of the above method:
- * <pre>
- *     public void exportDocumentView(
- *             String absPath, OutputStream output,
- *             boolean skipBinary, boolean noRecurse)
- *             throws PathNotFoundException, IOException, RepositoryException {
- *         try {
- *             SAXTransformerFactory factory = (SAXTransformerFactory)
- *                 SAXTransformerFactory.newInstance();
- *             TransformerHandler handler = factory.newTransformerHandler();
- *             handler.setResult(new StreamResult(out));
- *             exportDocumentView(absPath, handler, skipBinary, noRecurse);
- *         } catch (TransformerConfigurationException e) {
- *             throw new IOException(
- *                     "Unable to configure a SAX transformer: " + e.getMessage());
- *         } catch (SAXException e) {
- *             throw new IOException(
- *                     "Unable to serialize a SAX stream: " + e.getMessage());
- *         }
- *     }
- * </pre>
- *
- * @see ItemVisitor
- * @see Session#exportDocumentView(String, ContentHandler, boolean, boolean)
- * @see Session#exportDocumentView(String, java.io.OutputStream, boolean, boolean)
- */
-public class DocumentViewExportVisitor implements ItemVisitor {
-
-    /**
-     * The SAX content handler for the serialized XML stream.
-     */
-    private final ContentHandler handler;
-
-    /**
-     * Flag to skip all binary properties.
-     */
-    private final boolean skipBinary;
-
-    /**
-     * Flag to only serialize the selected node.
-     */
-    private final boolean noRecurse;
-
-    /**
-     * The root node of the serialization tree. This is the node that
-     * is mapped to the root element of the serialized XML stream.
-     */
-    private Node root;
-
-    /**
-     * The current session.
-     */
-    private Session session;
-
-    /**
-     * The prefix mapped to the <code>http://www.jcp.org/jcr/1.0</code>
-     * namespace in the current session.
-     */
-    private String jcr;
-
-    /**
-     * Creates an visitor for exporting content using the document view
-     * format. To actually perform the export operation, you need to pass
-     * the visitor instance to the selected content node using the
-     * Node.accept(ItemVisitor) method.
-     *
-     * @param handler the SAX event handler
-     * @param skipBinary flag for ignoring binary properties
-     * @param noRecurse flag for not exporting an entire content subtree
-     */
-    public DocumentViewExportVisitor(
-            ContentHandler handler, boolean skipBinary, boolean noRecurse) {
-        this.handler = handler;
-        this.skipBinary = skipBinary;
-        this.noRecurse = noRecurse;
-        this.root = null;
-    }
-
-    /**
-     * Ignored. Properties are included as attributes of node elements.
-     *
-     * @param property ignored property
-     * @see ItemVisitor#visit(Property)
-     */
-    public final void visit(Property property) {
-    }
-
-    /**
-     * Exports the visited node using the document view serialization format.
-     * This method is the main entry point to the serialization mechanism.
-     * It manages the opening and closing of the SAX event stream and the
-     * registration of the namespace mappings. The process of actually
-     * generating the document view SAX events is spread into various
-     * private methods, and can be controlled by overriding the protected
-     * includeProperty() and includeNode() methods.
-     *
-     * @param node the node to visit
-     * @throws RepositoryException on repository errors
-     * @see ItemVisitor#visit(Node)
-     * @see #includeProperty(Property)
-     * @see #includeNode(Node)
-     */
-    public final void visit(Node node) throws RepositoryException {
-        try {
-            // start document
-            if (root == null) {
-                root = node;
-                session = node.getSession();
-                jcr = session.getNamespacePrefix(QName.NS_JCR_URI); 
-                handler.startDocument();
-
-                String[] prefixes = session.getNamespacePrefixes();
-                for (int i = 0; i < prefixes.length; i++) {
-                    String uri = session.getNamespaceURI(prefixes[i]);
-                    if (!uri.equals(QName.NS_XML_URI)) {
-                        handler.startPrefixMapping(prefixes[i], uri);
-                    }
-                }
-            }
-
-            // export current node
-            String name = node.getName();
-            if (!name.equals(jcr + ":xmltext")) {
-                int colon = name.indexOf(':');
-                if (colon != -1) {
-                    String prefix = name.substring(0, colon);
-                    name = name.substring(colon + 1);
-                    exportNode(node, prefix, escapeName(name));
-                } else if (name.length() > 0) {
-                    exportNode(node, "", escapeName(name));
-                } else {
-                    exportNode(node, jcr, "root");
-                }
-            } else if (node != root) {
-                exportText(node);
-            } else {
-                throw new RepositoryException("Cannot export jcr:xmltext");
-            }
-
-            // end document
-            if (root == node) {
-                String[] prefixes = session.getNamespacePrefixes();
-                for (int i = 0; i < prefixes.length; i++) {
-                    String uri = session.getNamespaceURI(prefixes[i]);
-                    if (!uri.equals(QName.NS_XML_URI)) {
-                        handler.endPrefixMapping(prefixes[i]);
-                    }
-                }
-                handler.endDocument();
-            }
-        } catch (IOException e) {
-            throw new RepositoryException(e);
-        } catch (SAXException e) {
-            throw new RepositoryException(e);
-        }
-    }
-
-    /**
-     * Checks whether the given property should be included in the XML
-     * serialization. This method returns <code>true</code> by default,
-     * but subclasses can override this method to implement more selective
-     * XML serialization.
-     *
-     * @param property the property to check
-     * @return true if the property should be included, false otherwise
-     * @throws RepositoryException on repository errors
-     */
-    protected boolean includeProperty(Property property)
-            throws RepositoryException {
-        return true;
-    }
-
-    /**
-     * Checks whether the given node should be included in the XML
-     * serialization. This method returns <code>true</code> by default,
-     * but subclasses override this method to implement selective
-     * XML serialization.
-     * <p>
-     * Note that this method is only called for the descendants of the
-     * root node of the serialized tree. Also, this method is never called
-     * if the noRecurse flag is set because no descendant nodes will be
-     * serialized anyway.
-     *
-     * @param node the node to check
-     * @return true if the node should be included, false otherwise
-     * @throws RepositoryException on repository errors
-     */
-    protected boolean includeNode(Node node) throws RepositoryException {
-        return true;
-    }
-
-    /**
-     * Serializes a special "jcr:xmltext" node. Only the contents of the
-     * "jcr:xmlcharacters" property will be written as characters to the
-     * XML stream and no elements or attributes will be generated for
-     * this node or any other child nodes or properties.
-     *
-     * @param node the "jcr:xmltext" node
-     * @throws SAXException on SAX errors
-     * @throws RepositoryException on repository errors
-     */
-    private void exportText(Node node)
-            throws SAXException, RepositoryException {
-        try {
-            Property property = node.getProperty(jcr + ":xmlcharacters");
-            char[] characters = filterXML(property.getString());
-            handler.characters(characters, 0, characters.length);
-        } catch (PathNotFoundException ex) {
-            // ignore empty jcr:xmltext nodes
-        } catch (ValueFormatException ex) {
-            // ignore non-string jcr:xmlcharacters properties
-        }
-    }
-
-    /**
-     * Serializes the given node to the XML stream. Generates an element
-     * with the given name, and maps node properties to attributes of the
-     * generated element. If the noRecurse flag is false, then child nodes
-     * are serialized as sub-elements.
-     *
-     * @param node the given node
-     * @param prefix namespace prefix
-     * @param name escaped local name
-     * @throws IOException if a problem with binary values occurred
-     * @throws SAXException on SAX errors
-     * @throws RepositoryException on repository errors
-     */
-    private void exportNode(Node node, String prefix, String name)
-            throws IOException, SAXException, RepositoryException {
-        // Set up element name components
-        String prefixedName = name;
-        if (prefix.length() > 0) {
-            prefixedName = prefix + ":" + name;
-        } else {
-            prefixedName = name;
-        }
-        String uri = session.getNamespaceURI(prefix);
-        if (uri.length() == 0) {
-            uri = null;
-        }
-
-        // Start element
-        handler.startElement(uri, name, prefixedName, getAttributes(node));
-
-        // Visit child nodes (unless denied by the noRecurse flag)
-        if (!noRecurse) {
-            NodeIterator children = node.getNodes();
-            while (children.hasNext()) {
-                Node child = children.nextNode();
-                if (includeNode(child)) {
-                    child.accept(this);
-                }
-            }
-        }
-
-        // End element
-        handler.endElement(uri, name, prefixedName);
-    }
-
-    /**
-     * Returns the document view attributes of the given Node. The
-     * properties of the node are mapped to XML attributes directly as
-     * name-value pairs.
-     *
-     * @param node the given node
-     * @return document view attributes of the node
-     * @throws IOException if a problem with binary values occurred
-     * @throws RepositoryException on repository errors
-     */
-    private Attributes getAttributes(Node node)
-            throws IOException, RepositoryException {
-        AttributesImpl attributes = new AttributesImpl();
-        
-        PropertyIterator properties = node.getProperties();
-        while (properties.hasNext()) {
-            Property property = properties.nextProperty();
-            if (!(skipBinary && property.getType() == PropertyType.BINARY)
-                    && includeProperty(property)) {
-                String name = property.getName();
-                String value = escapeValue(property);
-
-                String prefixedName;
-                String uri;
-                int colon = name.indexOf(':');
-                if (colon != -1) {
-                    String prefix = name.substring(0, colon);
-                    uri = session.getNamespaceURI(prefix);
-                    name = escapeName(name.substring(colon + 1));
-                    prefixedName = prefix + ":" + name;
-                } else {
-                    uri = session.getNamespaceURI("");
-                    name = escapeName(name);
-                    prefixedName = name;
-                }
-                attributes.addAttribute(uri, name, prefixedName, "CDATA", value);
-            }
-        }
-        
-        return attributes;
-    }
-
-    private static char[] filterXML(String value) {
-        char[] characters = value.toCharArray();
-        for (int i = 0; i < characters.length; i++) {
-            if (XMLChar.isInvalid(characters[i])) {
-                characters[i] = ' '; // TODO: What's the correct escape?
-            }
-        }
-        return characters;
-    }
-
-    /**
-     * Escapes the given JCR name according to the rules of section
-     * 6.4.3 of the JSR 170 specification.
-     *
-     * @param name JCR name
-     * @return escaped name
-     */
-    private static String escapeName(String name) {
-        StringBuffer buffer = new StringBuffer();
-
-        int colon = name.indexOf(':');
-        if (colon != -1) {
-            buffer.append(name.substring(0, colon + 1));
-            name = name.substring(colon + 1);
-        }
-
-        Pattern pattern = Pattern.compile("_([0-9a-fA-F]{4}_)");
-        Matcher matcher = pattern.matcher(name);
-        char[] characters = filterXML(matcher.replaceAll("_x005f_$1"));
-
-        for (int i = 0; i < characters.length; i++) {
-            char ch = characters[i];
-            if ((i == 0) ? XMLChar.isNCNameStart(ch) : XMLChar.isNCName(ch)) {
-                String hex = Integer.toHexString((int) ch);
-                buffer.append("_x");
-                for (int j = 4; j > hex.length(); j--) {
-                    buffer.append('0');
-                }
-                buffer.append(hex);
-                buffer.append('_');
-            } else {
-                buffer.append(ch);
-            }
-        }
-
-        return buffer.toString();
-    }
-
-    /**
-     * Returns the string representation of the given value. Binary values
-     * are encoded in Base64, while other values are just converted to their
-     * string format.
-     *
-     * @param value original value
-     * @param escape whether to apply value escapes
-     * @return escaped value
-     * @throws IOException if a problem with binary values occurred
-     * @throws RepositoryException on repository errors
-     */
-    private static String escapeValue(Value value, boolean escape)
-            throws IOException, RepositoryException {
-        if (value.getType() == PropertyType.BINARY) {
-            ByteArrayOutputStream buffer = new ByteArrayOutputStream();
-            InputStream input = value.getStream();
-            try {
-                byte[] bytes = new byte[4096];
-                for (int n = input.read(bytes); n != -1; n = input.read(bytes)) {
-                    buffer.write(bytes, 0, n);
-                }
-            } finally {
-                input.close();
-            }
-            return new String(Base64.encodeBase64(buffer.toByteArray()), "ASCII");
-        } else if (escape) {
-            StringBuffer buffer = new StringBuffer();
-            Pattern pattern = Pattern.compile("_([0-9a-fA-F]{4}_)");
-            Matcher matcher = pattern.matcher(value.getString());
-            char[] characters = filterXML(matcher.replaceAll("_x005f_$1"));
-            for (int i = 0; i < characters.length; i++) {
-                if (characters[i] == ' ') {
-                    buffer.append("_x0020_");
-                } else if (characters[i] == '\t') {
-                    buffer.append("_x0009_");
-                } else if (characters[i] == '\r') {
-                    buffer.append("_x000D_");
-                } else if (characters[i] == '\n') {
-                    buffer.append("_x000A_");
-                } else {
-                    buffer.append(characters[i]);
-                }
-            }
-            return buffer.toString();
-        } else {
-            return new String(filterXML(value.getString()));
-        }
-    }
-
-    /**
-     * Returns the document view representation of the given property.
-     * Multiple values are combined into a space-separated list of
-     * space-escaped string values, binary values are encoded using the
-     * Base64 encoding, and other values are simply returned using their
-     * default string representation.
-     *
-     * @param property the given property
-     * @return document view representation of the property value
-     * @throws IOException if a problem with binary values occurred
-     * @throws RepositoryException on repository errors
-     */
-    private static String escapeValue(Property property)
-            throws IOException, RepositoryException {
-        if (property.getDefinition().isMultiple()) {
-            StringBuffer buffer = new StringBuffer();
-            Value[] values = property.getValues();
-            for (int i = 0; i < values.length; i++) {
-                if (i > 0) {
-                    buffer.append(' ');
-                }
-                buffer.append(escapeValue(values[i], true));
-            }
-            return buffer.toString();
-        } else {
-            return escapeValue(property.getValue(), false);
-        }
-    }
-
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/DocumentViewImportContentHandler.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/DocumentViewImportContentHandler.java
deleted file mode 100644
index 6981abc..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/DocumentViewImportContentHandler.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation or its licensors,
- *                as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.xml;
-
-import java.util.Stack;
-
-import javax.jcr.NamespaceException;
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-
-import org.xml.sax.Attributes;
-import org.xml.sax.ContentHandler;
-import org.xml.sax.Locator;
-import org.xml.sax.SAXException;
-
-/**
- * TODO
- */
-public class DocumentViewImportContentHandler implements ContentHandler {
-
-    private Session session;
-    
-    private Stack stack;
-    
-    private Node node;
-    
-    private StringBuffer text;
-    
-    public DocumentViewImportContentHandler(Node parent) throws RepositoryException {
-        this.session = parent.getSession();
-        this.stack = new Stack();
-        this.node = parent;
-        this.text = new StringBuffer();
-    }
-    
-    
-    private String getName(String uri, String local, String qname)
-            throws RepositoryException {
-        if (uri == null || uri.length() == 0) {
-            return local;
-        }
-        
-        try {
-            return session.getNamespacePrefix(uri) + ":" + local;
-        } catch (NamespaceException ex) {
-            // fall through
-        }
-        
-        int i = qname.indexOf(':');
-        String prefix = (i != -1) ? qname.substring(0, i) : "ext";
-        try {
-            String base = prefix;
-            for (int no = 1; true; prefix = base + no++) {
-                session.getNamespaceURI(prefix);
-            }
-        } catch (NamespaceException ex) {
-            // fall through
-        }
-
-        session.getWorkspace().getNamespaceRegistry()
-            .registerNamespace(prefix, uri);
-        return getName(uri, local, qname);
-    }
-    
-    public void startElement(String uri, String localName, String qName,
-            Attributes atts) throws SAXException {
-        try {
-            importText();
-            
-            stack.push(node);
-
-            node = node.addNode(getName(uri, localName, qName));
-            for (int i = 0; i < atts.getLength(); i++) {
-                String name = getName(atts.getURI(i), atts.getLocalName(i),
-                        atts.getQName(i));
-                node.setProperty(name, atts.getValue(i));
-            }
-        } catch (RepositoryException ex) {
-            throw new SAXException(ex);
-        }
-    }
-
-    /**
-     * TODO
-     * {@inheritDoc}
-     */
-    public void endElement(String uri, String localName, String qName)
-            throws SAXException {
-        try {
-            importText();
-            
-            node = (Node) stack.pop();
-        } catch (RepositoryException ex) {
-            throw new SAXException(ex);
-        }
-    }
-
-    /**
-     * Appends the received characters to the current text buffer.
-     * The accumulated contents of the text buffer is written to an
-     * jcr:xmltext node when an element boundary is reached.  
-     * {@inheritDoc}
-     */
-    public void characters(char[] ch, int start, int length)
-            throws SAXException {
-        text.append(ch, start, length);
-    }
-    
-    /**
-     * Imports the accumulated XML character data as an jcr:xmltext node.
-     * The character data is stored as a jcr:xmlcharacters string property
-     * of the created node. The character data buffer is then cleared.
-     * <p>
-     * This method does nothing if the character data buffer is empty, and
-     * can therefore be invoked whenever an element boundary is reached to
-     * handle the importing of any accumulated character data.   
-     * 
-     * @throws RepositoryException
-     */
-    private void importText() throws RepositoryException {
-        if (text.length() > 0) {
-            Node xmltext = node.addNode("jcr:xmltext");
-            xmltext.setProperty("jcr:xmlcharacters", text.toString());
-            text.setLength(0);
-        }
-    }
-
-    private String unescapeName(String name) {
-        StringBuffer buffer = new StringBuffer();
-        for (int i = name.indexOf("_x"); i != -1; i = name.indexOf("_x")) {
-            buffer.append(name.substring(0, i));
-            if (i + 6 < name.length() && name.charAt(i + 6) == '_') {
-                try {
-                    buffer.append(
-                            (char) Integer.parseInt(name.substring(2, 6), 16));
-                    name = name.substring(i + 7);
-                } catch (NumberFormatException ex) {
-                    buffer.append(name.charAt(i));
-                    name = name.substring(i + 1);
-                }
-            } else {
-                buffer.append(name.charAt(i));
-                name = name.substring(i + 1);
-            }
-        }
-        buffer.append(name);
-        return buffer.toString();
-    }
-
-    
-    /** Ignored. */
-    public void setDocumentLocator(Locator locator) {
-    }
-
-    /** Ignored. */
-    public void startDocument() {
-    }
-
-    /** Ignored. */
-    public void endDocument() throws SAXException {
-    }
-
-    /** Ignored. */
-    public void startPrefixMapping(String prefix, String uri)
-            throws SAXException {
-    }
-
-    /** Ignored. */
-    public void endPrefixMapping(String prefix) throws SAXException {
-    }
-    
-    /** Ignored. */
-    public void ignorableWhitespace(char[] ch, int start, int length)
-            throws SAXException {
-    }
-
-    /** Ignored. */
-    public void processingInstruction(String target, String data)
-            throws SAXException {
-    }
-
-    /** Ignored. */
-    public void skippedEntity(String name) throws SAXException {
-    }
-
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/SystemViewExportVisitor.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/SystemViewExportVisitor.java
deleted file mode 100644
index 67e5aad..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/SystemViewExportVisitor.java
+++ /dev/null
@@ -1,429 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.xml;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-import javax.jcr.ItemVisitor;
-import javax.jcr.Node;
-import javax.jcr.NodeIterator;
-import javax.jcr.Property;
-import javax.jcr.PropertyIterator;
-import javax.jcr.PropertyType;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.Value;
-
-import org.apache.commons.codec.binary.Base64;
-import org.xml.sax.ContentHandler;
-import org.xml.sax.SAXException;
-import org.xml.sax.helpers.AttributesImpl;
-
-/**
- * Generic system view exporter for JCR content repositories.
- * This class can be used to implement the XML system view export
- * operations using nothing but the standard JCR interfaces. The
- * export operation is implemented as an ItemVisitor that generates
- * the system view SAX event stream as it traverses the selected
- * JCR content tree.
- *
- * <h2>Implementing a customized XML serializer</h2>
- * <p>
- * A client can extend this class to provide customized XML serialization
- * formats. By overriding the protected includeProperty() and includeNode()
- * methods, a subclass can select which properties and nodes will be included
- * in the serialized XML stream.
- * <p>
- * For example, the following code implements an XML serialization that only
- * contains the titles of the first two levels of the node tree.
- * <pre>
- *     ContentHandler handler = ...;
- *     Node parent = ...;
- *     parent.accept(
- *         new SystemViewExportVisitor(handler, true, false) {
- *
- *             protected boolean includeProperty(Property property)
- *                     throws RepositoryException {
- *                 if (property.getName().equals("title")) {
- *                     return super.includeProperty(property);
- *                 } else {
- *                     return false;
- *                 }
- *             }
- *
- *             protected boolean includeNode(Node node)
- *                     throws RepositoryException {
- *                 return (node.getDepth() <= root.getDepth() + 2);
- *             }
- *
- *         });
- * </pre>
- *
- * <h2>Implementing the standard export methods</h2>
- * <p>
- * The following is an example of the
- * Session.exportSysView(String, ContentHandler, boolean, boolean)
- * method implemented in terms of this exporter class:
- * <pre>
- *     public void exportSysView(String absPath, ContentHandler handler,
- *             boolean skipBinary, boolean noRecurse) throws
- *             InvalidSerializedDataException, PathNotFoundException,
- *             SAXException, RepositoryException {
- *         Item item = getItem(absPath);
- *         if (item.isNode()) {
- *             item.accept(new DocumentViewExportVisitor(
- *                     handler, skipBinary, noRecurse));
- *         } else {
- *             throw new PathNotFoundException("Invalid node path: " + path);
- *         }
- *     }
- * </pre>
- * <p>
- * The companion method
- * Session.exportSysView(String, OutputStream, boolean, boolean)
- * can be implemented in terms of the above method and the XMLSerializer
- * class from the Xerces library:
- * <pre>
- * import org.apache.xml.serialize.XMLSerializer;
- * import org.apache.xml.serialize.OutputFormat;
- *
- *     public void exportSysView(String absPath, OutputStream output,
- *             boolean skipBinary, boolean noRecurse) throws
- *             InvalidSerializedDataException, PathNotFoundException,
- *             IOException, RepositoryException {
- *         try {
- *             XMLSerializer serializer =
- *                 new XMLSerializer(output, new OutputFormat());
- *             exportSysView(absPath, serializer.asContentHandler(),
- *                     binaryAsLink, noRecurse);
- *         } catch (SAXException ex) {
- *             throw new IOException(ex.getMessage());
- *         }
- *     }
- * </pre>
- *
- * @see ItemVisitor
- * @see Session#exportSystemView(String, ContentHandler, boolean, boolean)
- * @see Session#exportSystemView(String, java.io.OutputStream, boolean, boolean)
- */
-public class SystemViewExportVisitor implements ItemVisitor {
-
-    /** The system view namespace URI. */
-    private static final String SV = "http://www.jcp.org/jcr/sv/1.0";
-
-    /** The special jcr:root node name. */
-    private static final String JCR_ROOT = "jcr:root";
-
-    /** The special jcr:uuid property name. */
-    private static final String JCR_UUID = "jcr:uuid";
-
-    /** The special jcr:primaryType property name. */
-    private static final String JCR_MIXINTYPES = "jcr:mixinTypes";
-
-    /** The special jcr:mixinTypes property name. */
-    private static final String JCR_PRIMARYTYPE = "jcr:primaryType";
-
-    /** The special sv:node element name. */
-    private static final String SV_NODE = "sv:node";
-
-    /** Local part of the special sv:node element name. */
-    private static final String NODE = "node";
-
-    /** The special sv:value element name. */
-    private static final String SV_VALUE = "sv:value";
-
-    /** Local part of the special sv:value element name. */
-    private static final String VALUE = "value";
-
-    /** The special sv:property element name. */
-    private static final String SV_PROPERTY = "sv:property";
-
-    /** Local part of the special sv:property element name. */
-    private static final String PROPERTY = "property";
-
-    /** The special sv:type element name. */
-    private static final String SV_TYPE = "sv:type";
-
-    /** Local part of the special sv:type element name. */
-    private static final String TYPE = "type";
-
-    /** The special sv:name element name. */
-    private static final String SV_NAME = "sv:name";
-
-    /** Local part of the special sv:name element name. */
-    private static final String NAME = "name";
-
-    /**
-     * The SAX content handler for the serialized XML stream.
-     */
-    private ContentHandler handler;
-
-    /**
-     * Flag to skip all binary properties.
-     */
-    private boolean skipBinary;
-
-    /**
-     * Flag to only serialize the selected node.
-     */
-    private boolean noRecurse;
-
-    /**
-     * The root node of the serialization tree. This is the node that
-     * is mapped to the root element of the serialized XML stream.
-     */
-    protected Node root;
-
-    /**
-     * Creates an visitor for exporting content using the system view
-     * format. To actually perform the export operation, you need to pass
-     * the visitor instance to the selected content node using the
-     * Node.accept(ItemVisitor) method.
-     *
-     * @param handler the SAX event handler
-     * @param skipBinary flag for ignoring binary properties
-     * @param noRecurse flag for not exporting an entire content subtree
-     */
-    public SystemViewExportVisitor(
-            ContentHandler handler, boolean skipBinary, boolean noRecurse) {
-        this.handler = handler;
-        this.skipBinary = skipBinary;
-        this.noRecurse = noRecurse;
-        this.root = null;
-    }
-
-    /**
-     * Exports the visited property using the system view serialization
-     * format. This method generates an sv:property element with appropriate
-     * sv:name and sv:type attributes. The value or values of the node
-     * are included as sv:value sub-elements.
-     *
-     * @param property the visited property
-     * @throws RepositoryException on repository errors
-     */
-    public void visit(Property property) throws RepositoryException {
-        try {
-            AttributesImpl attributes = new AttributesImpl();
-            attributes.addAttribute(SV, NAME, SV_NAME,
-                    "CDATA", property.getName());
-            attributes.addAttribute(SV, TYPE, SV_TYPE,
-                    "CDATA", PropertyType.nameFromValue(property.getType()));
-            handler.startElement(SV, PROPERTY, SV_PROPERTY, attributes);
-
-            if (property.getDefinition().isMultiple()) {
-                Value[] values = property.getValues();
-                for (int i = 0; i < values.length; i++) {
-                    exportValue(values[i]);
-                }
-            } else {
-                exportValue(property.getValue());
-            }
-
-            handler.endElement(SV, PROPERTY, SV_PROPERTY);
-        } catch (SAXException ex) {
-            throw new RepositoryException(ex);
-        }
-    }
-
-    /**
-     * Exports the visited node using the system view serialization format.
-     * This method is the main entry point to the serialization mechanism.
-     * It manages the opening and closing of the SAX event stream and the
-     * registration of the namespace mappings. The process of actually
-     * generating the document view SAX events is spread into various
-     * private methods, and can be controlled by overriding the protected
-     * includeProperty() and includeNode() methods.
-     *
-     * @param node the node to visit
-     * @throws RepositoryException on repository errors
-     */
-    public void visit(Node node) throws RepositoryException {
-        try {
-            // start document
-            if (root == null) {
-                root = node;
-                handler.startDocument();
-
-                Session session = root.getSession();
-                String[] prefixes = session.getNamespacePrefixes();
-                for (int i = 0; i < prefixes.length; i++) {
-                    handler.startPrefixMapping(prefixes[i],
-                            session.getNamespaceURI(prefixes[i]));
-                }
-            }
-
-            // export current node
-            exportNode(node);
-
-            // end document
-            if (root == node) {
-                handler.endDocument();
-            }
-        } catch (SAXException ex) {
-            throw new RepositoryException(ex);
-        }
-    }
-
-    /**
-     * Checks whether the given property should be included in the XML
-     * serialization. By default this method returns false for the special
-     * jcr:primaryType, jcr:mixinTypes, and jcr:uuid properties that are
-     * required by the system view format. This method also returns false
-     * for all binary properties if the skipBinary flag is set.
-     * Subclasses can extend this default behaviour to implement more
-     * selective XML serialization.
-     * <p>
-     * To avoid losing the default behaviour described above, subclasses
-     * should always call super.includeProperty(property) instead of
-     * simply returning true for a property.
-     *
-     * @param property the property to check
-     * @return true if the property should be included, false otherwise
-     * @throws RepositoryException on repository errors
-     */
-    protected boolean includeProperty(Property property)
-            throws RepositoryException {
-        String name = property.getName();
-        return !name.equals(JCR_PRIMARYTYPE)
-            && !name.equals(JCR_MIXINTYPES)
-            && !name.equals(JCR_UUID)
-            && (!skipBinary || property.getType() != PropertyType.BINARY);
-    }
-
-    /**
-     * Checks whether the given node should be included in the XML
-     * serialization. This method returns true by default, but subclasses
-     * can extend this behaviour to implement selective XML serialization.
-     * <p>
-     * Note that this method is only called for the descendants of the
-     * root node of the serialized tree. Also, this method is never called
-     * if the noRecurse flag is set because no descendant nodes will be
-     * serialized anyway.
-     *
-     * @param node the node to check
-     * @return true if the node should be included, false otherwise
-     * @throws RepositoryException on repository errors
-     */
-    protected boolean includeNode(Node node) throws RepositoryException {
-        return true;
-    }
-
-    /**
-     * Serializes the given node to the XML stream. This method generates
-     * an sv:node element that contains the node name as the sv:name
-     * attribute. Node properties are included as sv:property elements
-     * and child nodes as other sv:node sub-elements.
-     *
-     * @param node the given node
-     * @throws SAXException on SAX errors
-     * @throws RepositoryException on repository errors
-     */
-    private void exportNode(Node node)
-            throws SAXException, RepositoryException {
-        String name = node.getName();
-        if (name.length() == 0) {
-            name = JCR_ROOT;
-        }
-
-        // Start element
-        AttributesImpl attributes = new AttributesImpl();
-        attributes.addAttribute(SV, NAME, SV_NAME, "CDATA", name);
-        handler.startElement(SV, NODE, SV_NODE, attributes);
-
-        // Visit the meta-properties
-        node.getProperty(JCR_PRIMARYTYPE).accept(this);
-        if (node.hasProperty(JCR_MIXINTYPES)) {
-            node.getProperty(JCR_MIXINTYPES).accept(this);
-        }
-        if (node.hasProperty(JCR_UUID)) {
-            node.getProperty(JCR_UUID).accept(this);
-        }
-
-        // Visit other properties
-        PropertyIterator properties = node.getProperties();
-        while (properties.hasNext()) {
-            Property property = properties.nextProperty();
-            if (includeProperty(property)) {
-                property.accept(this);
-            }
-        }
-
-        // Visit child nodes (unless denied by the noRecurse flag)
-        if (!noRecurse) {
-            NodeIterator children = node.getNodes();
-            while (children.hasNext()) {
-                Node child = children.nextNode();
-                if (includeNode(child)) {
-                    child.accept(this);
-                }
-            }
-        }
-
-        // End element
-        handler.endElement(SV, NODE, SV_NODE);
-    }
-
-    /**
-     * Serializes the given value to the XML stream. This method generates
-     * an sv:value element and writes the string representation of the
-     * given value as the character content of the element. Binary values
-     * are encoded using the Base64 encoding.
-     *
-     * @param value the given value
-     * @throws SAXException on SAX errors
-     * @throws RepositoryException on repository errors
-     */
-    private void exportValue(Value value)
-            throws SAXException, RepositoryException {
-        try {
-            handler.startElement(SV, VALUE, SV_VALUE, new AttributesImpl());
-
-            if (value.getType() != PropertyType.BINARY) {
-                char[] characters = value.getString().toCharArray();
-                handler.characters(characters, 0, characters.length);
-            } else {
-                char[] characters =
-                    encodeValue(value.getStream()).toCharArray();
-                handler.characters(characters, 0, characters.length);
-            }
-
-            handler.endElement(SV, VALUE, SV_VALUE);
-        } catch (IOException e) {
-            throw new RepositoryException(e);
-        }
-    }
-
-    /**
-     * Encodes the given binary stream using Base64 encoding.
-     *
-     * @param input original binary value
-     * @return Base64-encoded value
-     * @throws IOException on IO errors
-     */
-    private String encodeValue(InputStream input) throws IOException {
-        ByteArrayOutputStream buffer = new ByteArrayOutputStream();
-        byte[] bytes = new byte[4096];
-        for (int n = input.read(bytes); n != -1; n = input.read(bytes)) {
-            buffer.write(bytes, 0, n);
-        }
-        return
-            new String(Base64.encodeBase64(buffer.toByteArray()), "US-ASCII");
-    }
-
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/SystemViewImportContentHandler.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/SystemViewImportContentHandler.java
deleted file mode 100644
index 4731a69..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/SystemViewImportContentHandler.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation or its licensors,
- *                as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.xml;
-
-import java.util.List;
-import java.util.Stack;
-
-import javax.jcr.NamespaceException;
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.ValueFactory;
-
-import org.xml.sax.Attributes;
-import org.xml.sax.ContentHandler;
-import org.xml.sax.Locator;
-import org.xml.sax.SAXException;
-
-/**
- * TODO
- */
-public class SystemViewImportContentHandler implements ContentHandler {
-
-    private Session session;
-
-    private ValueFactory factory;
-
-    private Stack stack;
-
-    private Node node;
-
-    private StringBuffer text;
-
-    private int type;
-
-    private List values;
-
-    public SystemViewImportContentHandler(Node parent) throws RepositoryException {
-        this.session = parent.getSession();
-        this.factory = session.getValueFactory();
-        this.stack = new Stack();
-        this.node = parent;
-        this.text = new StringBuffer();
-    }
-
-    private String getName(String uri, String local, String qname)
-            throws RepositoryException {
-        if (uri == null || uri.length() == 0) {
-            return local;
-        }
-
-        try {
-            return session.getNamespacePrefix(uri) + ":" + local;
-        } catch (NamespaceException ex) {
-            // fall through
-        }
-
-        int i = qname.indexOf(':');
-        String prefix = (i != -1) ? qname.substring(0, i) : "ext";
-        try {
-            String base = prefix;
-            for (int no = 1; true; prefix = base + no++) {
-                session.getNamespaceURI(prefix);
-            }
-        } catch (NamespaceException ex) {
-            // fall through
-        }
-
-        session.getWorkspace().getNamespaceRegistry()
-            .registerNamespace(prefix, uri);
-        return getName(uri, local, qname);
-    }
-
-    public void startElement(String uri, String localName, String qName,
-            Attributes atts) throws SAXException {
-        try {
-            importText();
-
-            stack.push(node);
-
-            node = node.addNode(getName(uri, localName, qName));
-            for (int i = 0; i < atts.getLength(); i++) {
-                String name = getName(atts.getURI(i), atts.getLocalName(i),
-                        atts.getQName(i));
-                node.setProperty(name, atts.getValue(i));
-            }
-        } catch (RepositoryException ex) {
-            throw new SAXException(ex);
-        }
-    }
-
-    /**
-     * TODO
-     * {@inheritDoc}
-     */
-    public void endElement(String uri, String localName, String qName)
-            throws SAXException {
-        try {
-            if (uri.equals("SV") && localName.equals("value")) {
-                String value = text.toString();
-                values.add(factory.createValue(value, type));
-                text.setLength(0);
-            }
-            importText();
-            
-            node = (Node) stack.pop();
-        } catch (RepositoryException ex) {
-            throw new SAXException(ex);
-        }
-    }
-
-    /**
-     * Appends the received characters to the current text buffer.
-     * The accumulated contents of the text buffer is written to an
-     * jcr:xmltext node when an element boundary is reached.
-     * {@inheritDoc}
-     */
-    public void characters(char[] ch, int start, int length)
-            throws SAXException {
-        text.append(ch, start, length);
-    }
-
-    /**
-     * Imports the accumulated XML character data as an jcr:xmltext node.
-     * The character data is stored as a jcr:xmlcharacters string property
-     * of the created node. The character data buffer is then cleared.
-     * <p>
-     * This method does nothing if the character data buffer is empty, and
-     * can therefore be invoked whenever an element boundary is reached to
-     * handle the importing of any accumulated character data.
-     *
-     * @throws RepositoryException
-     */
-    private void importText() throws RepositoryException {
-        if (text.length() > 0) {
-            Node xmltext = node.addNode("jcr:xmltext");
-            xmltext.setProperty("jcr:xmlcharacters", text.toString());
-            text.setLength(0);
-        }
-    }
-
-    /** Ignored. */
-    public void setDocumentLocator(Locator locator) {
-    }
-
-    /** Ignored. */
-    public void startDocument() {
-    }
-
-    /** Ignored. */
-    public void endDocument() {
-    }
-
-    /** Ignored. */
-    public void startPrefixMapping(String prefix, String uri) {
-    }
-
-    /** Ignored. */
-    public void endPrefixMapping(String prefix) {
-    }
-
-    /** Ignored. */
-    public void ignorableWhitespace(char[] ch, int start, int length) {
-    }
-
-    /** Ignored. */
-    public void processingInstruction(String target, String data) {
-    }
-
-    /** Ignored. */
-    public void skippedEntity(String name) {
-    }
-
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/nodetype/NamespaceExtractor.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/nodetype/NamespaceExtractor.java
deleted file mode 100644
index 550df51..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/nodetype/NamespaceExtractor.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.xml.nodetype;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.jackrabbit.name.QName;
-import org.apache.jackrabbit.state.nodetype.NodeDefinitionState;
-import org.apache.jackrabbit.state.nodetype.NodeTypeManagerState;
-import org.apache.jackrabbit.state.nodetype.NodeTypeState;
-import org.apache.jackrabbit.state.nodetype.PropertyDefinitionState;
-
-class NamespaceExtractor {
-
-    public static Map extractNamespaces(
-            NodeTypeManagerState nodeTypeManagerState) {
-        NamespaceExtractor extractor = new NamespaceExtractor();
-        NodeTypeState[] nodeTypeStates = nodeTypeManagerState.getNodeTypeStates();
-        for (int i = 0; i < nodeTypeStates.length; i++) {
-            extractor.extractNamespaces(nodeTypeStates[i]);
-        }
-        return extractor.namespaces;
-    }
-
-    private final Map namespaces = new HashMap();
-
-    private void extractNamespaces(NodeTypeState nodeTypeState) {
-        extractNamespace(nodeTypeState.getName());
-        extractNamespace(nodeTypeState.getPrimaryItemName());
-        extractNamespaces(nodeTypeState.getSupertypeNames());
-        NodeDefinitionState[] childNodeDefinitionStates =
-            nodeTypeState.getChildNodeDefinitionStates();
-        for (int i = 0; i < childNodeDefinitionStates.length; i++) {
-            extractNamespaces(childNodeDefinitionStates[i]);
-        }
-        PropertyDefinitionState[] propertyDefinitionStates =
-            nodeTypeState.getPropertyDefinitionStates();
-        for (int i = 0; i < propertyDefinitionStates.length; i++) {
-            extractNamespace(propertyDefinitionStates[i].getName());
-        }
-    }
-
-    private void extractNamespaces(NodeDefinitionState nodeDefinitionState) {
-        extractNamespace(nodeDefinitionState.getName());
-        extractNamespace(nodeDefinitionState.getDefaultPrimaryTypeName());
-        extractNamespaces(nodeDefinitionState.getRequiredPrimaryTypeNames());
-    }
-
-    private void extractNamespaces(QName[] names) {
-        for (int i = 0; i < names.length; i++) {
-            extractNamespace(names[i]);
-        }
-    }
-
-    private void extractNamespace(QName name) {
-        if (name != null) {
-            String uri = name.getNamespaceURI();
-            if (!namespaces.containsKey(uri)) {
-                if (uri.equals(QName.NS_JCR_URI)) {
-                    namespaces.put(uri, QName.NS_JCR_PREFIX);
-                } else if (uri.equals(QName.NS_MIX_URI)) {
-                    namespaces.put(uri, QName.NS_MIX_PREFIX);
-                } else if (uri.equals(QName.NS_NT_URI)) {
-                    namespaces.put(uri, QName.NS_NT_PREFIX);
-                } else {
-                    namespaces.put(uri, "ns" + namespaces.size());
-                }
-            }
-        }
-    }
-    
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/nodetype/NodeTypeXML.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/nodetype/NodeTypeXML.java
deleted file mode 100644
index 20a89e6..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/nodetype/NodeTypeXML.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.xml.nodetype;
-
-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 javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
-import javax.xml.transform.Result;
-import javax.xml.transform.Source;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.sax.SAXResult;
-import javax.xml.transform.sax.SAXTransformerFactory;
-import javax.xml.transform.sax.TransformerHandler;
-import javax.xml.transform.stream.StreamResult;
-
-import org.apache.jackrabbit.state.nodetype.NodeTypeManagerState;
-import org.xml.sax.ContentHandler;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-
-/**
- * TODO
- */
-public class NodeTypeXML {
-
-    public static NodeTypeManagerState read(Source source)
-            throws TransformerConfigurationException, TransformerException {
-        NodeTypeXMLReader reader = new NodeTypeXMLReader();
-        TransformerFactory factory = TransformerFactory.newInstance();
-        // factory.setFeature("http://xml.org/sax/features/namespaces", true);
-        Transformer transformer = factory.newTransformer();
-        transformer.transform(source, new SAXResult(reader));
-        return reader.getNodeTypeManagerState();
-    }
-
-    public static NodeTypeManagerState read(InputSource source)
-            throws IOException, ParserConfigurationException, SAXException {
-        NodeTypeXMLReader reader = new NodeTypeXMLReader();
-        SAXParserFactory factory = SAXParserFactory.newInstance();
-        // factory.setFeature("http://xml.org/sax/features/namespaces", true);
-        SAXParser parser = factory.newSAXParser();
-        parser.parse(source, reader);
-        return reader.getNodeTypeManagerState();
-    }
-
-    public static NodeTypeManagerState read(File file)
-            throws IOException, ParserConfigurationException, SAXException {
-        NodeTypeXMLReader reader = new NodeTypeXMLReader();
-        SAXParserFactory factory = SAXParserFactory.newInstance();
-        // factory.setFeature("http://xml.org/sax/features/namespaces", true);
-        SAXParser parser = factory.newSAXParser();
-        parser.parse(file, reader);
-        return reader.getNodeTypeManagerState();
-    }
-
-    public static NodeTypeManagerState read(InputStream input)
-            throws IOException, ParserConfigurationException, SAXException {
-        NodeTypeXMLReader reader = new NodeTypeXMLReader();
-        SAXParserFactory factory = SAXParserFactory.newInstance();
-        // factory.setFeature("http://xml.org/sax/features/namespaces", true);
-        SAXParser parser = factory.newSAXParser();
-        parser.parse(input, reader);
-        return reader.getNodeTypeManagerState();
-    }
-
-    public static void write(NodeTypeManagerState state, ContentHandler handler)
-            throws SAXException {
-        NodeTypeXMLWriter writer = new NodeTypeXMLWriter(state);
-        writer.write(handler);
-    }
-
-    public static void write(NodeTypeManagerState state, Result result)
-            throws TransformerConfigurationException, SAXException {
-        SAXTransformerFactory factory = (SAXTransformerFactory)
-            SAXTransformerFactory.newInstance();
-        TransformerHandler handler = factory.newTransformerHandler();
-        handler.setResult(result);
-        write(state, handler);
-    }
-
-
-    public static void write(NodeTypeManagerState state, OutputStream output)
-            throws TransformerConfigurationException, SAXException {
-        write(state, new StreamResult(output));
-    }
-
-    public static void write(NodeTypeManagerState state, File file)
-            throws IOException, TransformerConfigurationException, SAXException {
-        OutputStream output = new FileOutputStream(file);
-        try {
-            write(state, output);
-        } finally {
-            output.close();
-        }
-    }
-
-    public static void write(NodeTypeManagerState state, String filename)
-            throws IOException, TransformerConfigurationException, SAXException {
-        write(state, new File(filename));
-    }
-
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/nodetype/NodeTypeXMLReader.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/nodetype/NodeTypeXMLReader.java
deleted file mode 100644
index f8ed8dc..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/nodetype/NodeTypeXMLReader.java
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.xml.nodetype;
-
-import java.util.LinkedList;
-import java.util.List;
-
-import javax.jcr.PropertyType;
-import javax.jcr.version.OnParentVersionAction;
-
-import org.apache.jackrabbit.name.IllegalNameException;
-import org.apache.jackrabbit.name.QName;
-import org.apache.jackrabbit.name.UnknownPrefixException;
-import org.apache.jackrabbit.state.nodetype.NodeDefinitionState;
-import org.apache.jackrabbit.state.nodetype.NodeTypeManagerState;
-import org.apache.jackrabbit.state.nodetype.NodeTypeState;
-import org.apache.jackrabbit.state.nodetype.PropertyDefinitionState;
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-import org.xml.sax.helpers.DefaultHandler;
-
-/**
- * TODO
- */
-class NodeTypeXMLReader extends DefaultHandler {
-
-    private StringBuffer buffer;
-
-    private SAXNamespaceResolver resolver;
-
-    private NodeTypeManagerState nodeTypeManagerState;
-
-    private List nodeTypeStates;
-
-    private NodeTypeState nodeTypeState;
-
-    private List supertypeNames;
-
-    private List propertyDefinitionStates;
-
-    private PropertyDefinitionState propertyDefinitionState;
-
-    private List defaultValues;
-
-    private List valueConstraints;
-
-    private List childNodeDefinitionStates;
-
-    private NodeDefinitionState childNodeDefinitionState;
-
-    private List requiredPrimaryTypeNames;
-
-    public NodeTypeManagerState getNodeTypeManagerState() {
-        return nodeTypeManagerState;
-    }
-
-    public void startDocument() {
-        buffer = new StringBuffer();
-        resolver = new SAXNamespaceResolver();
-        resolver.startDocument();
-        nodeTypeManagerState = new NodeTypeManagerState();
-    }
-
-    public void endDocument() {
-        resolver.endDocument();
-    }
-
-    public void startPrefixMapping(String prefix, String uri) {
-        resolver.startPrefixMapping(prefix, uri);
-    }
-
-    public void endPrefixMapping(String prefix) {
-        resolver.endPrefixMapping(prefix);
-    }
-
-    /** {@inheritDoc} */
-    public void startElement(
-            String uri, String localName, String qName, Attributes attributes)
-            throws SAXException {
-        buffer.setLength(0);
-
-        if (uri == null || uri.length() == 0) {
-            System.out.println("<" + localName + ">");
-            if (localName.equals("nodeTypes")) {
-                nodeTypeStates = new LinkedList();
-            } else if (localName.equals("nodeType")) {
-                nodeTypeState = getNodeTypeState(attributes);
-                supertypeNames = new LinkedList();
-                propertyDefinitionStates = new LinkedList();
-                childNodeDefinitionStates = new LinkedList();
-            } else if (localName.equals("supertypes")) {
-            } else if (localName.equals("supertype")) {
-            } else if (localName.equals("propertyDefinition")) {
-                propertyDefinitionState = getPropertyDefinitionState(attributes);
-            } else if (localName.equals("valueConstraints")) {
-            } else if (localName.equals("valueConstraint")) {
-            } else if (localName.equals("defaultValues")) {
-            } else if (localName.equals("defaultValue")) {
-            } else if (localName.equals("childNodeDefinition")) {
-                childNodeDefinitionState = getNodeDefinitionState(attributes);
-            } else if (localName.equals("requiredPrimaryTypes")) {
-                requiredPrimaryTypeNames = new LinkedList();
-            } else if (localName.equals("requiredPrimaryType")) {
-            } else {
-                throw new SAXException("Unknown element: " + localName);
-            }
-        }
-
-        resolver.startElement();
-    }
-
-    public void endElement(String uri, String localName, String qName)
-            throws SAXException {
-        resolver.endElement();
-
-        if (uri == null || uri.length() == 0) {
-            System.out.println("</" + localName + ">");
-            if (localName.equals("nodeTypes")) {
-                nodeTypeManagerState.setNodeTypeStates((NodeTypeState[])
-                        nodeTypeStates.toArray(new NodeTypeState[nodeTypeStates.size()]));
-            } else if (localName.equals("nodeType")) {
-                nodeTypeState.setSupertypeNames((QName[])
-                        supertypeNames.toArray(new QName[supertypeNames.size()]));
-                nodeTypeState.setPropertyDefinitionStates((PropertyDefinitionState[])
-                        propertyDefinitionStates.toArray(new PropertyDefinitionState[propertyDefinitionStates.size()]));
-                nodeTypeState.setChildNodeDefinitionStates((NodeDefinitionState[])
-                        childNodeDefinitionStates.toArray(new NodeDefinitionState[childNodeDefinitionStates.size()]));
-                nodeTypeStates.add(nodeTypeState);
-            } else if (localName.equals("supertypes")) {
-            } else if (localName.equals("supertype")) {
-                supertypeNames.add(getName());
-            } else if (localName.equals("propertyDefinition")) {
-                propertyDefinitionStates.add(propertyDefinitionState);
-            } else if (localName.equals("valueConstraints")) {
-            } else if (localName.equals("valueConstraint")) {
-            } else if (localName.equals("defaultValues")) {
-            } else if (localName.equals("defaultValue")) {
-            } else if (localName.equals("childNodeDefinition")) {
-                childNodeDefinitionStates.add(childNodeDefinitionState);
-            } else if (localName.equals("requiredPrimaryTypes")) {
-                childNodeDefinitionState.setRequiredPrimaryTypeName((QName[])
-                        requiredPrimaryTypeNames.toArray(new QName[requiredPrimaryTypeNames.size()]));
-            } else if (localName.equals("requiredPrimaryType")) {
-                requiredPrimaryTypeNames.add(getName());
-            } else {
-                throw new SAXException("Unknown element: " + localName);
-            }
-        }
-
-        buffer.setLength(0);
-    }
-
-    public void characters(char[] ch, int start, int length) {
-        buffer.append(ch, start, length);
-    }
-
-    public NodeTypeState getNodeTypeState(Attributes attributes) throws SAXException {
-        NodeTypeState state = new NodeTypeState();
-        state.setName(getName(attributes, "name"));
-        if (getValue(attributes, "primaryItemName").length() > 0) {
-            state.setPrimaryItemName(getName(attributes, "primaryItemName"));
-        }
-        state.setMixin(getBoolean(attributes, "isMixin"));
-        state.setHasOrderableChildNodes(getBoolean(attributes, "hasOrderableChildNodes"));
-        return state;
-    }
-    
-    public NodeDefinitionState getNodeDefinitionState(Attributes attributes) throws SAXException {
-        NodeDefinitionState state = new NodeDefinitionState();
-        if (!getValue(attributes, "name").equals("*")) {
-            state.setName(getName(attributes, "name"));
-        }
-        if (getValue(attributes, "defaultPrimaryType").length() > 0) {
-            state.setDefaultPrimaryTypeName(getName(attributes, "defaultPrimaryType"));
-        }
-        state.setAutoCreated(getBoolean(attributes, "autoCreated"));
-        state.setMandatory(getBoolean(attributes, "mandatory"));
-        state.setOnParentVersion(OnParentVersionAction.valueFromName(getValue(attributes, "onParentVersion")));
-        state.setProtected(getBoolean(attributes, "protected"));
-        state.setAllowsSameNameSiblings(getBoolean(attributes, "sameNameSiblings"));
-        return state;
-    }
-
-    private PropertyDefinitionState getPropertyDefinitionState(Attributes attributes) throws SAXException {
-        PropertyDefinitionState state = new PropertyDefinitionState();
-        if (!getValue(attributes, "name").equals("*")) {
-            state.setName(getName(attributes, "name"));
-        }
-        state.setRequiredType(PropertyType.valueFromName(getValue(attributes, "requiredType")));
-        state.setAutoCreated(getBoolean(attributes, "autoCreated"));
-        state.setMandatory(getBoolean(attributes, "mandatory"));
-        state.setOnParentVersion(OnParentVersionAction.valueFromName(getValue(attributes, "onParentVersion")));
-        state.setProtected(getBoolean(attributes, "protected"));
-        state.setMultiple(getBoolean(attributes, "multiple"));
-        return state;
-    }
-
-    private QName getName() throws SAXException {
-        String value = buffer.toString();
-        try {
-            return QName.fromJCRName(value, resolver);
-        } catch (UnknownPrefixException e) {
-            throw new SAXException("Unknown prefix: " + value, e);
-        } catch (IllegalNameException e) {
-            throw new SAXException("Illegal name: " + value, e);
-        }
-    }
-
-    private String getValue(Attributes attributes, String name) throws SAXException {
-        String value = attributes.getValue("", name);
-        if (value != null) {
-            return value;
-        } else {
-            throw new SAXException("Required attribute " + name + " not found");
-        }
-    }
-
-    private QName getName(Attributes attributes, String name) throws SAXException {
-        String value = getValue(attributes, name);
-        try {
-            return QName.fromJCRName(value, resolver);
-        } catch (UnknownPrefixException e) {
-            throw new SAXException("Unknown prefix: " + value, e);
-        } catch (IllegalNameException e) {
-            throw new SAXException("Illegal name: " + value, e);
-        }
-    }
-
-    private boolean getBoolean(Attributes attributes, String name)
-            throws SAXException {
-        String value = getValue(attributes, name);
-        return Boolean.valueOf(value).booleanValue();
-    }
-
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/nodetype/NodeTypeXMLWriter.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/nodetype/NodeTypeXMLWriter.java
deleted file mode 100644
index 954ff33..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/nodetype/NodeTypeXMLWriter.java
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.xml.nodetype;
-
-import java.util.Iterator;
-import java.util.Map;
-
-import javax.jcr.PropertyType;
-import javax.jcr.version.OnParentVersionAction;
-
-import org.apache.jackrabbit.name.QName;
-import org.apache.jackrabbit.state.nodetype.NodeDefinitionState;
-import org.apache.jackrabbit.state.nodetype.NodeTypeManagerState;
-import org.apache.jackrabbit.state.nodetype.NodeTypeState;
-import org.apache.jackrabbit.state.nodetype.PropertyDefinitionState;
-import org.apache.xerces.util.XMLChar;
-import org.xml.sax.Attributes;
-import org.xml.sax.ContentHandler;
-import org.xml.sax.SAXException;
-import org.xml.sax.helpers.AttributesImpl;
-
-/**
- * TODO
- */
-class NodeTypeXMLWriter {
-
-    private final NodeTypeManagerState nodeTypeManagerState;
-
-    private Map namespaces;
-
-    private ContentHandler handler;
-
-    public NodeTypeXMLWriter(NodeTypeManagerState nodeTypeManagerState) {
-        this.nodeTypeManagerState = nodeTypeManagerState;
-    }
-
-    private void startElement(String name) throws SAXException {
-        handler.startElement("", name, name, null);
-    }
-
-    private void startElement(String name, Attributes attributes)
-            throws SAXException {
-        handler.startElement("", name, name, attributes);
-    }
-
-    private void endElement(String name) throws SAXException {
-        handler.endElement("", name, name);
-    }
-
-    public void write(ContentHandler handler) throws SAXException {
-        this.namespaces =
-            NamespaceExtractor.extractNamespaces(nodeTypeManagerState);
-        this.handler = handler;
-        handler.startDocument();
-
-        Iterator entries = namespaces.entrySet().iterator();
-        while (entries.hasNext()) {
-            Map.Entry entry = (Map.Entry) entries.next();
-            handler.startPrefixMapping(
-                    (String) entry.getValue(), (String) entry.getKey()); 
-        }
-
-        write(nodeTypeManagerState);
-
-        Iterator values = namespaces.values().iterator();
-        while (values.hasNext()) {
-            handler.endPrefixMapping((String) values.next()); 
-        }
-
-        handler.endDocument();
-    }
-
-    private void write(NodeTypeManagerState nodeTypeManagerState)
-            throws SAXException {
-        startElement("nodeTypes");
-        NodeTypeState[] nodeTypeStates = nodeTypeManagerState.getNodeTypeStates();
-        for (int i = 0; i < nodeTypeStates.length; i++) {
-            write(nodeTypeStates[i]);
-        }
-        endElement("nodeTypes");
-    }
-
-    private void write(NodeTypeState nodeTypeState) throws SAXException {
-        AttributesImpl attributes = new AttributesImpl();
-        addAttribute(attributes, "name", nodeTypeState.getName());
-        QName primaryItemName = nodeTypeState.getPrimaryItemName();
-        if (primaryItemName != null) {
-            addAttribute(attributes, "primaryItemName", primaryItemName);
-        } else {
-            addAttribute(attributes, "primaryItemName", "");
-        }
-        addAttribute(attributes, "isMixin", nodeTypeState.isMixin());
-        addAttribute(attributes, "hasOrderableChildNodes", nodeTypeState.hasOrderableChildNodes());
-        startElement("nodeType", attributes);
-
-        QName[] supertypeNames = nodeTypeState.getSupertypeNames();
-        if (supertypeNames != null && supertypeNames.length > 0) {
-            startElement("supertypes");
-            for (int i = 0; i < supertypeNames.length; i++) {
-                startElement("supertype");
-                char[] characters = filterXML(toJCRName(supertypeNames[i]));
-                handler.characters(characters, 0, characters.length);
-                endElement("supertype");
-            }
-            endElement("supertypes");
-        }
-
-        PropertyDefinitionState[] propertyDefinitionStates =
-            nodeTypeState.getPropertyDefinitionStates();
-        for (int i = 0; i < propertyDefinitionStates.length; i++) {
-            write(propertyDefinitionStates[i]);
-        }
-
-        NodeDefinitionState[] childNodeDefinitionStates =
-            nodeTypeState.getChildNodeDefinitionStates();
-        for (int i = 0; i < childNodeDefinitionStates.length; i++) {
-            write(childNodeDefinitionStates[i]);
-        }
-
-        endElement("nodeType");
-    }
-
-    private void write(PropertyDefinitionState propertyDefinitionState)
-            throws SAXException {
-        AttributesImpl attributes = new AttributesImpl();
-        if (propertyDefinitionState.getName() != null) {
-            addAttribute(attributes, "name", propertyDefinitionState.getName());
-        } else {
-            addAttribute(attributes, "name", "*");
-        }
-        addAttribute(
-                attributes, "requiredType",
-                PropertyType.nameFromValue(propertyDefinitionState.getRequiredType()));
-        addAttribute(attributes, "autoCreated", propertyDefinitionState.isAutoCreated());
-        addAttribute(attributes, "mandatory", propertyDefinitionState.isMandatory());
-        addAttribute(
-                attributes, "onParentVersion",
-                OnParentVersionAction.nameFromValue(propertyDefinitionState.getOnParentVersion()));
-        addAttribute(attributes, "protected", propertyDefinitionState.isProtected());
-        addAttribute(attributes, "multiple", propertyDefinitionState.isMultiple());
-        startElement("propertyDefinition", attributes);
-        // TODO: default values
-        // TODO: value constraints
-        endElement("propertyDefinition");
-    }
-
-    private void write(NodeDefinitionState childNodeDefinitionState)
-            throws SAXException {
-        AttributesImpl attributes = new AttributesImpl();
-        if (childNodeDefinitionState.getName() != null) {
-            addAttribute(attributes, "name", childNodeDefinitionState.getName());
-        } else {
-            addAttribute(attributes, "name", "*");
-        }
-        if (childNodeDefinitionState.getDefaultPrimaryTypeName() != null) {
-            addAttribute(attributes, "defaultPrimaryType", childNodeDefinitionState.getDefaultPrimaryTypeName());
-        } else {
-            addAttribute(attributes, "defaultPrimaryType", "");
-        }
-        addAttribute(attributes, "autoCreated", childNodeDefinitionState.isAutoCreated());
-        addAttribute(attributes, "mandatory", childNodeDefinitionState.isMandatory());
-        addAttribute(
-                attributes, "onParentVersion",
-                OnParentVersionAction.nameFromValue(childNodeDefinitionState.getOnParentVersion()));
-        addAttribute(attributes, "protected", childNodeDefinitionState.isProtected());
-        addAttribute(attributes, "sameNameSiblings", childNodeDefinitionState.allowsSameNameSiblings());
-        startElement("childNodeDefinition", attributes);
-
-        QName[] requiredPrimaryTypeNames = childNodeDefinitionState.getRequiredPrimaryTypeNames();
-        if (requiredPrimaryTypeNames != null && requiredPrimaryTypeNames.length > 0) {
-            startElement("requiredPrimaryTypes");
-            for (int i = 0; i < requiredPrimaryTypeNames.length; i++) {
-                startElement("requiredPrimaryType");
-                char[] characters = filterXML(toJCRName(requiredPrimaryTypeNames[i]));
-                handler.characters(characters, 0, characters.length);
-                endElement("requiredPrimaryType");
-            }
-            endElement("requiredPrimaryTypes");
-        }
-
-        endElement("childNodeDefinition");
-    }
-
-    private void addAttribute(AttributesImpl attributes, String name, boolean value) {
-        addAttribute(attributes, name, Boolean.toString(value));
-    }
-
-    private void addAttribute(AttributesImpl attributes, String name, QName value) {
-        addAttribute(attributes, name, toJCRName(value));
-    }
-
-    private void addAttribute(AttributesImpl attributes, String name, String value) {
-        attributes.addAttribute(
-                "", name, name, "CDATA", new String(filterXML(value)));
-    }
-
-    private String toJCRName(QName name) {
-        String prefix = (String) namespaces.get(name.getNamespaceURI());
-        return prefix + ":" + name.getLocalName();
-    }
-
-    private char[] filterXML(String value) {
-        char[] characters = value.toCharArray();
-        for (int i = 0; i < characters.length; i++) {
-            if (XMLChar.isInvalid(characters[i])) {
-                characters[i] = ' '; // TODO: better escape?
-            }
-        }
-        return characters;
-    }
-
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/nodetype/SAXNamespaceResolver.java b/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/nodetype/SAXNamespaceResolver.java
deleted file mode 100644
index 54763b8..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/nodetype/SAXNamespaceResolver.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.xml.nodetype;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.Map;
-
-import javax.jcr.NamespaceException;
-
-import org.apache.jackrabbit.name.IllegalNameException;
-import org.apache.jackrabbit.name.NamespaceResolver;
-import org.apache.jackrabbit.name.NoPrefixDeclaredException;
-import org.apache.jackrabbit.name.QName;
-import org.apache.jackrabbit.name.UnknownPrefixException;
-
-/**
- * TODO
- */
-public class SAXNamespaceResolver implements NamespaceResolver {
-
-    private final LinkedList stack = new LinkedList();
-
-    public String getJCRName(QName qname) throws NoPrefixDeclaredException {
-        return qname.toJCRName(this);
-    }
-
-    public QName getQName(String name) throws IllegalNameException, UnknownPrefixException {
-        return QName.fromJCRName(name, this);
-    }
-
-    public void startDocument() {
-        stack.addFirst(new HashMap());
-    }
-
-    public void endDocument() {
-        stack.removeFirst();
-    }
-
-    public void startElement() {
-        stack.addFirst(new HashMap());
-    }
-
-    public void endElement() {
-        stack.removeFirst();
-    }
-    
-    public void startPrefixMapping(String prefix, String uri) {
-        Map context = (Map) stack.getFirst();
-        context.put(prefix, uri);
-    }
-
-    public void endPrefixMapping(String prefix) {
-        Map context = (Map) stack.getFirst();
-        context.remove(prefix);
-    }
-
-    public String getURI(String prefix) throws NamespaceException {
-        Iterator iterator = stack.iterator();
-        while (iterator.hasNext()) {
-            Map context = (Map) iterator.next();
-            String uri = (String) context.get(prefix);
-            if (uri != null) {
-                return uri;
-            }
-        }
-        throw new NamespaceException("Prefix " + prefix + " not found");
-    }
-
-    public String getPrefix(String uri) throws NamespaceException {
-        Iterator iterator = stack.iterator();
-        while (iterator.hasNext()) {
-            Map context = (Map) iterator.next();
-            Iterator entries = context.entrySet().iterator();
-            while (entries.hasNext()) {
-                Map.Entry entry = (Map.Entry) entries.next();
-                if (uri.equals(entry.getValue())) {
-                    return (String) entry.getKey();
-                }
-            }
-        }
-        throw new NamespaceException("Namespace URI " + uri + " not found");
-    }
-
-}
diff --git a/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/nodetype/nodetypes.dtd b/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/nodetype/nodetypes.dtd
deleted file mode 100644
index 584cbf6..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/nodetype/nodetypes.dtd
+++ /dev/null
@@ -1,42 +0,0 @@
-<!ELEMENT nodeTypes (nodeType)*>
-<!ELEMENT nodeType (supertypes?|propertyDefinition*|childNodeDefinition*)>
-
-<!ATTLIST nodeType
-        name CDATA #REQUIRED
-	isMixin (true|false) #REQUIRED
- 	hasOrderableChildNodes (true|false) #REQUIRED
-	primaryItemName CDATA #REQUIRED
->
-
-<!ELEMENT supertypes (supertype+)>
-<!ELEMENT supertype (CDATA)>
-
-<!ELEMENT propertyDefinition (valueConstraints?|defaultValues?)>
-<!ATTLIST propertyDefinition
-	name CDATA #REQUIRED
-	requiredType (String|Date|Path|Name|Reference|Binary|Double|Long|Boolean|undefined) #REQUIRED
-	autoCreated (true|false) #REQUIRED
-	mandatory (true|false) #REQUIRED
-	onParentVersion (COPY|VERSION|INITIALIZE|COMPUTE|IGNORE|ABORT) #REQUIRED
-	protected (true|false) #REQUIRED
-	multiple  (true|false) #REQUIRED
->
-
-<!ELEMENT valueConstraints (valueConstraint+)>
-<!ELEMENT valueConstraint (CDATA)>
-<!ELEMENT defaultValues (defaultValue+)>
-<!ELEMENT defaultValue (CDATA)>
-
-<!ELEMENT childNodeDefinition (requiredPrimaryTypes)>
-<!ATTLIST childNodeDefinition
-	name CDATA #REQUIRED
-	defaultPrimaryType  CDATA #REQUIRED
-	autoCreated (true|false) #REQUIRED
-	mandatory (true|false) #REQUIRED
-	onParentVersion (COPY|VERSION|INITIALIZE|COMPUTE|IGNORE|ABORT) #REQUIRED
-	protected (true|false) #REQUIRED
-	sameNameSiblings (true|false) #REQUIRED
->
-
-<!ELEMENT requiredPrimaryTypes (requiredPrimaryType+)>
-<!ELEMENT requiredPrimaryType (CDATA)>
diff --git a/contrib/jcr-server/LICENSE.txt b/contrib/jcr-server/LICENSE.txt
deleted file mode 100644
index d645695..0000000
--- a/contrib/jcr-server/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/contrib/jcr-server/README.txt b/contrib/jcr-server/README.txt
deleted file mode 100644
index 9dbfcfa..0000000
--- a/contrib/jcr-server/README.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-README - JCR Server

--------------------

-

-Requirements

-------------

-

-This project assumes that you have already successfully compiled and 

-installed the parent project Jackrabbit and the contrib project jcr-rmi

-into your maven repository. If this is not the case, go back to the root

-project and launch

-

-  commons:  maven jar:install

-

-which will build and copy Jackrabbit into ~/.maven/repository/org.apache.jackrabbit/jars

-

-Also go to the contrib project jcr-rmi and launch

-

-  maven jar:install

-

-which will build and copy jcr-rmi to ~/.maven/repository/org.apache.jackrabbit/jars

-

-After building all dependencies one can build the actual server webapp

-

-  cd webdav

-  maven jar:install

-

-  cd ../server

-  maven jar:install

-

-  cd ../client

-  maven jar:install

-

-  cd ../webapp

-  maven

-

diff --git a/contrib/jcr-server/client/maven.xml b/contrib/jcr-server/client/maven.xml
deleted file mode 100644
index 30fb2ca..0000000
--- a/contrib/jcr-server/client/maven.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                       as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 default="jar">
-    <!--
-        the 'clean' goal is already redefined in the maven.xml
-        of the parent project. we need to redefine it here
-        again to 'maven clean' works.
-    -->
-    <goal name="clean">
-  	    <attainGoal name="clean:clean"/>
-  	</goal>
-</project>
diff --git a/contrib/jcr-server/client/project.properties b/contrib/jcr-server/client/project.properties
deleted file mode 100644
index 0569e85..0000000
--- a/contrib/jcr-server/client/project.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-maven.javadoc.links=http://java.sun.com/j2se/1.4.2/docs/api/,http://www.day.com/maven/jsr170/javadocs/jcr-0.16.1-pfd/
-maven.repo.remote = http://www.ibiblio.org/maven/,http://www.day.com/maven/
diff --git a/contrib/jcr-server/client/project.xml b/contrib/jcr-server/client/project.xml
deleted file mode 100644
index 9cd7ef2..0000000
--- a/contrib/jcr-server/client/project.xml
+++ /dev/null
@@ -1,106 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                       as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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>
-    <!-- ====================================================================== -->
-    <!-- P R O J E C T  D E S C R I P T I O N                                   -->
-    <!-- ====================================================================== -->
-    <extend>${basedir}/../project.xml</extend>
-    <artifactId>jcr-client</artifactId>
-    <name>JCRWebdavServer Client Library</name>
-
-    <!-- ====================================================================== -->
-    <!-- D E P E N D E N C I E S                                                -->
-    <!-- ====================================================================== -->
-    <dependencies>
-        <!-- internal dependencies -->
-        <dependency>
-            <artifactId>jcr-webdav</artifactId>
-            <groupId>org.apache.jackrabbit</groupId>
-            <version>${pom.currentVersion}</version>
-        </dependency>
-        
-        <!-- external dependencies -->
-        <dependency>
-            <groupId>jsr170</groupId>
-            <artifactId>jcr</artifactId>
-            <version>${jackrabbit.build.version.jcr}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.jackrabbit</groupId>
-            <artifactId>jackrabbit</artifactId>
-            <version>${jackrabbit.build.version.jackrabbit}</version>
-        </dependency>
-        
-        <!-- non-jackrabbit dependencies -->
-        <dependency>
-            <groupId>log4j</groupId>
-            <artifactId>log4j</artifactId>
-            <version>1.2.8</version>
-        </dependency>
-        <dependency>
-            <groupId>servletapi</groupId>
-            <artifactId>servletapi</artifactId>
-            <version>2.3</version>
-        </dependency>
-        <dependency>
-            <groupId>commons-httpclient</groupId>
-            <artifactId>commons-httpclient</artifactId>
-            <version>2.0.2</version>
-        </dependency>
-        <dependency>
-            <groupId>commons-collections</groupId>
-            <artifactId>commons-collections</artifactId>
-            <version>3.1</version>
-        </dependency>
-        <dependency>
-            <groupId>commons-logging</groupId>
-            <artifactId>commons-logging</artifactId>
-          <version>1.0</version>
-        </dependency>
-        <dependency>
-            <groupId>xerces</groupId>
-            <artifactId>xercesImpl</artifactId>
-            <version>2.6.2</version>
-            <url>http://xerces.apache.org/xerces2-j/</url>
-        </dependency>
-        <dependency>
-            <groupId>xerces</groupId>
-            <artifactId>xmlParserAPIs</artifactId>
-            <version>2.0.2</version>
-        </dependency>
-    </dependencies>
-
-    <!-- ====================================================================== -->
-    <!-- B U I L D  D E S C R I P T I O N                                       -->
-    <!-- ====================================================================== -->
-    <build>
-        <sourceDirectory>${basedir}/src/java</sourceDirectory>
-        <resources>
-            <resource>
-                <directory>src/java</directory>
-                <includes>
-                    <include>**/*.xml</include>
-                    <include>**/*.xsd</include>
-                    <include>**/*.properties</include>
-                    <include>**/*.dtd</include>
-                </includes>
-            </resource>
-        </resources>
-    </build>
-
-</project>
diff --git a/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/CheckinMethod.java b/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/CheckinMethod.java
deleted file mode 100644
index b835244..0000000
--- a/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/CheckinMethod.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.client.methods;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.DavMethods;
-import org.apache.jackrabbit.webdav.version.DeltaVConstants;
-
-/**
- * <code>CheckinMethod</code>...
- */
-public class CheckinMethod extends DavMethodBase {
-
-    private static Logger log = Logger.getLogger(CheckinMethod.class);
-
-    public CheckinMethod(String uri) {
-        super(uri);
-    }
-
-    public String getVersionUri() {
-        checkUsed();
-        return getResponseHeader(DeltaVConstants.HEADER_LOCATION).getValue();
-    }
-
-    /**
-     * @see org.apache.commons.httpclient.HttpMethod#getName()
-     */
-    public String getName() {
-        return DavMethods.METHOD_CHECKIN;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/CheckoutMethod.java b/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/CheckoutMethod.java
deleted file mode 100644
index 4334a78..0000000
--- a/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/CheckoutMethod.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.client.methods;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.DavMethods;
-
-/**
- * <code>CheckoutMethod</code>...
- */
-public class CheckoutMethod extends DavMethodBase {
-
-    private static Logger log = Logger.getLogger(CheckoutMethod.class);
-
-
-    public CheckoutMethod(String uri) {
-        super(uri);
-    }
-
-    /**
-     * @see org.apache.commons.httpclient.HttpMethod#getName()
-     */
-    public String getName() {
-        return DavMethods.METHOD_CHECKOUT;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/CopyMethod.java b/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/CopyMethod.java
deleted file mode 100644
index cbb2a91..0000000
--- a/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/CopyMethod.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.client.methods;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.DavMethods;
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.header.DepthHeader;
-import org.apache.jackrabbit.webdav.header.OverwriteHeader;
-
-/**
- * <code>CopyMethod</code>...
- */
-public class CopyMethod extends DavMethodBase {
-
-    private static Logger log = Logger.getLogger(CopyMethod.class);
-
-    /**
-     * Create a new <code>CopyMethod</code>
-     *
-     * @param uri
-     * @param destinationUri
-     */
-    public CopyMethod(String uri, String destinationUri, boolean overwrite) {
-        this(uri, destinationUri, overwrite, false);
-    }
-
-    /**
-     * Create a new <code>CopyMethod</code>
-     *
-     * @param uri
-     * @param destinationUri
-     * @param shallow
-     */
-    public CopyMethod(String uri, String destinationUri, boolean overwrite, boolean shallow) {
-        super(uri);
-        setRequestHeader(DavConstants.HEADER_DESTINATION, destinationUri);
-        setRequestHeader(new OverwriteHeader(overwrite));
-        if (shallow) {
-            setRequestHeader(new DepthHeader(false));
-        }
-    }
-
-    /**
-     * @see org.apache.commons.httpclient.HttpMethod#getName()
-     */
-    public String getName() {
-        return DavMethods.METHOD_COPY;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/DavMethodBase.java b/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/DavMethodBase.java
deleted file mode 100644
index 299680f..0000000
--- a/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/DavMethodBase.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.client.methods;
-
-import org.apache.log4j.Logger;
-import org.apache.commons.httpclient.methods.EntityEnclosingMethod;
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavServletResponse;
-import org.apache.jackrabbit.webdav.MultiStatus;
-import org.apache.jackrabbit.webdav.xml.XmlSerializable;
-import org.apache.jackrabbit.webdav.header.Header;
-import org.apache.xml.serialize.OutputFormat;
-import org.apache.xml.serialize.XMLSerializer;
-import org.xml.sax.SAXException;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.ByteArrayOutputStream;
-
-/**
- * <code>DavMethodBase</code>...
- */
-public abstract class DavMethodBase extends EntityEnclosingMethod implements DavConstants {
-
-    private static Logger log = Logger.getLogger(DavMethodBase.class);
-    static final DocumentBuilderFactory BUILDER_FACTORY = DocumentBuilderFactory.newInstance();
-    static {
-       BUILDER_FACTORY.setNamespaceAware(true);
-    }
-
-    public DavMethodBase(String uri) {
-	super(uri);
-    }
-
-    /**
-     *
-     * @param header
-     */
-    public void setRequestHeader(Header header) {
-        setRequestHeader(header.getHeaderName(), header.getHeaderValue());
-    }
-
-    /**
-     *
-     * @param requestBody
-     * @throws IOException
-     */
-    public void setRequestBody(XmlSerializable requestBody) throws IOException {
-        try {
-            ByteArrayOutputStream out = new ByteArrayOutputStream();
-            Document doc = BUILDER_FACTORY.newDocumentBuilder().newDocument();
-            doc.appendChild(requestBody.toXml(doc));
-
-            OutputFormat format = new OutputFormat("xml", "UTF-8", true);
-            XMLSerializer serializer = new XMLSerializer(out, format);
-            serializer.setNamespaces(true);
-            serializer.asDOMSerializer().serialize(doc);
-            setRequestBody(out.toString());
-        } catch (ParserConfigurationException e) {
-            throw new IOException(e.getMessage());
-        }
-    }
-
-    /**
-     * Return the response body as <code>MultiStatus</code> object.
-     *
-     * @return
-     * @throws IOException if the response body could not be parsed
-     * @throws DavException if the status code is other than MultiStatus
-     */
-    public MultiStatus getResponseBodyAsMultiStatus() throws IOException, DavException {
-	checkUsed();
-        if (getStatusCode() == DavServletResponse.SC_MULTI_STATUS) {
-            return MultiStatus.createFromXml(getRootElement());
-        } else {
-            throw new DavException(getStatusCode(), getName() + " resulted with unexpected status code: " + getStatusCode());
-        }
-    }
-
-    /**
-     * Parse the response body into an Xml <code>Document</code>.
-     *
-     * @return Xml document or <code>null</code> if the response stream is
-     * <code>null</code>.
-     * @throws IOException if the parsing fails.
-     */
-    public Document getResponseBodyAsDocument() throws IOException {
-        InputStream in = getResponseBodyAsStream();
-        if (in == null) {
-	    return null;
-	}
-	    try {
-            DocumentBuilder docBuilder = BUILDER_FACTORY.newDocumentBuilder();
-            Document document = docBuilder.parse(in);
-            return document;
-        } catch (ParserConfigurationException e) {
-            throw new IOException(e.getMessage());
-        } catch (SAXException e) {
-            throw new IOException(e.getMessage());
-	    }
-	}
-
-    /**
-     * 
-     * @return
-     * @throws IOException
-     */
-    Element getRootElement() throws IOException {
-        Document document = getResponseBodyAsDocument();
-        if (document != null) {
-            return document.getDocumentElement();
-    }
-        return null;
-    }
-
-    /**
-     *
-     * @return
-     * @throws IOException
-     */
-    public DavException getResponseException() throws IOException {
-        checkUsed();
-	if (getStatusCode() < DavServletResponse.SC_BAD_REQUEST) {
-	    log.warn("Cannot retrieve exception from successful response.");
-                return null;
-            }
-
-        // todo: build exception from response body if present.
-
-	// fallback: no or unparsable response body
-	return new DavException(getStatusCode(), getStatusText());
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/LabelMethod.java b/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/LabelMethod.java
deleted file mode 100644
index 127d4a9..0000000
--- a/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/LabelMethod.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.client.methods;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.DavMethods;
-import org.apache.jackrabbit.webdav.version.LabelInfo;
-import org.apache.jackrabbit.webdav.header.DepthHeader;
-
-import java.io.IOException;
-
-/**
- * <code>LabelMethod</code>...
- */
-public class LabelMethod extends DavMethodBase {
-
-    private static Logger log = Logger.getLogger(LabelMethod.class);
-
-    /**
-     * Create a new <code>LabelMethod</code> with the default depth.
-     *
-     * @param uri
-     * @param label
-     * @param type
-     */
-    public LabelMethod(String uri, String label, int type) throws IOException {
-        this(uri, new LabelInfo(label, type));
-    }
-
-    /**
-     * Create a new <code>LabelMethod</code>
-     *
-     * @param uri
-     * @param label
-     * @param type
-     * @param depth
-     */
-    public LabelMethod(String uri, String label, int type, int depth)
-        throws IOException {
-        this(uri, new LabelInfo(label, type, depth));
-    }
-
-    /**
-     * Create a new <code>LabelMethod</code>
-     *
-     * @param uri
-     * @param labelInfo
-     */
-    public LabelMethod(String uri, LabelInfo labelInfo) throws IOException {
-        super(uri);
-        setRequestHeader(new DepthHeader(labelInfo.getDepth()));
-        setRequestBody(labelInfo);
-    }
-
-    /**
-     * @see org.apache.commons.httpclient.HttpMethod#getName()
-     */
-    public String getName() {
-        return DavMethods.METHOD_LABEL;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/LockMethod.java b/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/LockMethod.java
deleted file mode 100644
index 808e8a9..0000000
--- a/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/LockMethod.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.client.methods;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.DavMethods;
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.header.DepthHeader;
-import org.apache.jackrabbit.webdav.header.TimeoutHeader;
-import org.apache.jackrabbit.webdav.header.IfHeader;
-import org.apache.jackrabbit.webdav.header.CodedUrlHeader;
-import org.apache.jackrabbit.webdav.lock.Scope;
-import org.apache.jackrabbit.webdav.lock.Type;
-import org.apache.jackrabbit.webdav.lock.LockInfo;
-import org.apache.jackrabbit.webdav.lock.ActiveLock;
-
-import java.io.IOException;
-
-/**
- * <code>LockMethod</code>...
- */
-public class LockMethod extends DavMethodBase {
-
-    private static Logger log = Logger.getLogger(LockMethod.class);
-
-    /**
-     * Creates a new <code>LockMethod</code>.
-     *
-     * @param uri
-     * @param lockScope
-     * @param lockType
-     * @param owner
-     * @param timeout
-     * @param isDeep
-     */
-    public LockMethod(String uri, Scope lockScope, Type lockType, String owner,
-                      long timeout, boolean isDeep) throws IOException {
-        this(uri, new LockInfo(lockScope, lockType, owner, timeout, isDeep));
-    }
-
-    /**
-     * Creates a new <code>LockMethod</code>.
-     *
-     * @param uri
-     * @param lockInfo
-     */
-    public LockMethod(String uri, LockInfo lockInfo) throws IOException {
-        super(uri);
-        if (lockInfo != null) {
-            TimeoutHeader th = new TimeoutHeader(lockInfo.getTimeout());
-            setRequestHeader(th);
-            if (!lockInfo.isRefreshLock()) {
-                DepthHeader dh = new DepthHeader(lockInfo.isDeep());
-                setRequestHeader(dh);
-                setRequestHeader(DavConstants.HEADER_CONTENT_TYPE, "text/xml; charset=UTF-8");
-                setRequestBody(lockInfo);
-            }
-        }
-    }
-
-    /**
-     * Create a new 'Refresh' lock method.
-     *
-     * @param uri
-     * @param timeout
-     * @param lockTokens used to build the untagged If header.
-     * @see IfHeader
-     */
-    public LockMethod(String uri, long timeout, String[] lockTokens) {
-        super(uri);
-        TimeoutHeader th = new TimeoutHeader(timeout);
-        setRequestHeader(th);
-        IfHeader ifh = new IfHeader(lockTokens);
-        setRequestHeader(ifh);
-    }
-
-    /**
-     * @see org.apache.commons.httpclient.HttpMethod#getName()
-     */
-    public String getName() {
-        return DavMethods.METHOD_LOCK;
-    }
-
-    public ActiveLock getResponseAsLock() throws IOException {
-        checkUsed();
-        // todo -> build lockdiscovery-prop -> retrieve activelock
-        return null;
-    }
-
-    public String getLockToken() {
-        checkUsed();
-        CodedUrlHeader cuh = new CodedUrlHeader(DavConstants.HEADER_LOCK_TOKEN, getResponseHeader(DavConstants.HEADER_LOCK_TOKEN).getValue());
-        return cuh.getCodedUrl();
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/MergeMethod.java b/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/MergeMethod.java
deleted file mode 100644
index cea5aae..0000000
--- a/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/MergeMethod.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.client.methods;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.DavMethods;
-import org.apache.jackrabbit.webdav.version.MergeInfo;
-
-import java.io.IOException;
-
-/**
- * <code>MergeMethod</code>...
- */
-public class MergeMethod extends DavMethodBase {
-
-    private static Logger log = Logger.getLogger(MergeMethod.class);
-
-    public MergeMethod(String uri, MergeInfo mergeInfo) throws IOException {
-        super(uri);
-        setRequestBody(mergeInfo);
-    }
-
-    /**
-     * @see org.apache.commons.httpclient.HttpMethod#getName()
-     */
-    public String getName() {
-        return DavMethods.METHOD_MERGE;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/MkColMethod.java b/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/MkColMethod.java
deleted file mode 100644
index 5bc2a1a..0000000
--- a/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/MkColMethod.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.client.methods;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.DavMethods;
-
-/**
- * <code>MkColMethod</code>...
- */
-public class MkColMethod extends DavMethodBase {
-
-    private static Logger log = Logger.getLogger(MkColMethod.class);
-
-    public MkColMethod(String uri) {
-        super(uri);
-    }
-
-    /**
-     * @see org.apache.commons.httpclient.HttpMethod#getName()
-     */
-    public String getName() {
-        return DavMethods.METHOD_MKCOL;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/MkWorkspaceMethod.java b/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/MkWorkspaceMethod.java
deleted file mode 100644
index 44731a4..0000000
--- a/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/MkWorkspaceMethod.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.client.methods;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.DavMethods;
-
-/**
- * <code>MkWorkspaceMethod</code>...
- */
-public class MkWorkspaceMethod extends DavMethodBase {
-
-    private static Logger log = Logger.getLogger(MkWorkspaceMethod.class);
-
-    public MkWorkspaceMethod(String uri) {
-        super(uri);
-    }
-
-    /**
-     * @see org.apache.commons.httpclient.HttpMethod#getName()
-     */
-    public String getName() {
-        return DavMethods.METHOD_MKWORKSPACE;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/MoveMethod.java b/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/MoveMethod.java
deleted file mode 100644
index cfdbb5f..0000000
--- a/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/MoveMethod.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.client.methods;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.header.OverwriteHeader;
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.DavMethods;
-
-/**
- * <code>MoveMethod</code>...
- */
-public class MoveMethod extends DavMethodBase {
-
-    private static Logger log = Logger.getLogger(MoveMethod.class);
-
-    public MoveMethod(String uri, String destinationUri, boolean overwrite) {
-        super(uri);
-        setRequestHeader(DavConstants.HEADER_DESTINATION, destinationUri);
-        setRequestHeader(new OverwriteHeader(overwrite));
-    }
-
-    /**
-     * @see org.apache.commons.httpclient.HttpMethod#getName()
-     */
-    public String getName() {
-        return DavMethods.METHOD_MOVE;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/OptionsMethod.java b/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/OptionsMethod.java
deleted file mode 100644
index 748b5fa..0000000
--- a/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/OptionsMethod.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.client.methods;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.DavMethods;
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.version.OptionsInfo;
-import org.apache.jackrabbit.webdav.version.OptionsResponse;
-import org.w3c.dom.Element;
-
-import java.io.IOException;
-
-/**
- * <code>OptionsMethod</code>...
- */
-public class OptionsMethod extends DavMethodBase {
-
-    private static Logger log = Logger.getLogger(OptionsMethod.class);
-
-    public OptionsMethod(String uri) {
-	super(uri);
-    }
-
-    public OptionsMethod(String uri, String[] optionsEntries) throws IOException {
-        this(uri, new OptionsInfo(optionsEntries));
-    }
-
-    public OptionsMethod(String uri, OptionsInfo optionsInfo) throws IOException {
-        super(uri);
-        if (optionsInfo != null) {
-            setRequestHeader(DavConstants.HEADER_CONTENT_TYPE, "text/xml; charset=UTF-8");
-            setRequestBody(optionsInfo);
-        }
-    }
-
-    /**
-     * @see org.apache.commons.httpclient.HttpMethod#getName()
-     */
-    public String getName() {
-	return DavMethods.METHOD_OPTIONS;
-    }
-
-    /**
-     *
-     * @return
-     * @throws IOException
-     */
-    public OptionsResponse getResponseAsOptionsResponse() throws IOException {
-        checkUsed();
-        OptionsResponse or = null;
-        Element rBody = getRootElement();
-        if (rBody != null) {
-            or = OptionsResponse.createFromXml(rBody);
-        }
-        return or;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/OrderPatchMethod.java b/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/OrderPatchMethod.java
deleted file mode 100644
index 9350740..0000000
--- a/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/OrderPatchMethod.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.client.methods;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.DavMethods;
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.ordering.OrderPatch;
-import org.apache.jackrabbit.webdav.ordering.Position;
-import org.apache.jackrabbit.webdav.ordering.OrderingConstants;
-
-import java.io.IOException;
-
-/**
- * <code>OrderPatchMethod</code>...
- */
-public class OrderPatchMethod extends DavMethodBase {
-
-    private static Logger log = Logger.getLogger(OrderPatchMethod.class);
-
-    /**
-     * Create a new <code>OrderPatchMethod</code> with the given order patch
-     * object.
-     *
-     * @param uri
-     * @param orderPatch
-     */
-    public OrderPatchMethod(String uri, OrderPatch orderPatch) throws IOException {
-        super(uri);
-        setRequestHeader(DavConstants.HEADER_CONTENT_TYPE, "text/xml; charset=UTF-8");
-        setRequestBody(orderPatch);
-    }
-
-    /**
-     * Create a new <code>OrderPatchMethod</code> that reorders the members
-     * of the resource identified by 'uri': the member identified by 'memberSegment'
-     * is moved to the first or to the last position, respectively.<br>
-     * See the constructor taking an <code>OrderPatch</code> object for a ORDERPATCH call
-     * that reorders multiple members at once.
-     *
-     * @param uri
-     * @param orderingHref
-     * @param memberSegment
-     * @param first
-     */
-    public OrderPatchMethod(String uri, String orderingHref, String memberSegment, boolean first) throws IOException {
-        super(uri);
-        String orderType = (first) ? OrderingConstants.XML_FIRST : OrderingConstants.XML_LAST;
-        Position p = new Position(orderType);
-        OrderPatch op = new OrderPatch(orderingHref, new OrderPatch.Member(memberSegment, p));
-        setRequestHeader(DavConstants.HEADER_CONTENT_TYPE, "text/xml; charset=UTF-8");
-        setRequestBody(op);
-    }
-
-    /**
-     * Create a new <code>OrderPatchMethod</code> that reorders the members
-     * of the resource identified by 'uri': the member identified by 'memberSegment'
-     * is reordered before or after the member identified by 'targetMemberSegmet'.<br>
-     * See the constructor taking an <code>OrderPatch</code> object for a ORDERPATCH call
-     * that reorders multiple members at once.
-     *
-     * @param uri
-     * @param orderingHref
-     * @param memberSegment
-     * @param targetMemberSegmet
-     * @param above
-     */
-    public OrderPatchMethod(String uri, String orderingHref, String memberSegment, String targetMemberSegmet, boolean above) throws IOException {
-        super(uri);
-        String orderType = (above) ? OrderingConstants.XML_AFTER : OrderingConstants.XML_BEFORE;
-        Position p = new Position(orderType, targetMemberSegmet);
-        OrderPatch op = new OrderPatch(orderingHref, new OrderPatch.Member(memberSegment, p));
-        setRequestHeader(DavConstants.HEADER_CONTENT_TYPE, "text/xml; charset=UTF-8");
-        setRequestBody(op);
-    }
-
-    /**
-     * @see org.apache.commons.httpclient.HttpMethod#getName()
-     */
-    public String getName() {
-        return DavMethods.METHOD_ORDERPATCH;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/PropFindMethod.java b/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/PropFindMethod.java
deleted file mode 100644
index 02bcd1f..0000000
--- a/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/PropFindMethod.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.client.methods;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
-import org.apache.jackrabbit.webdav.DavMethods;
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.apache.jackrabbit.webdav.header.DepthHeader;
-import org.apache.xml.serialize.XMLSerializer;
-import org.apache.xml.serialize.OutputFormat;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
-import javax.xml.parsers.ParserConfigurationException;
-import java.io.IOException;
-import java.io.ByteArrayOutputStream;
-
-/**
- * <code>PropFindMethod</code>...
- */
-public class PropFindMethod extends DavMethodBase {
-
-    private static Logger log = Logger.getLogger(PropFindMethod.class);
-
-    public PropFindMethod(String uri) throws IOException {
-        this(uri, PROPFIND_ALL_PROP, new DavPropertyNameSet(), DEPTH_INFINITY);
-    }
-
-    public PropFindMethod(String uri, DavPropertyNameSet propNameSet, int depth)
-        throws IOException {
-        this(uri, PROPFIND_BY_PROPERTY, propNameSet, depth);
-    }
-
-    public PropFindMethod(String uri, int propfindType, int depth)
-        throws IOException {
-        this(uri, propfindType, new DavPropertyNameSet(), depth);
-    }
-
-    private PropFindMethod(String uri, int propfindType, DavPropertyNameSet propNameSet,
-                           int depth) throws IOException {
-        super(uri);
-
-        DepthHeader dh = new DepthHeader(depth);
-        setRequestHeader(dh.getHeaderName(), dh.getHeaderValue());
-
-        setRequestHeader(DavConstants.HEADER_CONTENT_TYPE, "text/xml; charset=UTF-8");
-
-        // build the request body
-        try {
-            // create the document and attach the root element
-            Document document = BUILDER_FACTORY.newDocumentBuilder().newDocument();
-            Element propfind = DomUtil.createElement(document, XML_PROPFIND, NAMESPACE);
-            document.appendChild(propfind);
-
-            // fill the propfind element
-        switch (propfindType) {
-            case PROPFIND_ALL_PROP:
-                    propfind.appendChild(DomUtil.createElement(document, XML_ALLPROP, NAMESPACE));
-                break;
-            case PROPFIND_PROPERTY_NAMES:
-                    propfind.appendChild(DomUtil.createElement(document, XML_PROPNAME, NAMESPACE));
-                break;
-            default:
-                if (propNameSet == null) {
-                        propfind.appendChild(DomUtil.createElement(document, XML_PROP, NAMESPACE));
-                } else {
-                        propfind.appendChild(propNameSet.toXml(document));
-                }
-                break;
-        }
-
-            // set the request body
-            ByteArrayOutputStream out = new ByteArrayOutputStream();
-            OutputFormat format = new OutputFormat("xml", "UTF-8", true);
-            XMLSerializer serializer = new XMLSerializer(out, format);
-            serializer.asDOMSerializer().serialize(document);
-            setRequestBody(out.toString());
-
-        } catch (ParserConfigurationException e) {
-            throw new IOException(e.getMessage());
-        }
-    }
-
-    /**
-     * @see org.apache.commons.httpclient.HttpMethod#getName()
-     */
-    public String getName() {
-        return DavMethods.METHOD_PROPFIND;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/PropPatchMethod.java b/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/PropPatchMethod.java
deleted file mode 100644
index b3161f9..0000000
--- a/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/PropPatchMethod.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.client.methods;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.property.DavPropertySet;
-import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
-import org.apache.jackrabbit.webdav.DavMethods;
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.apache.xml.serialize.OutputFormat;
-import org.apache.xml.serialize.XMLSerializer;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-import javax.xml.parsers.ParserConfigurationException;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-
-/**
- * <code>PropPatchMethod</code>...
- */
-public class PropPatchMethod extends DavMethodBase implements DavConstants {
-
-    private static Logger log = Logger.getLogger(PropPatchMethod.class);
-
-    public PropPatchMethod(String uri, DavPropertySet setProperties,
-                           DavPropertyNameSet removeProperties) throws IOException {
-        super(uri);
-        if (setProperties == null || removeProperties == null) {
-            throw new IllegalArgumentException("Neither setProperties nor removeProperties must be null.");
-        }
-
-        try {
-            Document document = BUILDER_FACTORY.newDocumentBuilder().newDocument();
-            Element propupdate = DomUtil.createElement(document, XML_PROPERTYUPDATE, NAMESPACE);
-            // DAV:set
-            Element set = DomUtil.createElement(document, XML_SET, NAMESPACE);
-            set.appendChild(setProperties.toXml(document));
-            // DAV:remove
-            Element remove = DomUtil.createElement(document, XML_REMOVE, NAMESPACE);
-            remove.appendChild(removeProperties.toXml(document));
-
-            propupdate.appendChild(set);
-            propupdate.appendChild(remove);
-            document.appendChild(propupdate);
-
-            ByteArrayOutputStream out = new ByteArrayOutputStream();
-            OutputFormat format = new OutputFormat("xml", "UTF-8", true);
-            XMLSerializer serializer = new XMLSerializer(out, format);
-            serializer.asDOMSerializer().serialize(document);
-            setRequestBody(out.toString());
-        } catch (ParserConfigurationException e) {
-            throw new IOException(e.getMessage());
-        }
-    }
-
-    /**
-     * @see org.apache.commons.httpclient.HttpMethod#getName()
-     */
-    public String getName() {
-        return DavMethods.METHOD_PROPPATCH;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/ReportMethod.java b/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/ReportMethod.java
deleted file mode 100644
index e296fad..0000000
--- a/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/ReportMethod.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.client.methods;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.version.report.ReportInfo;
-import org.apache.jackrabbit.webdav.header.DepthHeader;
-import org.apache.jackrabbit.webdav.DavMethods;
-import org.apache.jackrabbit.webdav.DavConstants;
-
-import java.io.IOException;
-
-/**
- * <code>ReportMethod</code>...
- */
-public class ReportMethod extends DavMethodBase {
-
-    private static Logger log = Logger.getLogger(ReportMethod.class);
-
-    public ReportMethod(String uri, ReportInfo reportInfo) throws IOException {
-	super(uri);
-	DepthHeader dh = new DepthHeader(reportInfo.getDepth());
-	setRequestHeader(dh);
-
-        setRequestHeader(DavConstants.HEADER_CONTENT_TYPE, "text/xml; charset=UTF-8");
-       	setRequestBody(reportInfo);
-    }
-
-    /**
-     * @see org.apache.commons.httpclient.HttpMethod#getName()
-     */
-    public String getName() {
-	return DavMethods.METHOD_REPORT;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/SearchMethod.java b/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/SearchMethod.java
deleted file mode 100644
index 3045a1f..0000000
--- a/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/SearchMethod.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.client.methods;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.search.SearchInfo;
-import org.apache.jackrabbit.webdav.DavMethods;
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.xml.Namespace;
-
-import java.io.IOException;
-
-/**
- * <code>SearchMethod</code>...
- */
-public class SearchMethod extends DavMethodBase {
-
-    private static Logger log = Logger.getLogger(SearchMethod.class);
-
-    public SearchMethod(String uri, String statement, String language) throws IOException {
-        this(uri, statement, language, Namespace.EMPTY_NAMESPACE);
-    }
-
-    public SearchMethod(String uri, String statement, String language, Namespace languageNamespace) throws IOException {
-        super(uri);
-        if (language != null && statement != null) {
-            setRequestHeader(DavConstants.HEADER_CONTENT_TYPE, "text/xml; charset=UTF-8");            
-            // build the request body
-            SearchInfo searchInfo = new SearchInfo(language, languageNamespace, statement);
-            setRequestBody(searchInfo);
-        }
-    }
-    
-    public SearchMethod(String uri, SearchInfo searchInfo) throws IOException {
-        super(uri);
-        setRequestHeader(DavConstants.HEADER_CONTENT_TYPE, "text/xml; charset=UTF-8");
-        setRequestBody(searchInfo);
-    }
-
-    /**
-     * @see org.apache.commons.httpclient.HttpMethod#getName()
-     */
-    public String getName() {
-        return DavMethods.METHOD_SEARCH;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/UnLockMethod.java b/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/UnLockMethod.java
deleted file mode 100644
index 439cad5..0000000
--- a/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/UnLockMethod.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.client.methods;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.DavMethods;
-import org.apache.jackrabbit.webdav.header.Header;
-import org.apache.jackrabbit.webdav.header.CodedUrlHeader;
-
-/**
- * <code>UnLockMethod</code>...
- */
-public class UnLockMethod extends DavMethodBase {
-
-    private static Logger log = Logger.getLogger(UnLockMethod.class);
-
-    public UnLockMethod(String uri, String lockToken) {
-        super(uri);
-        Header lth = new CodedUrlHeader(DavConstants.HEADER_LOCK_TOKEN, lockToken);
-        setRequestHeader(lth);
-    }
-
-    /**
-     * @see org.apache.commons.httpclient.HttpMethod#getName()
-     */
-    public String getName() {
-        return DavMethods.METHOD_UNLOCK;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/UpdateMethod.java b/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/UpdateMethod.java
deleted file mode 100644
index ff4ca1e..0000000
--- a/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/UpdateMethod.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.client.methods;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.DavMethods;
-import org.apache.jackrabbit.webdav.version.UpdateInfo;
-
-import java.io.IOException;
-
-/**
- * <code>UpdateMethod</code>...
- */
-public class UpdateMethod extends DavMethodBase {
-
-    private static Logger log = Logger.getLogger(UpdateMethod.class);
-
-    public UpdateMethod(String uri, UpdateInfo updateInfo) throws IOException {
-        super(uri);
-        setRequestBody(updateInfo);
-    }
-
-    /**
-     * @see org.apache.commons.httpclient.HttpMethod#getName()
-     */
-    public String getName() {
-        return DavMethods.METHOD_UPDATE;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/VersionControlMethod.java b/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/VersionControlMethod.java
deleted file mode 100644
index 99c9a52..0000000
--- a/contrib/jcr-server/client/src/java/org/apache/jackrabbit/webdav/client/methods/VersionControlMethod.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.client.methods;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.DavMethods;
-
-/**
- * <code>VersionControlMethod</code>...
- */
-public class VersionControlMethod extends DavMethodBase {
-
-    private static Logger log = Logger.getLogger(VersionControlMethod.class);
-
-    public VersionControlMethod(String uri) {
-        super(uri);
-    }
-
-    /**
-     * @see org.apache.commons.httpclient.HttpMethod#getName()
-     */
-    public String getName() {
-        return DavMethods.METHOD_VERSION_CONTROL;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/maven.xml b/contrib/jcr-server/maven.xml
deleted file mode 100644
index 63a0325..0000000
--- a/contrib/jcr-server/maven.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                       as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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
-    default="multiproject:install"
-    xmlns:ant="jelly:ant"
-    xmlns:m="jelly:maven"
->
-    <!--
-        redefine some common goals
-    -->
-    <goal name="clean">
-        <attainGoal name="multiproject:clean"/>
-    </goal>
-    
-    <goal name="idea">
-        <attainGoal name="idea:multiproject"/>
-    </goal>
-</project>
diff --git a/contrib/jcr-server/project.properties b/contrib/jcr-server/project.properties
deleted file mode 100644
index c51eae4..0000000
--- a/contrib/jcr-server/project.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-maven.javadoc.links=http://java.sun.com/j2se/1.4.2/docs/api/,http://www.day.com/maven/jsr170/javadocs/jcr-0.16.1-pfd/
-maven.repo.remote = http://www.ibiblio.org/maven/,http://www.day.com/maven/
-
-#-------------------------------------------------------
-jackrabbit.build.version.jcr=1.0
-jackrabbit.build.version.jackrabbit=1.0-SNAPSHOT
-jackrabbit.build.version.jcr.rmi=1.0-SNAPSHOT
-
-# use 1.4 as target even when compiling with a 1.5 JDK
-maven.compile.source=1.4
-maven.compile.target=1.4
diff --git a/contrib/jcr-server/project.xml b/contrib/jcr-server/project.xml
deleted file mode 100644
index bb081b3..0000000
--- a/contrib/jcr-server/project.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                       as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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>
-    <!-- ====================================================================== -->
-    <!-- P R O J E C T  D E S C R I P T I O N                                   -->
-    <!-- ====================================================================== -->
-    <pomVersion>3</pomVersion>
-    <groupId>org.apache.jackrabbit</groupId>
-    <artifactId>server</artifactId>
-    
-    <name>Jackrabbit-Server</name>
-    <currentVersion>1.0-SNAPSHOT</currentVersion>
-    <inceptionYear>2005</inceptionYear>
-    <package>org.apache.jackrabbit.*</package>
-    <description>
-        WebDAV library and WebDAV based JCR client/server connection facility.
-    </description>
-    <shortDescription>JCRWebdav Server</shortDescription>
-    
-    <licenses>
-        <license>
-            <name>The Apache Software License, Version 2.0</name>
-            <url>/LICENSE.txt</url>
-            <distribution>repo</distribution>
-        </license>
-    </licenses>
-</project>
diff --git a/contrib/jcr-server/server/maven.xml b/contrib/jcr-server/server/maven.xml
deleted file mode 100644
index 30fb2ca..0000000
--- a/contrib/jcr-server/server/maven.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                       as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 default="jar">
-    <!--
-        the 'clean' goal is already redefined in the maven.xml
-        of the parent project. we need to redefine it here
-        again to 'maven clean' works.
-    -->
-    <goal name="clean">
-  	    <attainGoal name="clean:clean"/>
-  	</goal>
-</project>
diff --git a/contrib/jcr-server/server/project.properties b/contrib/jcr-server/server/project.properties
deleted file mode 100644
index 0569e85..0000000
--- a/contrib/jcr-server/server/project.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-maven.javadoc.links=http://java.sun.com/j2se/1.4.2/docs/api/,http://www.day.com/maven/jsr170/javadocs/jcr-0.16.1-pfd/
-maven.repo.remote = http://www.ibiblio.org/maven/,http://www.day.com/maven/
diff --git a/contrib/jcr-server/server/project.xml b/contrib/jcr-server/server/project.xml
deleted file mode 100644
index 85c1713..0000000
--- a/contrib/jcr-server/server/project.xml
+++ /dev/null
@@ -1,91 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                       as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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>
-    <!-- ====================================================================== -->
-    <!-- P R O J E C T  D E S C R I P T I O N                                   -->
-    <!-- ====================================================================== -->
-    <extend>${basedir}/../project.xml</extend>
-    <artifactId>jcr-server</artifactId>
-    <name>JCRWebdavServer Server Library</name>
-
-    <!-- ====================================================================== -->
-    <!-- D E P E N D E N C I E S                                                -->
-    <!-- ====================================================================== -->
-    <dependencies>
-        <!-- internal dependencies -->
-        <dependency>
-            <artifactId>jcr-webdav</artifactId>
-            <groupId>org.apache.jackrabbit</groupId>
-            <version>${pom.currentVersion}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.jackrabbit</groupId>
-            <artifactId>jackrabbit-commons</artifactId>
-            <version>${jackrabbit.build.version.jackrabbit}</version>
-        </dependency>
-
-        <!-- external dependencies -->
-        <dependency>
-            <groupId>jsr170</groupId>
-            <artifactId>jcr</artifactId>
-            <version>${jackrabbit.build.version.jcr}</version>
-        </dependency>
-        
-        <!-- non-jackrabbit dependencies -->
-        <dependency>
-            <groupId>log4j</groupId>
-            <artifactId>log4j</artifactId>
-            <version>1.2.8</version>
-        </dependency>
-        <dependency>
-            <groupId>servletapi</groupId>
-            <artifactId>servletapi</artifactId>
-            <version>2.3</version>
-        </dependency>
-        <dependency>
-            <groupId>xerces</groupId>
-            <artifactId>xercesImpl</artifactId>
-            <version>2.6.2</version>
-            <url>http://xerces.apache.org/xerces2-j/</url>
-        </dependency>
-        <dependency>
-            <groupId>xerces</groupId>
-            <artifactId>xmlParserAPIs</artifactId>
-            <version>2.0.2</version>
-        </dependency>
-    </dependencies>
-
-    <!-- ====================================================================== -->
-    <!-- B U I L D  D E S C R I P T I O N                                       -->
-    <!-- ====================================================================== -->
-    <build>
-        <sourceDirectory>${basedir}/src/java</sourceDirectory>
-        <resources>
-            <resource>
-                <directory>src/java</directory>
-                <includes>
-                    <include>**/*.xml</include>
-                    <include>**/*.xsd</include>
-                    <include>**/*.properties</include>
-                    <include>**/*.dtd</include>
-                </includes>
-            </resource>
-        </resources>
-    </build>
-
-</project>
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/AbstractWebdavServlet.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/AbstractWebdavServlet.java
deleted file mode 100644
index 9c564d5..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/AbstractWebdavServlet.java
+++ /dev/null
@@ -1,1067 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.server;
-
-import org.apache.jackrabbit.server.io.IOUtil;
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavLocatorFactory;
-import org.apache.jackrabbit.webdav.DavMethods;
-import org.apache.jackrabbit.webdav.DavResource;
-import org.apache.jackrabbit.webdav.DavResourceFactory;
-import org.apache.jackrabbit.webdav.DavServletRequest;
-import org.apache.jackrabbit.webdav.DavServletResponse;
-import org.apache.jackrabbit.webdav.DavSessionProvider;
-import org.apache.jackrabbit.webdav.MultiStatus;
-import org.apache.jackrabbit.webdav.MultiStatusResponse;
-import org.apache.jackrabbit.webdav.WebdavRequest;
-import org.apache.jackrabbit.webdav.WebdavRequestImpl;
-import org.apache.jackrabbit.webdav.WebdavResponse;
-import org.apache.jackrabbit.webdav.WebdavResponseImpl;
-import org.apache.jackrabbit.webdav.io.InputContext;
-import org.apache.jackrabbit.webdav.io.InputContextImpl;
-import org.apache.jackrabbit.webdav.io.OutputContext;
-import org.apache.jackrabbit.webdav.io.OutputContextImpl;
-import org.apache.jackrabbit.webdav.lock.ActiveLock;
-import org.apache.jackrabbit.webdav.lock.LockInfo;
-import org.apache.jackrabbit.webdav.observation.EventDiscovery;
-import org.apache.jackrabbit.webdav.observation.ObservationResource;
-import org.apache.jackrabbit.webdav.observation.Subscription;
-import org.apache.jackrabbit.webdav.observation.SubscriptionInfo;
-import org.apache.jackrabbit.webdav.ordering.OrderPatch;
-import org.apache.jackrabbit.webdav.ordering.OrderingResource;
-import org.apache.jackrabbit.webdav.property.DavProperty;
-import org.apache.jackrabbit.webdav.property.DavPropertyName;
-import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
-import org.apache.jackrabbit.webdav.property.DavPropertySet;
-import org.apache.jackrabbit.webdav.search.SearchConstants;
-import org.apache.jackrabbit.webdav.search.SearchInfo;
-import org.apache.jackrabbit.webdav.search.SearchResource;
-import org.apache.jackrabbit.webdav.transaction.TransactionInfo;
-import org.apache.jackrabbit.webdav.transaction.TransactionResource;
-import org.apache.jackrabbit.webdav.version.DeltaVConstants;
-import org.apache.jackrabbit.webdav.version.DeltaVResource;
-import org.apache.jackrabbit.webdav.version.LabelInfo;
-import org.apache.jackrabbit.webdav.version.MergeInfo;
-import org.apache.jackrabbit.webdav.version.OptionsInfo;
-import org.apache.jackrabbit.webdav.version.OptionsResponse;
-import org.apache.jackrabbit.webdav.version.UpdateInfo;
-import org.apache.jackrabbit.webdav.version.VersionControlledResource;
-import org.apache.jackrabbit.webdav.version.VersionResource;
-import org.apache.jackrabbit.webdav.version.VersionableResource;
-import org.apache.jackrabbit.webdav.version.report.Report;
-import org.apache.jackrabbit.webdav.version.report.ReportInfo;
-import org.apache.log4j.Logger;
-import org.w3c.dom.Document;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * <code>AbstractWebdavServlet</code>
- * <p/>
- * todo respect Position header
- */
-abstract public class AbstractWebdavServlet extends HttpServlet implements DavConstants {
-
-    /**
-     * default logger
-     */
-    private static Logger log = Logger.getLogger(AbstractWebdavServlet.class);
-
-    /**
-     * Default value for the 'WWW-Authenticate' header, that is set, if request
-     * results in a {@link DavServletResponse#SC_UNAUTHORIZED 401 (Unauthorized)}
-     * error.
-     *
-     * @see #getAuthenticateHeaderValue()
-     */
-    public static final String DEFAULT_AUTHENTICATE_HEADER = "Basic realm=\"Jackrabbit Webdav Server\"";
-
-    /**
-     * Checks if the precondition for this request and resource is valid.
-     *
-     * @param request
-     * @param resource
-     * @return
-     */
-    abstract protected boolean isPreconditionValid(WebdavRequest request, DavResource resource);
-
-    /**
-     * Returns the <code>DavSessionProvider</code>.
-     *
-     * @return the session provider
-     */
-    abstract public DavSessionProvider getDavSessionProvider();
-
-    /**
-     * Returns the <code>DavSessionProvider</code>.
-     *
-     * @param davSessionProvider
-     */
-    abstract public void setDavSessionProvider(DavSessionProvider davSessionProvider);
-
-    /**
-     * Returns the <code>DavLocatorFactory</code>.
-     *
-     * @return the locator factory
-     */
-    abstract public DavLocatorFactory getLocatorFactory();
-
-    /**
-     * Sets the <code>DavLocatorFactory</code>.
-     *
-     * @param locatorFactory
-     */
-    abstract public void setLocatorFactory(DavLocatorFactory locatorFactory);
-
-    /**
-     * Returns the <code>DavResourceFactory</code>.
-     *
-     * @return the resource factory
-     */
-    abstract public DavResourceFactory getResourceFactory();
-
-    /**
-     * Sets the <code>DavResourceFactory</code>.
-     *
-     * @param resourceFactory
-     */
-    abstract public void setResourceFactory(DavResourceFactory resourceFactory);
-
-    /**
-     * Returns the value of the 'WWW-Authenticate' header, that is returned in
-     * case of 401 error.
-     *
-     * @return value of the 'WWW-Authenticate' header
-     */
-    abstract public String getAuthenticateHeaderValue();
-
-    /**
-     * Service the given request.
-     *
-     * @param request
-     * @param response
-     * @throws ServletException
-     * @throws IOException
-     */
-    protected void service(HttpServletRequest request, HttpServletResponse response)
-            throws ServletException, IOException {
-
-        WebdavRequest webdavRequest = new WebdavRequestImpl(request, getLocatorFactory());
-        // DeltaV requires 'Cache-Control' header for all methods except 'VERSION-CONTROL' and 'REPORT'.
-        int methodCode = DavMethods.getMethodCode(request.getMethod());
-        boolean noCache = DavMethods.isDeltaVMethod(webdavRequest) && !(DavMethods.DAV_VERSION_CONTROL == methodCode || DavMethods.DAV_REPORT == methodCode);
-        WebdavResponse webdavResponse = new WebdavResponseImpl(response, noCache);
-        try {
-            // make sure there is a authenticated user
-            if (!getDavSessionProvider().attachSession(webdavRequest)) {
-                return;
-            }
-
-            // check matching if=header for lock-token relevant operations
-            DavResource resource = getResourceFactory().createResource(webdavRequest.getRequestLocator(), webdavRequest, webdavResponse);
-            if (!isPreconditionValid(webdavRequest, resource)) {
-                webdavResponse.sendError(DavServletResponse.SC_PRECONDITION_FAILED);
-                return;
-            }
-            if (!execute(webdavRequest, webdavResponse, methodCode, resource)) {
-                super.service(request, response);
-            }
-
-        } catch (DavException e) {
-            if (e.getErrorCode() == HttpServletResponse.SC_UNAUTHORIZED) {
-                webdavResponse.setHeader("WWW-Authenticate", getAuthenticateHeaderValue());
-                webdavResponse.sendError(e.getErrorCode(), e.getStatusPhrase());
-            } else {
-                webdavResponse.sendError(e);
-            }
-        } finally {
-            getDavSessionProvider().releaseSession(webdavRequest);
-        }
-    }
-
-    /**
-     * Executes the respective method in the given webdav context
-     *
-     * @param request
-     * @param response
-     * @param method
-     * @param resource
-     * @throws ServletException
-     * @throws IOException
-     * @throws DavException
-     */
-    protected boolean execute(WebdavRequest request, WebdavResponse response,
-                              int method, DavResource resource)
-            throws ServletException, IOException, DavException {
-
-        switch (method) {
-            case DavMethods.DAV_GET:
-                doGet(request, response, resource);
-                break;
-            case DavMethods.DAV_HEAD:
-                doHead(request, response, resource);
-                break;
-            case DavMethods.DAV_PROPFIND:
-                doPropFind(request, response, resource);
-                break;
-            case DavMethods.DAV_PROPPATCH:
-                doPropPatch(request, response, resource);
-                break;
-            case DavMethods.DAV_POST:
-                doPost(request, response, resource);
-                break;
-            case DavMethods.DAV_PUT:
-                doPut(request, response, resource);
-                break;
-            case DavMethods.DAV_DELETE:
-                doDelete(request, response, resource);
-                break;
-            case DavMethods.DAV_COPY:
-                doCopy(request, response, resource);
-                break;
-            case DavMethods.DAV_MOVE:
-                doMove(request, response, resource);
-                break;
-            case DavMethods.DAV_MKCOL:
-                doMkCol(request, response, resource);
-                break;
-            case DavMethods.DAV_OPTIONS:
-                doOptions(request, response, resource);
-                break;
-            case DavMethods.DAV_LOCK:
-                doLock(request, response, resource);
-                break;
-            case DavMethods.DAV_UNLOCK:
-                doUnlock(request, response, resource);
-                break;
-            case DavMethods.DAV_ORDERPATCH:
-                doOrderPatch(request, response, resource);
-                break;
-            case DavMethods.DAV_SUBSCRIBE:
-                doSubscribe(request, response, resource);
-                break;
-            case DavMethods.DAV_UNSUBSCRIBE:
-                doUnsubscribe(request, response, resource);
-                break;
-            case DavMethods.DAV_POLL:
-                doPoll(request, response, resource);
-                break;
-            case DavMethods.DAV_SEARCH:
-                doSearch(request, response, resource);
-                break;
-            case DavMethods.DAV_VERSION_CONTROL:
-                doVersionControl(request, response, resource);
-                break;
-            case DavMethods.DAV_LABEL:
-                doLabel(request, response, resource);
-                break;
-            case DavMethods.DAV_REPORT:
-                doReport(request, response, resource);
-                break;
-            case DavMethods.DAV_CHECKIN:
-                doCheckin(request, response, resource);
-                break;
-            case DavMethods.DAV_CHECKOUT:
-                doCheckout(request, response, resource);
-                break;
-            case DavMethods.DAV_UNCHECKOUT:
-                doUncheckout(request, response, resource);
-                break;
-            case DavMethods.DAV_MERGE:
-                doMerge(request, response, resource);
-                break;
-            case DavMethods.DAV_UPDATE:
-                doUpdate(request, response, resource);
-                break;
-            case DavMethods.DAV_MKWORKSPACE:
-                doMkWorkspace(request, response, resource);
-                break;
-            default:
-                // any other method
-                return false;
-        }
-        return true;
-    }
-
-    /**
-     * The OPTION method
-     *
-     * @param request
-     * @param response
-     * @param resource
-     */
-    protected void doOptions(WebdavRequest request, WebdavResponse response,
-                             DavResource resource) throws IOException {
-        response.addHeader(DavConstants.HEADER_DAV, resource.getComplianceClass());
-        response.addHeader("Allow", resource.getSupportedMethods());
-        response.addHeader("MS-Author-Via", DavConstants.HEADER_DAV);
-        if (resource instanceof SearchResource) {
-            String[] langs = ((SearchResource) resource).getQueryGrammerSet().getQueryLanguages();
-            for (int i = 0; i < langs.length; i++) {
-                response.addHeader(SearchConstants.HEADER_DASL, "<" + langs[i] + ">");
-            }
-        }
-        // with DeltaV the OPTIONS request may contain a Xml body.
-        OptionsResponse oR = null;
-        OptionsInfo oInfo = request.getOptionsInfo();
-        if (oInfo != null && resource instanceof DeltaVResource) {
-            oR = ((DeltaVResource) resource).getOptionResponse(oInfo);
-        }
-        if (oR == null) {
-            response.setStatus(DavServletResponse.SC_OK);
-        } else {
-            response.sendXmlResponse(oR, DavServletResponse.SC_OK);
-        }
-    }
-
-    /**
-     * The HEAD method
-     *
-     * @param request
-     * @param response
-     * @param resource
-     * @throws java.io.IOException
-     */
-    protected void doHead(WebdavRequest request, WebdavResponse response,
-                          DavResource resource) throws IOException {
-        spoolResource(request, response, resource, false);
-    }
-
-    /**
-     * The GET method
-     *
-     * @param request
-     * @param response
-     * @param resource
-     * @throws IOException
-     */
-    protected void doGet(WebdavRequest request, WebdavResponse response,
-                         DavResource resource) throws IOException {
-        spoolResource(request, response, resource, true);
-    }
-
-    /**
-     * @param request
-     * @param response
-     * @param resource
-     * @param sendContent
-     * @throws IOException
-     */
-    private void spoolResource(WebdavRequest request, WebdavResponse response,
-                               DavResource resource, boolean sendContent)
-            throws IOException {
-
-        if (!resource.exists()) {
-            response.sendError(HttpServletResponse.SC_NOT_FOUND);
-            return;
-        }
-
-        long modSince = request.getDateHeader("If-Modified-Since");
-        if (modSince > IOUtil.UNDEFINED_TIME) {
-        long modTime = resource.getModificationTime();
-            // test if resource has been modified. note that formatted modification
-            // time lost the milli-second precision
-            if (modTime != IOUtil.UNDEFINED_TIME && (modTime / 1000 * 1000) <= modSince) {
-            // resource has not been modified since the time indicated in the
-            // 'If-Modified-Since' header.
-            response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
-            return;
-        }
-        }
-
-        // spool resource properties and ev. resource content.
-        OutputStream out = (sendContent) ? response.getOutputStream() : null;
-        resource.spool(getOutputContext(response, out));
-        response.flushBuffer();
-    }
-
-    /**
-     * The PROPFIND method
-     *
-     * @param request
-     * @param response
-     * @param resource
-     * @throws IOException
-     */
-    protected void doPropFind(WebdavRequest request, WebdavResponse response,
-                              DavResource resource) throws IOException, DavException {
-
-        if (!resource.exists()) {
-            response.sendError(DavServletResponse.SC_NOT_FOUND);
-            return;
-        }
-
-        int depth = request.getDepth(DEPTH_INFINITY);
-        DavPropertyNameSet requestProperties = request.getPropFindProperties();
-        int propfindType = request.getPropFindType();
-
-        MultiStatus mstatus = new MultiStatus();
-        mstatus.addResourceProperties(resource, requestProperties, propfindType, depth);
-        response.sendMultiStatus(mstatus);
-    }
-
-    /**
-     * The PROPPATCH method
-     *
-     * @param request
-     * @param response
-     * @param resource
-     * @throws IOException
-     */
-    protected void doPropPatch(WebdavRequest request, WebdavResponse response,
-                               DavResource resource)
-            throws IOException, DavException {
-
-        DavPropertySet setProperties = request.getPropPatchSetProperties();
-        DavPropertyNameSet removeProperties = request.getPropPatchRemoveProperties();
-        if (setProperties.isEmpty() && removeProperties.isEmpty()) {
-            response.sendError(DavServletResponse.SC_BAD_REQUEST);
-            return;
-        }
-
-        MultiStatus ms = new MultiStatus();
-        try {
-            MultiStatusResponse msr = resource.alterProperties(setProperties, removeProperties);
-            ms.addResponse(msr);
-        } catch (DavException e) {
-            /* NOTE: known bug with litmus, which expects the exception (e.g. 423)
-               to the set instead of the MultiStatus Code. RFC 2518 explicitely
-               expects the errors to be included in the multistatus.
-               Remove the catch if this turns out to be an problem with clients
-               in general. */
-            ms.addResourceStatus(resource, e.getErrorCode(), DEPTH_0);
-        }
-        response.sendMultiStatus(ms);
-    }
-
-    /**
-     * The POST method. Delegate to PUT
-     *
-     * @param request
-     * @param response
-     * @param resource
-     * @throws IOException
-     * @throws DavException
-     */
-    protected void doPost(WebdavRequest request, WebdavResponse response,
-                          DavResource resource) throws IOException, DavException {
-        doPut(request, response, resource);
-    }
-
-    /**
-     * The PUT method
-     *
-     * @param request
-     * @param response
-     * @param resource
-     * @throws IOException
-     * @throws DavException
-     */
-    protected void doPut(WebdavRequest request, WebdavResponse response,
-                         DavResource resource) throws IOException, DavException {
-
-        DavResource parentResource = resource.getCollection();
-        if (parentResource == null || !parentResource.exists()) {
-            // parent does not exist
-            response.sendError(DavServletResponse.SC_CONFLICT);
-            return;
-        }
-
-        int status;
-        // test if resource already exists
-        if (resource.exists()) {
-            status = DavServletResponse.SC_NO_CONTENT;
-        } else {
-            status = DavServletResponse.SC_CREATED;
-        }
-
-        parentResource.addMember(resource, getInputContext(request, request.getInputStream()));
-        response.setStatus(status);
-    }
-
-    /**
-     * The MKCOL method
-     *
-     * @param request
-     * @param response
-     * @param resource
-     * @throws IOException
-     * @throws DavException
-     */
-    protected void doMkCol(WebdavRequest request, WebdavResponse response,
-                           DavResource resource) throws IOException, DavException {
-
-        DavResource parentResource = resource.getCollection();
-        if (parentResource == null || !parentResource.exists() || !parentResource.isCollection()) {
-            // parent does not exist or is not a collection
-            response.sendError(DavServletResponse.SC_CONFLICT);
-            return;
-        }
-        // shortcut: mkcol is only allowed on deleted/non-existing resources
-        if (resource.exists()) {
-            response.sendError(DavServletResponse.SC_METHOD_NOT_ALLOWED);
-        }
-
-        if (request.getContentLength() > 0 || request.getHeader("Transfer-Encoding") != null) {
-            parentResource.addMember(resource, getInputContext(request, request.getInputStream()));
-        } else {
-            parentResource.addMember(resource, getInputContext(request, null));
-        }
-        response.setStatus(DavServletResponse.SC_CREATED);
-    }
-
-    /**
-     * The DELETE method
-     *
-     * @param request
-     * @param response
-     * @param resource
-     * @throws IOException
-     * @throws DavException
-     */
-    protected void doDelete(WebdavRequest request, WebdavResponse response,
-                            DavResource resource) throws IOException, DavException {
-        DavResource parent = resource.getCollection();
-        if (parent != null) {
-            parent.removeMember(resource);
-            response.setStatus(DavServletResponse.SC_NO_CONTENT);
-        } else {
-            response.sendError(DavServletResponse.SC_FORBIDDEN, "Cannot remove the root resource.");
-        }
-    }
-
-    /**
-     * The COPY method
-     *
-     * @param request
-     * @param response
-     * @param resource
-     * @throws IOException
-     * @throws DavException
-     */
-    protected void doCopy(WebdavRequest request, WebdavResponse response,
-                          DavResource resource) throws IOException, DavException {
-
-        // only depth 0 and infinity is allowed
-        int depth = request.getDepth(DEPTH_INFINITY);
-        if (!(depth == DEPTH_0 || depth == DEPTH_INFINITY)) {
-            response.sendError(DavServletResponse.SC_BAD_REQUEST);
-            return;
-        }
-
-        DavResource destResource = getResourceFactory().createResource(request.getDestinationLocator(), request, response);
-        int status = validateDestination(destResource, request);
-        if (status > DavServletResponse.SC_NO_CONTENT) {
-            response.sendError(status);
-            return;
-        }
-
-        resource.copy(destResource, depth == DEPTH_0);
-        response.setStatus(status);
-    }
-
-    /**
-     * The MOVE method
-     *
-     * @param request
-     * @param response
-     * @param resource
-     * @throws IOException
-     * @throws DavException
-     */
-    protected void doMove(WebdavRequest request, WebdavResponse response,
-                          DavResource resource) throws IOException, DavException {
-
-        DavResource destResource = getResourceFactory().createResource(request.getDestinationLocator(), request, response);
-        int status = validateDestination(destResource, request);
-        if (status > DavServletResponse.SC_NO_CONTENT) {
-            response.sendError(status);
-            return;
-        }
-
-        resource.move(destResource);
-        response.setStatus(status);
-    }
-
-    /**
-     * Validate the given destination resource and return the proper status
-     * code: Any return value greater/equal than {@link DavServletResponse#SC_NO_CONTENT}
-     * indicates an error.
-     *
-     * @param destResource destination resource to be validated.
-     * @param request
-     * @return status code indicating whether the destination is valid.
-     */
-    private int validateDestination(DavResource destResource, WebdavRequest request)
-            throws DavException {
-
-        String destHeader = request.getHeader(HEADER_DESTINATION);
-        if (destHeader == null || "".equals(destHeader)) {
-            return DavServletResponse.SC_BAD_REQUEST;
-        }
-        if (destResource.getLocator().equals(request.getRequestLocator())) {
-            return DavServletResponse.SC_FORBIDDEN;
-        }
-
-        int status;
-        if (destResource.exists()) {
-            if (request.isOverwrite()) {
-                // matching if-header required for existing resources
-                if (!request.matchesIfHeader(destResource)) {
-                    return DavServletResponse.SC_PRECONDITION_FAILED;
-                } else {
-                    // overwrite existing resource
-                    destResource.getCollection().removeMember(destResource);
-                    status = DavServletResponse.SC_NO_CONTENT;
-                }
-            } else {
-                // cannot copy/move to an existing item, if overwrite is not forced
-                return DavServletResponse.SC_PRECONDITION_FAILED;
-            }
-        } else {
-            // destination does not exist >> copy/move can be performed
-            status = DavServletResponse.SC_CREATED;
-        }
-        return status;
-    }
-
-    /**
-     * The LOCK method
-     *
-     * @param request
-     * @param response
-     * @param resource
-     * @throws IOException
-     * @throws DavException
-     */
-    protected void doLock(WebdavRequest request, WebdavResponse response,
-                          DavResource resource) throws IOException, DavException {
-
-        LockInfo lockInfo = request.getLockInfo();
-        if (lockInfo.isRefreshLock()) {
-            // refresh any matching existing locks
-            ActiveLock[] activeLocks = resource.getLocks();
-            List lList = new ArrayList();
-            for (int i = 0; i < activeLocks.length; i++) {
-                // adjust lockinfo with type/scope retrieved from the lock.
-                lockInfo.setType(activeLocks[i].getType());
-                lockInfo.setScope(activeLocks[i].getScope());
-
-                DavProperty etagProp = resource.getProperty(DavPropertyName.GETETAG);
-                String etag = etagProp != null ? String.valueOf(etagProp.getValue()) : "";
-                if (request.matchesIfHeader(resource.getHref(), activeLocks[i].getToken(), etag)) {
-                    lList.add(resource.refreshLock(lockInfo, activeLocks[i].getToken()));
-                }
-            }
-            if (lList.isEmpty()) {
-                throw new DavException(DavServletResponse.SC_PRECONDITION_FAILED);
-            }
-            ActiveLock[] refreshedLocks = (ActiveLock[]) lList.toArray(new ActiveLock[lList.size()]);
-            response.sendRefreshLockResponse(refreshedLocks);
-        } else {
-            // create a new lock
-            ActiveLock lock = resource.lock(lockInfo);
-            response.sendLockResponse(lock);
-        }
-    }
-
-    /**
-     * The UNLOCK method
-     *
-     * @param request
-     * @param response
-     * @param resource
-     * @throws DavException
-     */
-    protected void doUnlock(WebdavRequest request, WebdavResponse response,
-                            DavResource resource) throws DavException {
-        // get lock token from header
-        String lockToken = request.getLockToken();
-        TransactionInfo tInfo = request.getTransactionInfo();
-        if (tInfo != null) {
-            ((TransactionResource) resource).unlock(lockToken, tInfo);
-        } else {
-            resource.unlock(lockToken);
-        }
-        response.setStatus(DavServletResponse.SC_NO_CONTENT);
-    }
-
-    /**
-     * The ORDERPATCH method
-     *
-     * @param request
-     * @param response
-     * @param resource
-     * @throws java.io.IOException
-     * @throws DavException
-     */
-    protected void doOrderPatch(WebdavRequest request,
-                                WebdavResponse response,
-                                DavResource resource)
-            throws IOException, DavException {
-
-        if (!(resource instanceof OrderingResource)) {
-            response.sendError(DavServletResponse.SC_METHOD_NOT_ALLOWED);
-            return;
-        }
-
-        OrderPatch op = request.getOrderPatch();
-        if (op == null) {
-            response.sendError(DavServletResponse.SC_BAD_REQUEST);
-            return;
-        }
-        // perform reordering of internal members
-        ((OrderingResource) resource).orderMembers(op);
-        response.setStatus(DavServletResponse.SC_OK);
-    }
-
-    /**
-     * The SUBSCRIBE method
-     *
-     * @param request
-     * @param response
-     * @param resource
-     * @throws IOException
-     * @throws DavException
-     */
-    protected void doSubscribe(WebdavRequest request,
-                               WebdavResponse response,
-                               DavResource resource)
-            throws IOException, DavException {
-
-        if (!(resource instanceof ObservationResource)) {
-            response.sendError(DavServletResponse.SC_METHOD_NOT_ALLOWED);
-            return;
-        }
-
-        SubscriptionInfo info = request.getSubscriptionInfo();
-        if (info == null) {
-            response.sendError(DavServletResponse.SC_UNSUPPORTED_MEDIA_TYPE);
-            return;
-        }
-        Subscription subs = ((ObservationResource) resource).subscribe(info, request.getSubscriptionId());
-        response.sendSubscriptionResponse(subs);
-    }
-
-    /**
-     * The UNSUBSCRIBE method
-     *
-     * @param request
-     * @param response
-     * @param resource
-     * @throws IOException
-     * @throws DavException
-     */
-    protected void doUnsubscribe(WebdavRequest request,
-                                 WebdavResponse response,
-                                 DavResource resource)
-            throws IOException, DavException {
-
-        if (!(resource instanceof ObservationResource)) {
-            response.sendError(DavServletResponse.SC_METHOD_NOT_ALLOWED);
-            return;
-        }
-        ((ObservationResource) resource).unsubscribe(request.getSubscriptionId());
-        response.setStatus(DavServletResponse.SC_NO_CONTENT);
-    }
-
-    /**
-     * The POLL method
-     *
-     * @param request
-     * @param response
-     * @param resource
-     * @throws IOException
-     * @throws DavException
-     */
-    protected void doPoll(WebdavRequest request,
-                          WebdavResponse response,
-                          DavResource resource)
-            throws IOException, DavException {
-
-        if (!(resource instanceof ObservationResource)) {
-            response.sendError(DavServletResponse.SC_METHOD_NOT_ALLOWED);
-            return;
-        }
-        EventDiscovery ed = ((ObservationResource) resource).poll(request.getSubscriptionId());
-        response.sendPollResponse(ed);
-    }
-
-    /**
-     * The VERSION-CONTROL method
-     *
-     * @param request
-     * @param response
-     * @param resource
-     * @throws DavException
-     * @throws IOException
-     */
-    protected void doVersionControl(WebdavRequest request, WebdavResponse response,
-                                    DavResource resource)
-            throws DavException, IOException {
-        if (!(resource instanceof VersionableResource)) {
-            response.sendError(DavServletResponse.SC_METHOD_NOT_ALLOWED);
-            return;
-        }
-        ((VersionableResource) resource).addVersionControl();
-    }
-
-    /**
-     * The LABEL method
-     *
-     * @param request
-     * @param response
-     * @param resource
-     * @throws DavException
-     * @throws IOException
-     */
-    protected void doLabel(WebdavRequest request, WebdavResponse response,
-                           DavResource resource)
-            throws DavException, IOException {
-
-        LabelInfo labelInfo = request.getLabelInfo();
-        if (resource instanceof VersionResource) {
-            ((VersionResource) resource).label(labelInfo);
-        } else if (resource instanceof VersionControlledResource) {
-            ((VersionControlledResource) resource).label(labelInfo);
-        } else {
-            // any other resource type that does not support a LABEL request
-            response.sendError(DavServletResponse.SC_METHOD_NOT_ALLOWED);
-        }
-    }
-
-    /**
-     * The REPORT method
-     *
-     * @param request
-     * @param response
-     * @param resource
-     * @throws DavException
-     * @throws IOException
-     */
-    protected void doReport(WebdavRequest request, WebdavResponse response,
-                            DavResource resource)
-            throws DavException, IOException {
-        if (!(resource instanceof DeltaVResource)) {
-            response.sendError(DavServletResponse.SC_METHOD_NOT_ALLOWED);
-            return;
-        }
-        ReportInfo info = request.getReportInfo();
-        Report report = ((DeltaVResource) resource).getReport(info);
-        int statusCode = (report.isMultiStatusReport()) ? DavServletResponse.SC_MULTI_STATUS : DavServletResponse.SC_OK;
-        response.sendXmlResponse(report, statusCode);
-    }
-
-    /**
-     * The CHECKIN method
-     *
-     * @param request
-     * @param response
-     * @param resource
-     * @throws DavException
-     * @throws IOException
-     */
-    protected void doCheckin(WebdavRequest request, WebdavResponse response,
-                             DavResource resource)
-            throws DavException, IOException {
-
-        if (!(resource instanceof VersionControlledResource)) {
-            response.sendError(DavServletResponse.SC_METHOD_NOT_ALLOWED);
-            return;
-        }
-        String versionHref = ((VersionControlledResource) resource).checkin();
-        response.setHeader(DeltaVConstants.HEADER_LOCATION, versionHref);
-    }
-
-    /**
-     * The CHECKOUT method
-     *
-     * @param request
-     * @param response
-     * @param resource
-     * @throws DavException
-     * @throws IOException
-     */
-    protected void doCheckout(WebdavRequest request, WebdavResponse response,
-                              DavResource resource)
-            throws DavException, IOException {
-        if (!(resource instanceof VersionControlledResource)) {
-            response.sendError(DavServletResponse.SC_METHOD_NOT_ALLOWED);
-            return;
-        }
-        ((VersionControlledResource) resource).checkout();
-    }
-
-    /**
-     * The UNCHECKOUT method
-     *
-     * @param request
-     * @param response
-     * @param resource
-     * @throws DavException
-     * @throws IOException
-     */
-    protected void doUncheckout(WebdavRequest request, WebdavResponse response,
-                                DavResource resource)
-            throws DavException, IOException {
-        if (!(resource instanceof VersionControlledResource)) {
-            response.sendError(DavServletResponse.SC_METHOD_NOT_ALLOWED);
-            return;
-        }
-        ((VersionControlledResource) resource).uncheckout();
-    }
-
-    /**
-     * The MERGE method
-     *
-     * @param request
-     * @param response
-     * @param resource
-     * @throws DavException
-     * @throws IOException
-     */
-    protected void doMerge(WebdavRequest request, WebdavResponse response,
-                           DavResource resource) throws DavException, IOException {
-
-        if (!(resource instanceof VersionControlledResource)) {
-            response.sendError(DavServletResponse.SC_METHOD_NOT_ALLOWED);
-            return;
-        }
-        MergeInfo info = request.getMergeInfo();
-        MultiStatus ms = ((VersionControlledResource) resource).merge(info);
-        response.sendMultiStatus(ms);
-    }
-
-    /**
-     * The UPDATE method
-     *
-     * @param request
-     * @param response
-     * @param resource
-     * @throws DavException
-     * @throws IOException
-     */
-    protected void doUpdate(WebdavRequest request, WebdavResponse response,
-                            DavResource resource) throws DavException, IOException {
-
-        if (!(resource instanceof VersionControlledResource)) {
-            response.sendError(DavServletResponse.SC_METHOD_NOT_ALLOWED);
-            return;
-        }
-        UpdateInfo info = request.getUpdateInfo();
-        MultiStatus ms = ((VersionControlledResource) resource).update(info);
-        response.sendMultiStatus(ms);
-    }
-
-    /**
-     * The MKWORKSPACE method
-     *
-     * @param request
-     * @param response
-     * @param resource
-     * @throws DavException
-     * @throws IOException
-     */
-    protected void doMkWorkspace(WebdavRequest request, WebdavResponse response,
-                                 DavResource resource) throws DavException, IOException {
-        if (resource.exists()) {
-            log.warn("Cannot create a new workspace. Resource already exists.");
-            response.sendError(DavServletResponse.SC_FORBIDDEN);
-            return;
-        }
-
-        DavResource parentResource = resource.getCollection();
-        if (parentResource == null || !parentResource.exists() || !parentResource.isCollection()) {
-            // parent does not exist or is not a collection
-            response.sendError(DavServletResponse.SC_CONFLICT);
-            return;
-        }
-        if (!(parentResource instanceof DeltaVResource)) {
-            response.sendError(DavServletResponse.SC_METHOD_NOT_ALLOWED);
-            return;
-        }
-        ((DeltaVResource) parentResource).addWorkspace(resource);
-        response.setStatus(DavServletResponse.SC_CREATED);
-    }
-
-    /**
-     * The SEARCH method
-     *
-     * @param request
-     * @param response
-     * @param resource
-     * @throws DavException
-     * @throws IOException
-     */
-    protected void doSearch(WebdavRequest request, WebdavResponse response,
-                            DavResource resource) throws DavException, IOException {
-
-        if (!(resource instanceof SearchResource)) {
-            response.sendError(DavServletResponse.SC_METHOD_NOT_ALLOWED);
-            return;
-        }
-        try {
-            Document doc = request.getRequestDocument();
-            if (doc != null) {
-                SearchInfo sR = SearchInfo.createFromXml(doc.getDocumentElement());
-                response.sendMultiStatus(((SearchResource) resource).search(sR));
-            } else {
-                // request without request body is valid if requested resource
-                // is a 'query' resource.
-                response.sendMultiStatus(((SearchResource) resource).search(null));
-            }
-        } catch (IllegalArgumentException e) {
-            response.sendError(DavServletResponse.SC_BAD_REQUEST);
-            return;
-        }
-    }
-
-    /**
-     * Return a new <code>InputContext</code> used for adding resource members
-     *
-     * @param request
-     * @param in
-     * @return
-     * @see #spoolResource(WebdavRequest, WebdavResponse, DavResource, boolean)
-     */
-    protected InputContext getInputContext(DavServletRequest request, InputStream in) {
-        return new InputContextImpl(request, in);
-    }
-
-    /**
-     * Return a new <code>OutputContext</code> used for spooling resource properties and
-     * the resource content
-     *
-     * @param response
-     * @param out
-     * @return
-     * @see #doPut(WebdavRequest, WebdavResponse, DavResource)
-     * @see #doPost(WebdavRequest, WebdavResponse, DavResource)
-     * @see #doMkCol(WebdavRequest, WebdavResponse, DavResource)
-     */
-    protected OutputContext getOutputContext(DavServletResponse response, OutputStream out) {
-        return new OutputContextImpl(response, out);
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/BasicCredentialsProvider.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/BasicCredentialsProvider.java
deleted file mode 100644
index 4342d8c..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/BasicCredentialsProvider.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.server;
-
-import org.apache.jackrabbit.util.Base64;
-import org.apache.jackrabbit.webdav.DavConstants;
-
-import javax.jcr.Credentials;
-import javax.jcr.LoginException;
-import javax.jcr.SimpleCredentials;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.ServletException;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-
-/**
- * This Class implements a credentials provider that extracts the credentials
- * from the 'WWW-Authenticate' header and only supports 'Basic' authentication.
- */
-public class BasicCredentialsProvider implements CredentialsProvider {
-
-    private final String defaultHeaderValue;
-
-    /**
-     * Constructs a new BasicCredentialsProvider with the given default
-     * value {@see #getCredentials} for details.
-     *
-     * @param defaultHeaderValue
-     */
-    public BasicCredentialsProvider(String defaultHeaderValue) {
-        this.defaultHeaderValue = defaultHeaderValue;
-    }
-
-    /**
-     * {@inheritDoc}
-     *
-     * Build a {@link Credentials} object for the given authorization header.
-     * The creds may be used to login to the repository. If the specified header
-     * string is <code>null</code> or not of the required format the behaviour
-     * depends on the {@link #defaultHeaderValue} field:<br>
-     * <ul>
-     * <li> if this field is <code>null</code>, a LoginException is thrown.
-     *      This is suiteable for clients (eg. webdav clients) for with
-     *      sending a proper authorization header is not possible, if the
-     *      server never send a 401.
-     * <li> if this an empty string, null-credentials are returned, thus
-     *      forcing an null login on the repository
-     * <li> if this field has a 'user:password' value, the respective
-     *      simple credentials are generated.
-     * </ul>
-     *
-     * @param request the servlet request
-     * @return credentials or <code>null</code>.
-     * @throws ServletException If an IOException occured while decoding the
-     *         Authorization header.
-     * @throws LoginException if no suitable auth header and missing-auth-mapping
-     *         is not present
-     */
-    public Credentials getCredentials(HttpServletRequest request)
-            throws LoginException, ServletException {
-        try {
-            String authHeader = request.getHeader(DavConstants.HEADER_AUTHORIZATION);
-            if (authHeader != null) {
-                String[] authStr = authHeader.split(" ");
-                if (authStr.length >= 2 && authStr[0].equalsIgnoreCase(HttpServletRequest.BASIC_AUTH)) {
-                    ByteArrayOutputStream out = new ByteArrayOutputStream();
-                    Base64.decode(authStr[1].toCharArray(), out);
-                    String decAuthStr = out.toString("ISO-8859-1");
-                    int pos = decAuthStr.indexOf(':');
-                    String userid = decAuthStr.substring(0, pos);
-                    String passwd = decAuthStr.substring(pos + 1);
-                    return new SimpleCredentials(userid, passwd.toCharArray());
-                }
-                throw new ServletException("Unable to decode authorization.");
-            } else {
-                // check special handling
-                if (defaultHeaderValue == null) {
-                    throw new LoginException();
-                } else if (defaultHeaderValue.equals("")) {
-                    return null;
-                } else {
-                    int pos = defaultHeaderValue.indexOf(':');
-                    if (pos<0) {
-                        return new SimpleCredentials(defaultHeaderValue, null);
-                    } else {
-                        return new SimpleCredentials(
-                                defaultHeaderValue.substring(0, pos),
-                                defaultHeaderValue.substring(pos+1).toCharArray()
-                        );
-                    }
-                }
-            }
-        } catch (IOException e) {
-            throw new ServletException("Unable to decode authorization: " + e.toString());
-        }
-    }
-
-}
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/CredentialsProvider.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/CredentialsProvider.java
deleted file mode 100644
index 54c0428..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/CredentialsProvider.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.server;
-
-import javax.jcr.Credentials;
-import javax.jcr.LoginException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.ServletException;
-
-/**
- * This Interface defines a provider for the credentials.
- */
-public interface CredentialsProvider {
-
-    /**
-     * Extracts the credentials from the given servlet request.
-     *
-     * @param request
-     * @return the credentials or null
-     * @throws LoginException if the credentials are invalid
-     * @throws ServletException if an error occurrs
-     */
-    public Credentials getCredentials(HttpServletRequest request)
-            throws LoginException, ServletException;
-}
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/SessionProvider.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/SessionProvider.java
deleted file mode 100644
index 5e1180e..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/SessionProvider.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.server;
-
-import javax.jcr.LoginException;
-import javax.jcr.Session;
-import javax.jcr.Repository;
-import javax.jcr.RepositoryException;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-
-/**
- * This Interface defines a provider for repository sessions
- */
-public interface SessionProvider {
-
-    /**
-     * Provides the repository session suitable for the given request.
-     *
-     * @param request
-     * @param rep the repository to login
-     * @param workspace the workspace name
-     * @return the session or null
-     * @throws LoginException if the credentials are invalid
-     * @throws ServletException if an error occurrs
-     */
-    public Session getSession(HttpServletRequest request, Repository rep, String workspace)
-            throws LoginException, ServletException, RepositoryException;
-
-    /**
-     * Informs this provider that the session aquired by a previous
-     * {@link #getSession} call is no longer needed.
-     *
-     * @param session
-     */
-    public void releaseSession(Session session);
-}
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/SessionProviderImpl.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/SessionProviderImpl.java
deleted file mode 100644
index ce198ae..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/SessionProviderImpl.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.server;
-
-import javax.jcr.Repository;
-import javax.jcr.Session;
-import javax.jcr.LoginException;
-import javax.jcr.Credentials;
-import javax.jcr.RepositoryException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.ServletException;
-
-/**
- * This Class implements a default session provider uses a credentials provider.
- */
-public class SessionProviderImpl implements SessionProvider {
-
-    /**
-     * the credentials provider
-     */
-    private CredentialsProvider cp;
-
-    /**
-     * Creates a new SessionProvider
-     * @param cp
-     */
-    public SessionProviderImpl(CredentialsProvider cp) {
-        this.cp = cp;
-    }
-
-    /**
-     * {@inheritDoc }
-     */
-    public Session getSession(HttpServletRequest request, Repository repository,
-                              String workspace)
-        throws LoginException, RepositoryException, ServletException {
-        Credentials creds = cp.getCredentials(request);
-        return repository.login(creds, workspace);
-    }
-
-    /**
-     * {@inheritDoc }
-     */
-    public void releaseSession(Session session) {
-        session.logout();
-    }
-}
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/AbstractExportContext.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/AbstractExportContext.java
deleted file mode 100644
index 9a2e140..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/AbstractExportContext.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.server.io;
-
-import org.apache.log4j.Logger;
-
-import javax.jcr.Item;
-
-/**
- * <code>AbstractExportContext</code> covers methods common to most ExportContext
- * implementations.
- */
-public abstract class AbstractExportContext implements ExportContext {
-
-    private static Logger log = Logger.getLogger(AbstractExportContext.class);
-
-    private final IOListener ioListener;
-    private final Item exportRoot;
-    private final boolean hasStream;
-
-    protected boolean completed;
-
-    public AbstractExportContext(Item exportRoot, boolean hasStream, IOListener ioListener) {
-        this.exportRoot = exportRoot;
-        this.hasStream = hasStream;
-        this.ioListener = (ioListener != null) ? ioListener : new DefaultIOListener(log);
-    }
-
-    public IOListener getIOListener() {
-        return ioListener;
-    }
-
-    public Item getExportRoot() {
-        return exportRoot;
-    }
-
-    public boolean hasStream() {
-        return hasStream;
-    }
-
-    public void informCompleted(boolean success) {
-        completed = true;
-    }
-
-    public boolean isCompleted() {
-        return completed;
-    }
-
-    protected void checkCompleted() {
-        if (completed) {
-            throw new IllegalStateException("ExportContext has already been finalized.");
-        }
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/BoundedInputStream.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/BoundedInputStream.java
deleted file mode 100644
index b330a04..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/BoundedInputStream.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.server.io;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * This is a stream that will only supply bytes up to a certain length - if its
- * position goes above that, it will stop.
- * <p>
- * This is useful to wrap ServletInputStreams. The ServletInputStream will block
- * if you try to read content from it that isn't there, because it doesn't know
- * whether the content hasn't arrived yet or whether the content has finished.
- * So, one of these, initialized with the Content-length sent in the
- * ServletInputStream's header, will stop it blocking, providing it's been sent
- * with a correct content length.
- *
- * @version $Revision: 13729 $, $Date: 2004/06/04 15:48:16 $
- * @author InigoSurguy
- */
-public class BoundedInputStream extends InputStream {
-
-    /** the wrapped input stream */
-    private final InputStream in;
-
-    /** the max length to provide */
-    private final int max;
-
-    /** the number of bytes already returned */
-    private int pos = 0;
-
-    /** the marked position */
-    private int mark = -1;
-
-    /** flag if close shoud be propagated */
-    private boolean propagateClose = true;
-
-    /**
-     * Creates a new <code>BoundedInputStream</code> that wraps the given input
-     * stream and limits it to a certain size.
-     *
-     * @param in The wrapped input stream
-     * @param size The maximum number of bytes to return
-     */
-    public BoundedInputStream(InputStream in, long size) {
-        // Some badly designed methods - eg the servlet API - overload length
-        // such that "-1" means stream finished
-        this.max = (int) size;
-        this.in = in;
-    }
-
-    public BoundedInputStream(InputStream in) {
-        this(in, -1);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public int read() throws IOException {
-        if (max>=0 && pos==max) {
-            return -1;
-        }
-        int result = in.read();
-        pos++;
-        return result;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public int read(byte[] b) throws IOException {
-        return this.read(b, 0, b.length);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public int read(byte[] b, int off, int len) throws IOException {
-        if (max>=0 && pos>=max) {
-            return -1;
-        }
-        int maxRead = max>=0 ? Math.min(len, max-pos) : len;
-        int bytesRead = in.read(b, off, maxRead);
-
-        if (bytesRead==-1) {
-            return -1;
-        }
-
-        pos+=bytesRead;
-        return bytesRead;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public long skip(long n) throws IOException {
-        long toSkip = max>=0 ? Math.min(n, max-pos) : n;
-        long skippedBytes = in.skip(toSkip);
-        pos+=skippedBytes;
-        return skippedBytes;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public int available() throws IOException {
-        if (max>=0 && pos>=max) {
-            return 0;
-        }
-        return in.available();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String toString() {
-        return in.toString();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void close() throws IOException {
-        if (propagateClose) {
-            in.close();
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public synchronized void reset() throws IOException {
-        in.reset();
-        pos = mark;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public synchronized void mark(int readlimit) {
-        in.mark(readlimit);
-        mark = pos;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public boolean markSupported() {
-        return in.markSupported();
-    }
-
-    public boolean isPropagateClose() {
-        return propagateClose;
-    }
-
-    public void setPropagateClose(boolean propagateClose) {
-        this.propagateClose = propagateClose;
-    }
-}
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/DefaultHandler.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/DefaultHandler.java
deleted file mode 100644
index bc74a98..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/DefaultHandler.java
+++ /dev/null
@@ -1,480 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.server.io;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.JcrConstants;
-import org.apache.jackrabbit.webdav.DavResource;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-import javax.jcr.Property;
-import javax.jcr.Item;
-import javax.jcr.NodeIterator;
-import java.util.Calendar;
-import java.util.Date;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * <code>DefaultHandler</code> implements a simple IOHandler that creates 'file'
- * and 'folder' nodes. This handler will create the following nodes:
- * <ul>
- * <li>New <b>Collection</b>: creates a new node with the {@link #getCollectionNodeType()
- * collection nodetype}. The name of the node corresponds to the systemId
- * present on the import context.</li>
- *
- * <li>New <b>Non-Collection</b>: first creates a new node with the {@link #getNodeType()
- * non-collection nodetype}. The name of the node corresponds to the systemId
- * present on the import context. Below it creates a node with name
- * {@link JcrConstants#JCR_CONTENT jcr:content} and the nodetype specified
- * by {@link #getContentNodeType()}.</li>
- * </ul>
- * <p/>
- * Import of the content:<br>
- * The content is imported to the {@link JcrConstants#JCR_DATA} property of the
- * content node. By default this handler will fail on a attempt to create/replace
- * a collection if {@link ImportContext#hasStream()} is <code>true</code>.
- * Subclasses therefore should provide their own {@link #importData(ImportContext, boolean, Node)
- * importData} method, that handles the data according their needs.
- */
-public class DefaultHandler implements IOHandler {
-
-    private static Logger log = Logger.getLogger(DefaultHandler.class);
-
-    private String collectionNodetype = JcrConstants.NT_FOLDER;
-    private String defaultNodetype = JcrConstants.NT_FILE;
-    private String contentNodetype = JcrConstants.NT_RESOURCE;
-
-    private IOManager ioManager;
-
-    /**
-     * Creates a new <code>DefaultHandler</code> with default nodetype definitions:<br>
-     * <ul>
-     * <li>Nodetype for Collection: {@link JcrConstants#NT_FOLDER nt:folder}</li>
-     * <li>Nodetype for Non-Collection: {@link JcrConstants#NT_FILE nt:file}</li>
-     * <li>Nodetype for Non-Collection content: {@link JcrConstants#NT_RESOURCE nt:resource}</li>
-     * </ul>
-     *
-     * @param ioManager
-     */
-    public DefaultHandler(IOManager ioManager) {
-        this.ioManager = ioManager;
-    }
-
-    /**
-     * Creates a new <code>DefaultHandler</code>. Please note that the specified
-     * nodetypes must match the definitions of the defaults.
-     *
-     * @param ioManager
-     * @param collectionNodetype
-     * @param defaultNodetype
-     * @param contentNodetype
-     */
-    public DefaultHandler(IOManager ioManager, String collectionNodetype, String defaultNodetype, String contentNodetype) {
-        this.ioManager = ioManager;
-        
-        this.collectionNodetype = collectionNodetype;
-        this.defaultNodetype = defaultNodetype;
-        this.contentNodetype = contentNodetype;
-    }
-
-    /**
-     * @see IOHandler#getIOManager()
-     */
-    public IOManager getIOManager() {
-        return ioManager;
-    }
-
-    /**
-     * @see IOHandler#getName()
-     */
-    public String getName() {
-        return getClass().getName();
-    }
-
-    /**
-     * @see IOHandler#canImport(ImportContext, boolean)
-     */
-    public boolean canImport(ImportContext context, boolean isCollection) {
-        if (context == null || context.isCompleted()) {
-            return false;
-        }
-        Item contextItem = context.getImportRoot();
-        return contextItem != null && contextItem.isNode() && context.getSystemId() != null;
-    }
-
-    /**
-     * @see IOHandler#canImport(ImportContext, DavResource)
-     */
-    public boolean canImport(ImportContext context, DavResource resource) {
-        if (resource == null) {
-            return false;
-        }
-        return canImport(context, resource.isCollection());
-    }
-
-    /**
-     * @see IOHandler#importContent(ImportContext, boolean)
-     */
-    public boolean importContent(ImportContext context, boolean isCollection) throws IOException {
-        if (!canImport(context, isCollection)) {
-            throw new IOException(getName() + ": Cannot import " + context.getSystemId());
-        }
-
-        boolean success = false;
-        try {
-            Node contentNode = getContentNode(context, isCollection);
-            success = importData(context, isCollection, contentNode);
-            if (success) {
-                success = importProperties(context, isCollection, contentNode);
-            }
-        } catch (RepositoryException e) {
-            success = false;
-            throw new IOException(e.getMessage());
-        } finally {
-            // revert any changes made in case the import failed.
-            if (!success) {
-                try {
-                    context.getImportRoot().refresh(false);
-                } catch (RepositoryException e) {
-                    throw new IOException(e.getMessage());
-                }
-            }
-        }
-        return success;
-    }
-
-    /**
-     * @see IOHandler#importContent(ImportContext, DavResource)
-     */
-    public boolean importContent(ImportContext context, DavResource resource) throws IOException {
-        if (!canImport(context, resource)) {
-            throw new IOException(getName() + ": Cannot import " + context.getSystemId());
-        }
-        return importContent(context, resource.isCollection());
-    }
-
-    /**
-     * Imports the data present on the import context to the specified content
-     * node.
-     *
-     * @param context
-     * @param isCollection
-     * @param contentNode
-     * @return
-     * @throws IOException
-     */
-    protected boolean importData(ImportContext context, boolean isCollection, Node contentNode) throws IOException, RepositoryException {
-        InputStream in = context.getInputStream();
-        if (in != null) {
-            // NOTE: with the default folder-nodetype (nt:folder) no inputstream
-            // is allowed. setting the property would therefore fail.
-            if (isCollection) {
-                return false;
-            }
-            try {
-                contentNode.setProperty(JcrConstants.JCR_DATA, in);
-            } finally {
-                in.close();
-            }
-        }
-        // success if no data to import.
-        return true;
-    }
-
-    /**
-     * Imports the properties present on the specified context to the content
-     * node.
-     *
-     * @param context
-     * @param isCollection
-     * @param contentNode
-     * @return
-     */
-    protected boolean importProperties(ImportContext context, boolean isCollection, Node contentNode) {
-        try {
-            // if context-mimetype is null -> remove the property
-            contentNode.setProperty(JcrConstants.JCR_MIMETYPE, context.getMimeType());
-        } catch (RepositoryException e) {
-            // ignore: property may not be present on the node
-        }
-        try {
-            // if context-encoding is null -> remove the property
-            contentNode.setProperty(JcrConstants.JCR_ENCODING, context.getEncoding());
-        } catch (RepositoryException e) {
-            // ignore: property may not be present on the node
-        }
-        try {
-            Calendar lastMod = Calendar.getInstance();
-            if (context.getModificationTime() != IOUtil.UNDEFINED_TIME) {
-                lastMod.setTimeInMillis(context.getModificationTime());
-            } else {
-                lastMod.setTime(new Date());
-            }
-            contentNode.setProperty(JcrConstants.JCR_LASTMODIFIED, lastMod);
-        } catch (RepositoryException e) {
-            // ignore: property may not be present on the node.
-            // deliberately not rethrowing as IOException.
-        }
-        return true;
-    }
-
-    /**
-     * Retrieves/creates the node that will be used to import properties and
-     * data. In case of a non-collection this includes and additional content node
-     * to be created beside the 'file' node.<br>
-     * Please note: If the jcr:content node already exists and contains child
-     * nodes, those will be removed in order to make sure, that the import
-     * really replaces the existing content of the file-node.
-     *
-     * @param context
-     * @param isCollection
-     * @return
-     * @throws RepositoryException
-     */
-    protected Node getContentNode(ImportContext context, boolean isCollection) throws RepositoryException {
-        Node parentNode = (Node)context.getImportRoot();
-        String name = context.getSystemId();
-        if (parentNode.hasNode(name)) {
-            parentNode = parentNode.getNode(name);
-        } else {
-            String ntName = (isCollection) ? getCollectionNodeType() : getNodeType();
-            parentNode = parentNode.addNode(name, ntName);
-        }
-        Node contentNode;
-        if (isCollection) {
-            contentNode = parentNode;
-        } else {
-            if (parentNode.hasNode(JcrConstants.JCR_CONTENT)) {
-                contentNode = parentNode.getNode(JcrConstants.JCR_CONTENT);
-                // remove all entries in the jcr:content since replacing content
-                // includes properties (DefaultHandler) and nodes (e.g. ZipHandler)
-                if (contentNode.hasNodes()) {
-                    NodeIterator it = contentNode.getNodes();
-                    while (it.hasNext()) {
-                        it.nextNode().remove();
-                    }
-                }
-            } else {
-                contentNode = parentNode.addNode(JcrConstants.JCR_CONTENT, getContentNodeType());
-            }
-        }
-        return contentNode;
-    }
-
-    /**
-     * Returns true if the export root is a node and if it contains a child node
-     * with name {@link JcrConstants#JCR_CONTENT jcr:content} in case this
-     * export is not intended for a collection.
-     *
-     * @return true if the export root is a node. If the specified boolean paramter
-     * is false (not a collection export) the given export root must contain a
-     * child node with name {@link JcrConstants#JCR_CONTENT jcr:content}.
-     *
-     * @see IOHandler#canExport(ExportContext, boolean)
-     */
-    public boolean canExport(ExportContext context, boolean isCollection) {
-        if (context == null || context.isCompleted()) {
-            return false;
-        }
-        Item exportRoot = context.getExportRoot();
-        boolean success = exportRoot != null && exportRoot.isNode();
-        if (success && !isCollection) {
-            try {
-                Node n = ((Node)exportRoot);
-                success = n.hasNode(JcrConstants.JCR_CONTENT);
-            } catch (RepositoryException e) {
-                // should never occur.
-                success = false;
-            }
-        }
-        return success;
-    }
-
-    /**
-     * @see IOHandler#canExport(ExportContext, DavResource)
-     */
-    public boolean canExport(ExportContext context, DavResource resource) {
-        if (resource == null) {
-            return false;
-        }
-        return canExport(context, resource.isCollection());
-    }
-
-    /**
-     * Retrieves the content node that will be used for exporting properties and
-     * data and calls the corresponding methods.
-     *
-     * @param context
-     * @param isCollection
-     * @see #exportProperties(ExportContext, boolean, Node)
-     * @see #exportData(ExportContext, boolean, Node)
-     */
-    public boolean exportContent(ExportContext context, boolean isCollection) throws IOException {
-        if (!canExport(context, isCollection)) {
-            throw new IOException(getName() + ": Cannot export " + context.getExportRoot());
-        }
-        try {
-            Node contentNode = getContentNode(context, isCollection);
-            exportProperties(context, isCollection, contentNode);
-            if (context.hasStream()) {
-                exportData(context, isCollection, contentNode);
-            } // else: missing stream. ignore.
-            return true;
-        } catch (RepositoryException e) {
-            // should never occur, since the proper structure of the content
-            // node must be asserted in the 'canExport' call.
-            throw new IOException(e.getMessage());
-        }
-    }
-
-    /**
-     * Same as (@link #exportContent(ExportContext, boolean)} where the boolean
-     * values is defined by {@link DavResource#isCollection()}.
-     *
-     * @see IOHandler#exportContent(ExportContext, DavResource)
-     */
-    public boolean exportContent(ExportContext context, DavResource resource) throws IOException {
-        if (!canExport(context, resource)) {
-            throw new IOException(getName() + ": Cannot export " + context.getExportRoot());
-        }
-        return exportContent(context, resource.isCollection());
-    }
-
-    /**
-     * Checks if the given content node contains a jcr:data property
-     * and spools its value to the output stream fo the export context.<br>
-     * Please note, that subclasses that define a different structure of the
-     * content node should create their own
-     * {@link #exportData(ExportContext, boolean, Node) exportData} method.
-     *
-     * @param context
-     * @param isCollection
-     * @param contentNode
-     * @throws IOException
-     */
-    protected void exportData(ExportContext context, boolean isCollection, Node contentNode) throws IOException, RepositoryException {
-        if (contentNode.hasProperty(JcrConstants.JCR_DATA)) {
-            Property p = contentNode.getProperty(JcrConstants.JCR_DATA);
-            IOUtil.spool(p.getStream(), context.getOutputStream());
-        } // else: stream undefined -> contentlength was not set
-    }
-
-    /**
-     * Retrieves mimetype, encoding and modification time from the content node.
-     * The content length is determined by the length of the jcr:data property
-     * if it is present. The creation time however is retrieved from the parent
-     * node (in case of isCollection == false only).
-     *
-     * @param context
-     * @param isCollection
-     * @param contentNode
-     */
-    protected void exportProperties(ExportContext context, boolean isCollection, Node contentNode) throws IOException {
-        try {
-            // only non-collections: 'jcr:created' is present on the parent 'fileNode' only
-            if (!isCollection && contentNode.getDepth() > 0 && contentNode.getParent().hasProperty(JcrConstants.JCR_CREATED)) {
-                context.setCreationTime(contentNode.getParent().getProperty(JcrConstants.JCR_CREATED).getValue().getLong());
-            }
-
-            long length = IOUtil.UNDEFINED_LENGTH;
-            if (contentNode.hasProperty(JcrConstants.JCR_DATA)) {
-                Property p = contentNode.getProperty(JcrConstants.JCR_DATA);
-                length = p.getLength();
-                context.setContentLength(length);
-            }
-
-            String mimeType = null;
-            String encoding = null;
-            if (contentNode.hasProperty(JcrConstants.JCR_MIMETYPE)) {
-                mimeType = contentNode.getProperty(JcrConstants.JCR_MIMETYPE).getString();
-            }
-            if (contentNode.hasProperty(JcrConstants.JCR_ENCODING)) {
-                encoding = contentNode.getProperty(JcrConstants.JCR_ENCODING).getString();
-                // ignore "" encodings (although this is avoided during import)
-                if ("".equals(encoding)) {
-                    encoding = null;
-                }
-            }
-            context.setContentType(mimeType, encoding);
-
-            long modTime = IOUtil.UNDEFINED_TIME;
-            if (contentNode.hasProperty(JcrConstants.JCR_LASTMODIFIED)) {
-                modTime = contentNode.getProperty(JcrConstants.JCR_LASTMODIFIED).getLong();
-                context.setModificationTime(modTime);
-            } else {
-                context.setModificationTime(System.currentTimeMillis());
-            }
-
-            if (length > IOUtil.UNDEFINED_LENGTH && modTime > IOUtil.UNDEFINED_TIME) {
-                String etag = "\"" + length + "-" + modTime + "\"";
-                context.setETag(etag);
-            }
-        } catch (RepositoryException e) {
-            // should never occur
-            throw new IOException(e.getMessage());
-        }
-    }
-
-    /**
-     * Retrieves the content node that contains the data to be exported. In case
-     * isCollection is true, this corresponds to the export root. Otherwise there
-     * must be a child node with name {@link JcrConstants#JCR_CONTENT jcr:content}.
-     *
-     * @param context
-     * @param isCollection
-     * @return content node used for the export
-     * @throws RepositoryException
-     */
-    protected Node getContentNode(ExportContext context, boolean isCollection) throws RepositoryException {
-        Node contentNode = (Node)context.getExportRoot();
-        // 'file' nodes must have an jcr:content child node (see canExport)
-        if (!isCollection) {
-            contentNode = contentNode.getNode(JcrConstants.JCR_CONTENT);
-        }
-        return contentNode;
-    }
-
-    /**
-     * Name of the nodetype to be used to create a new collection node (folder)
-     *
-     * @return nodetype name
-     */
-    protected String getCollectionNodeType() {
-        return collectionNodetype;
-    }
-
-    /**
-     * Name of the nodetype to be used to create a new non-collection node (file)
-     *
-     * @return nodetype name
-     */
-    protected String getNodeType() {
-        return defaultNodetype;
-    }
-
-    /**
-     * Name of the nodetype to be used to create the content node below
-     * a new non-collection node, whose name is always {@link JcrConstants#JCR_CONTENT
-     * jcr:content}.
-     *
-     * @return nodetype name
-     */
-    protected String getContentNodeType() {
-        return contentNodetype;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/DefaultIOListener.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/DefaultIOListener.java
deleted file mode 100644
index 57b966a..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/DefaultIOListener.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.server.io;
-
-import org.apache.log4j.Logger;
-
-/**
- * <code>DefaultIOListener</code> implements an <code>IOListener</code> that
- * writes debug/error output to the {@link Logger logger} specified in the constructor.
- */
-public class DefaultIOListener implements IOListener {
-
-    private static Logger log = Logger.getLogger(DefaultIOListener.class);
-
-    private Logger ioLog;
-
-    /**
-     * Creates a new <code>DefaultIOListener</code>
-     */
-    public DefaultIOListener(Logger ioLog) {
-        this.ioLog = (ioLog != null) ? ioLog : log;
-    }
-
-    /**
-     * @see IOListener#onBegin(IOHandler, IOContext)
-     */
-    public void onBegin(IOHandler handler, IOContext ioContext) {
-        ioLog.debug("Starting IOHandler (" + handler.getName() + ")");
-    }
-
-    /**
-     * @see IOListener#onEnd(IOHandler, IOContext, boolean)
-     */
-    public void onEnd(IOHandler handler, IOContext ioContext, boolean success) {
-        ioLog.info("Result for IOHandler (" + handler.getName() + "): " + (success ? "OK" : "Failed"));
-    }
-
-    /**
-     * @see IOListener#onError(IOHandler, IOContext, Exception)
-     */
-    public void onError(IOHandler ioHandler, IOContext ioContext, Exception e) {
-        ioLog.debug("Error: " + e.getMessage());
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/DefaultIOManager.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/DefaultIOManager.java
deleted file mode 100644
index 6caa49d..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/DefaultIOManager.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.server.io;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.DavResource;
-
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.io.IOException;
-
-/**
- * <code>DefaultIOManager</code>...
- */
-public class DefaultIOManager implements IOManager {
-
-    private static Logger log = Logger.getLogger(DefaultIOManager.class);
-
-    private final List ioHandlers = new ArrayList();
-
-    public DefaultIOManager() {
-        this(true);
-    }
-
-    protected DefaultIOManager(boolean doInit) {
-        if (doInit) {
-           init();
-        }
-    }
-
-    protected void init() {
-        addIOHandler(new ZipHandler(this));
-        addIOHandler(new XmlHandler(this));
-        addIOHandler(new DirListingExportHandler(this));
-        addIOHandler(new DefaultHandler(this));
-    }
-
-    public void addIOHandler(IOHandler ioHandler) {
-        ioHandlers.add(ioHandler);
-    }
-
-    public IOHandler[] getIOHandlers() {
-        return (IOHandler[]) ioHandlers.toArray(new IOHandler[ioHandlers.size()]);
-    }
-
-    public boolean importContent(ImportContext context, boolean isCollection) throws IOException {
-        boolean success = false;
-        if (context != null) {
-            IOListener ioListener = context.getIOListener();
-            if (ioListener == null) {
-                ioListener = new DefaultIOListener(log);
-            }
-
-            Iterator it = ioHandlers.iterator();
-            while (it.hasNext() && !success) {
-                IOHandler ioh = (IOHandler)it.next();
-                if (ioh.canImport(context, isCollection)) {
-                    ioListener.onBegin(ioh, context);
-                    success = ioh.importContent(context, isCollection);
-                    ioListener.onEnd(ioh, context, success);
-                }
-            }
-            context.informCompleted(success);
-        }
-        return success;
-    }
-
-    public boolean importContent(ImportContext context, DavResource resource) throws IOException {
-        boolean success = false;
-        if (context != null && resource != null) {
-            IOListener ioListener = context.getIOListener();
-            if (ioListener == null) {
-                ioListener = new DefaultIOListener(log);
-            }
-            Iterator it = ioHandlers.iterator();
-            while (it.hasNext() && !success) {
-                IOHandler ioh = (IOHandler)it.next();
-                if (ioh.canImport(context, resource)) {
-                    ioListener.onBegin(ioh, context);
-                    success = ioh.importContent(context, resource);
-                    ioListener.onEnd(ioh, context, success);
-                }
-            }
-            context.informCompleted(success);
-        }
-        return success;
-    }
-
-    public boolean exportContent(ExportContext context, boolean isCollection) throws IOException {
-        boolean success = false;
-        if (context != null) {
-            IOListener ioListener = context.getIOListener();
-            if (ioListener == null) {
-                ioListener = new DefaultIOListener(log);
-            }
-
-            Iterator it = ioHandlers.iterator();
-            while (it.hasNext() && !success) {
-                IOHandler ioh = (IOHandler)it.next();
-                if (ioh.canExport(context, isCollection)) {
-                    ioListener.onBegin(ioh, context);
-                    success = ioh.exportContent(context, isCollection);
-                    ioListener.onEnd(ioh, context, success);
-                }
-            }
-            context.informCompleted(success);
-        }
-        return success;
-    }
-
-    public boolean exportContent(ExportContext context, DavResource resource) throws IOException {
-        boolean success = false;
-        if (context != null && resource != null) {
-            IOListener ioListener = context.getIOListener();
-            if (ioListener == null) {
-                ioListener = new DefaultIOListener(log);
-            }
-
-            Iterator it = ioHandlers.iterator();
-            while (it.hasNext() && !success) {
-                IOHandler ioh = (IOHandler)it.next();
-                if (ioh.canExport(context, resource)) {
-                    ioListener.onBegin(ioh, context);
-                    success = ioh.exportContent(context, resource);
-                    ioListener.onEnd(ioh, context, success);
-                }
-            }
-            context.informCompleted(success);
-        }
-        return success;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/DirListingExportHandler.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/DirListingExportHandler.java
deleted file mode 100644
index c7bf45d..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/DirListingExportHandler.java
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.server.io;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.util.Text;
-import org.apache.jackrabbit.webdav.DavResource;
-import org.apache.jackrabbit.webdav.DavResourceIterator;
-
-import javax.jcr.Item;
-import javax.jcr.Repository;
-import javax.jcr.NodeIterator;
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.OutputStreamWriter;
-import java.util.Date;
-
-/**
- * <code>DirListingExportHandler</code> represents a simple export for collections:
- * a human-readable view listing the members.<br>
- * Note: If {@link #exportContent(ExportContext, boolean)} is called the view list
- * child nodes only, without respecting their representation as <code>DavResource</code>s.
- */
-public class DirListingExportHandler implements IOHandler {
-
-    private static Logger log = Logger.getLogger(DirListingExportHandler.class);
-
-    private IOManager ioManager;
-
-    /**
-     * Creates a new <code>DirListingExportHandler</code>
-     *
-     * @param ioManager
-     */
-    public DirListingExportHandler(IOManager ioManager) {
-        this.ioManager = ioManager;
-    }
-
-    /**
-     * Always returns false
-     *
-     * @see IOHandler#canImport(ImportContext, boolean)
-     */
-    public boolean canImport(ImportContext context, boolean isFolder) {
-        return false;
-    }
-
-    /**
-     * Always returns false
-     *
-     * @see IOHandler#canImport(ImportContext, DavResource)
-     */
-    public boolean canImport(ImportContext context, DavResource resource) {
-        return false;
-    }
-
-    /**
-     * Does nothing and returns false
-     *
-     * @see IOHandler#importContent(ImportContext, boolean)
-     */
-    public boolean importContent(ImportContext context, boolean isCollection) throws IOException {
-        // can only handle export
-        return false;
-    }
-
-    /**
-     * Does nothing and returns false
-     *
-     * @see IOHandler#importContent(ImportContext, DavResource)
-     */
-    public boolean importContent(ImportContext context, DavResource resource) throws IOException {
-        return false;
-    }
-
-    /**
-     * @return true if the specified context is still valid and provides a
-     * export root and if 'isCollection' is true. False otherwise
-     * @see IOHandler#canExport(ExportContext, boolean)
-     */
-    public boolean canExport(ExportContext context, boolean isCollection) {
-        if (context == null || context.isCompleted()) {
-            return false;
-        }
-        return isCollection && context.getExportRoot() != null;
-    }
-
-    /**
-     * @return true if the specified context is still valid and provides a
-     * export root and if the specified resource is a collection. False otherwise.
-     * @see IOHandler#canExport(ExportContext, DavResource)
-     * @see DavResource#isCollection()
-     */
-    public boolean canExport(ExportContext context, DavResource resource) {
-        if (resource == null) {
-            return false;
-        }
-        return canExport(context, resource.isCollection());
-    }
-
-    /**
-     * @see IOHandler#exportContent(ExportContext, boolean)
-     */
-    public boolean exportContent(ExportContext context, boolean isCollection) throws IOException {
-        if (!canExport(context, isCollection)) {
-            throw new IOException(getName() + ": Cannot export " + context.getExportRoot());
-        }
-
-        // properties (contentlength undefined)
-        context.setModificationTime(new Date().getTime());
-        context.setContentType("text/html", "UTF-8");
-        context.setETag("");
-
-        // data
-        if (context.hasStream()) {
-            PrintWriter writer = new PrintWriter(new OutputStreamWriter(context.getOutputStream(), "utf8"));
-            try {
-                Item item = context.getExportRoot();
-                Repository rep = item.getSession().getRepository();
-                String repName = rep.getDescriptor(Repository.REP_NAME_DESC);
-                String repURL = rep.getDescriptor(Repository.REP_VENDOR_URL_DESC);
-                String repVersion = rep.getDescriptor(Repository.REP_VERSION_DESC);
-                writer.print("<html><head><title>");
-                writer.print(repName);
-                writer.print(" ");
-                writer.print(repVersion);
-                writer.print(" ");
-                writer.print(item.getPath());
-                writer.print("</title></head>");
-                writer.print("<body><h2>");
-                writer.print(item.getPath());
-                writer.print("</h2><ul>");
-                writer.print("<li><a href=\"..\">..</a></li>");
-                if (item.isNode()) {
-                    NodeIterator iter = ((Node)item).getNodes();
-                    while (iter.hasNext()) {
-                        Node child = iter.nextNode();
-                        String label = Text.getName(child.getPath());
-                        writer.print("<li><a href=\"");
-                        writer.print(Text.escape(label));
-                        if (child.isNode()) {
-                            writer.print("/");
-                        }
-                        writer.print("\">");
-                        writer.print(label);
-                        writer.print("</a></li>");
-                    }
-                }
-                writer.print("</ul><hr size=\"1\"><em>Powered by <a href=\"");
-                writer.print(repURL);
-                writer.print("\">");
-                writer.print(repName);
-                writer.print("</a> version ");
-                writer.print(repVersion);
-                writer.print("</em></body></html>");
-            } catch (RepositoryException e) {
-                // should not occur
-                log.debug(e.getMessage());
-            }
-            writer.close();
-        }
-        return true;
-    }
-
-    /**
-     * @see IOHandler#exportContent(ExportContext, DavResource)
-     */
-    public boolean exportContent(ExportContext context, DavResource resource) throws IOException {
-        if (!canExport(context, resource)) {
-            throw new IOException(getName() + ": Cannot export " + context.getExportRoot());
-        }
-
-        // properties (contentlength undefined)
-        context.setModificationTime(new Date().getTime());
-        context.setContentType("text/html", "UTF-8");
-        context.setETag("");
-
-        // data
-        if (context.hasStream()) {
-            PrintWriter writer = new PrintWriter(new OutputStreamWriter(context.getOutputStream(), "utf8"));
-            try {
-                Item item = context.getExportRoot();
-                Repository rep = item.getSession().getRepository();
-                String repName = rep.getDescriptor(Repository.REP_NAME_DESC);
-                String repURL = rep.getDescriptor(Repository.REP_VENDOR_URL_DESC);
-                String repVersion = rep.getDescriptor(Repository.REP_VERSION_DESC);
-                writer.print("<html><head><title>");
-                writer.print(repName);
-                writer.print(" ");
-                writer.print(repVersion);
-                writer.print(" ");
-                writer.print(resource.getResourcePath());
-                writer.print("</title></head>");
-                writer.print("<body><h2>");
-                writer.print(resource.getResourcePath());
-                writer.print("</h2><ul>");
-                writer.print("<li><a href=\"..\">..</a></li>");
-                DavResourceIterator iter = resource.getMembers();
-                while (iter.hasNext()) {
-                    DavResource child = iter.nextResource();
-                    String label = Text.getName(child.getResourcePath());
-                    writer.print("<li><a href=\"");
-                    writer.print(child.getHref());
-                    writer.print("\">");
-                    writer.print(label);
-                    writer.print("</a></li>");
-                }
-                writer.print("</ul><hr size=\"1\"><em>Powered by <a href=\"");
-                writer.print(repURL);
-                writer.print("\">");
-                writer.print(repName);
-                writer.print("</a> version ");
-                writer.print(repVersion);
-                writer.print("</em></body></html>");
-            } catch (RepositoryException e) {
-                // should not occur
-                log.debug(e.getMessage());
-            }
-            writer.close();
-        }
-        return true;
-    }
-
-    /**
-     * @see IOHandler#getIOManager()
-     */
-    public IOManager getIOManager() {
-        return ioManager;
-    }
-
-    /**
-     * @see IOHandler#getName()
-     */
-    public String getName() {
-        return "DirListing Export";
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/ExportContext.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/ExportContext.java
deleted file mode 100644
index 3a21d57..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/ExportContext.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.server.io;
-
-import javax.jcr.Item;
-import java.io.OutputStream;
-
-/**
- * <code>ExportContext</code>...
- */
-public interface ExportContext extends IOContext {
-
-    /**
-     * Returns the item to be exported
-     *
-     * @return
-     */
-    public Item getExportRoot();
-
-    /**
-     * Return the output stream to be used for the export or <code>null</code>
-     *
-     * @return output stream or <code>null</code>
-     */
-    public OutputStream getOutputStream();
-
-    /**
-     * Set the content type for the resource content
-     *
-     * @param mimeType
-     * @param encoding
-     */
-    public void setContentType(String mimeType, String encoding);
-
-    /**
-     * Sets the content language.
-     *
-     * @param contentLanguage
-     */
-    public void setContentLanguage(String contentLanguage);
-
-    /**
-     * Sets the length of the data.
-     *
-     * @param contentLength the content length
-     */
-    public void setContentLength(long contentLength);
-
-    /**
-     * Sets the creation time of the resource. A successful properties export may
-     * set this member.
-     *
-     * @param creationTime the creation time
-     */
-    public void setCreationTime(long creationTime);
-
-    /**
-     * Sets the modification time of the resource
-     *
-     * @param modificationTime the modification time
-     */
-    public void setModificationTime(long modificationTime);
-
-    /**
-     * Sets the ETag of the resource. A successfull export command
-     * may set this member.
-     * 
-     * @param etag the ETag
-     */
-    public void setETag(String etag);
-
-    /**
-     * Sets an arbitrary property to this export context.
-     *
-     * @param propertyName
-     * @param propertyValue
-     */
-    public void setProperty(Object propertyName, Object propertyValue);
-}
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/ExportContextImpl.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/ExportContextImpl.java
deleted file mode 100644
index d9bbd8c..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/ExportContextImpl.java
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.server.io;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.io.OutputContext;
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.DavResource;
-
-import javax.jcr.Item;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Date;
-import java.io.File;
-import java.io.OutputStream;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.FileOutputStream;
-
-/**
- * <code>ExportContextImpl</code> implements an <code>ExportContext</code> that
- * wraps around the specified OutputContext as it was passed to
- * {@link DavResource#spool(OutputContext)}. If a stream is provided a temporary
- * file is created, which is deleted as soon as {@link #informCompleted(boolean)}
- * is called on this context. Note however, that the properties and the stream
- * are written to the  <code>OutputContext</code> but upon successful completion.
- *
- * @see #informCompleted(boolean)
- */
-public class ExportContextImpl extends AbstractExportContext {
-
-    private static Logger log = Logger.getLogger(ExportContextImpl.class);
-
-    private final Map properties = new HashMap();
-    private final OutputContext outputCtx;
-
-    private File outFile;
-    private OutputStream outStream;
-
-    public ExportContextImpl(Item exportRoot, OutputContext outputCtx) throws IOException {
-        super(exportRoot, (outputCtx != null) ? outputCtx.hasStream() : false, null);
-        this.outputCtx = outputCtx;
-        if (hasStream()) {
-            // we need a tmp file, since the export could fail
-            outFile = File.createTempFile("__exportcontext", "tmp");
-        }
-    }
-
-    /**
-     * Returns a new <code>OutputStream</code> to the temporary file or
-     * <code>null</code> if this context provides no stream.
-     *
-     * @see ExportContext#getOutputStream()
-     * @see #informCompleted(boolean)
-     */
-    public OutputStream getOutputStream() {
-        checkCompleted();
-        if (hasStream()) {
-            try {
-                // clean up the stream retrieved by the preceeding handler, that
-                // did not behave properly and failed to export although initially
-                // willing to handle the export.
-                if (outStream != null) {
-                    outStream.close();
-                }
-                outStream = new FileOutputStream(outFile);
-                return outStream;
-            } catch (IOException e) {
-                // unexpected error... ignore and return null
-            }
-        }
-        return null;
-    }
-
-    /**
-     * @see ExportContext#setContentLanguage(String)
-     */
-    public void setContentLanguage(String contentLanguage) {
-        properties.put(DavConstants.HEADER_CONTENT_LANGUAGE, contentLanguage);
-    }
-
-    /**
-     * @see ExportContext#setContentLength(long)
-     */
-    public void setContentLength(long contentLength) {
-        properties.put(DavConstants.HEADER_CONTENT_LENGTH, contentLength + "");
-    }
-
-    /**
-     * @see ExportContext#setContentType(String,String)
-     */
-    public void setContentType(String mimeType, String encoding) {
-        properties.put(DavConstants.HEADER_CONTENT_TYPE, IOUtil.buildContentType(mimeType, encoding));
-    }
-
-    /**
-     * Does nothing since the wrapped output context does not understand
-     * creation time
-     *
-     * @param creationTime
-     * @see ExportContext#setCreationTime(long)
-     */
-    public void setCreationTime(long creationTime) {
-        // ignore since output-ctx does not understand creation time
-    }
-
-    /**
-     * @see ExportContext#setModificationTime(long)
-     */
-    public void setModificationTime(long modificationTime) {
-        if (modificationTime <= IOUtil.UNDEFINED_TIME) {
-            modificationTime = new Date().getTime();
-        }
-        String lastMod = IOUtil.getLastModified(modificationTime);
-        properties.put(DavConstants.HEADER_LAST_MODIFIED, lastMod);
-    }
-
-    /**
-     * @see ExportContext#setETag(String)
-     */
-    public void setETag(String etag) {
-        properties.put(DavConstants.HEADER_ETAG, etag);
-    }
-
-    /**
-     * @see ExportContext#setProperty(Object, Object) 
-     */
-    public void setProperty(Object propertyName, Object propertyValue) {
-        properties.put(propertyName, propertyValue);
-    }
-
-    /**
-     * If success is true, the properties set before an the output stream are
-     * written to the wrapped <code>OutputContext</code>.
-     *
-     * @param success
-     * @see ExportContext#informCompleted(boolean)
-     */
-    public void informCompleted(boolean success) {
-        checkCompleted();
-        completed = true;
-        // make sure the outputStream gets closed (and don't assume the handlers
-        // took care of this.
-        if (outStream != null) {
-            try {
-                outStream.close();
-            } catch (IOException e) {
-                // ignore
-            }
-        }
-        if (success) {
-            // write properties and data to the output-context
-            if (outputCtx != null) {
-                boolean hasContentLength = false;
-                Iterator it = properties.keySet().iterator();
-                while (it.hasNext()) {
-                    String name = it.next().toString();
-                    String value = properties.get(name).toString();
-                    outputCtx.setProperty(name, value);
-                    // check for content-length
-                    hasContentLength = DavConstants.HEADER_CONTENT_LENGTH.equals(name);
-                }
-
-                if (outputCtx.hasStream() && outFile != null) {
-                    OutputStream out = outputCtx.getOutputStream();
-                    try {
-                        // make sure the content-length is set
-                        if (!hasContentLength) {
-                            outputCtx.setContentLength(outFile.length());
-                        }
-                        FileInputStream in = new FileInputStream(outFile);
-                        IOUtil.spool(in, out);
-                    } catch (IOException e) {
-                        log.error(e);
-                    }
-                }
-            }
-        }
-        if (outFile != null) {
-            outFile.delete();
-        }
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/IOContext.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/IOContext.java
deleted file mode 100644
index 04fd2b7..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/IOContext.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.server.io;
-
-/**
- * <code>IOContext</code> defines the common methods for {@link ImportContext}
- * and {@link ExportContext}
- */
-public interface IOContext {
-
-    /**
-     * Returns the IOListener.
-     *
-     * @return
-     */
-    public IOListener getIOListener();
-
-    /**
-     * Return true if the given export context can provide an output stream
-     */
-    public boolean hasStream();
-
-    /**
-     * Informs this context that it will not be used for futher exports any
-     * more. A boolean flag indicates about the success of the export
-     *
-     * @param success
-     */
-    public void informCompleted(boolean success);
-
-    /**
-     * Returns true if this context already has been completed.
-     *
-     * @return true if this context already has been completed.
-     */
-    public boolean isCompleted();
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/IOHandler.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/IOHandler.java
deleted file mode 100644
index 99a0c63..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/IOHandler.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.server.io;
-
-import org.apache.jackrabbit.webdav.DavResource;
-
-import java.io.IOException;
-
-/**
- * <code>IOHandler</code>...
- */
-public interface IOHandler {
-
-    /**
-     * Returns the <code>IOManager</code> that called this handler or <code>null</code>.
-     *
-     * @return
-     */
-    public IOManager getIOManager();
-
-    /**
-     * Returns a human readable name for this <code>IOHandler</code>
-     *
-     * @return
-     */
-    public String getName();
-
-    /**
-     * Returns true, if this handler can run a successful import based on the
-     * specified context.
-     *
-     * @param context
-     * @param isCollection
-     * @return
-     */
-    public boolean canImport(ImportContext context, boolean isCollection);
-
-    /**
-     * Returns true, if this handler can run a successful import based on
-     * the specified context and resource. A simple implementation may choose
-     * to return the same as {@link #canImport(ImportContext, boolean)} where
-     * the isCollection flag is determined by {@link DavResource#isCollection()}.
-     *
-     * @param context
-     * @param resource
-     * @return
-     */
-    public boolean canImport(ImportContext context, DavResource resource);
-
-    /**
-     * Runs the import for the given context and indicates by a boolean return
-     * value, if the import could be completed successfully. If the specified
-     * <code>ImportContext</code> does not provide a {@link ImportContext#hasStream() stream}
-     * the implementation is free, to only import properties of to refuse the
-     * import.<br>
-     *
-     * Please note, that it is the responsibility of the specified
-     * <code>ImportContext</code> to assert, that its stream is not consumed
-     * multiple times when being passed to a chain of <code>IOHandler</code>s.
-     *
-     * @param context
-     * @param isCollection
-     * @return true if the import was successful.
-     * @throws IOException if an unexpected error occurs or if this method has
-     * been called although {@link #canImport(ImportContext, boolean)} returns
-     * false.
-     */
-    public boolean importContent(ImportContext context, boolean isCollection) throws IOException;
-
-    /**
-     * Runs the import for the given context and resource. It indicates by a boolean return
-     * value, if the import could be completed successfully. If the specified
-     * <code>ImportContext</code> does not provide a {@link ImportContext#hasStream() stream}
-     * the implementation is free, to only import properties of to refuse the
-     * import. A simple implementation may return the same as
-     * {@link #importContent(ImportContext, boolean)} where the isCollection flag
-     * is determined by {@link DavResource#isCollection()}<br>
-     *
-     * Please note, that it is the responsibility of the specified
-     * <code>ImportContext</code> to assert, that its stream is not consumed
-     * multiple times when being passed to a chain of <code>IOHandler</code>s.
-     *
-     * @param context
-     * @param resource
-     * @return
-     * @throws IOException if an unexpected error occurs or if this method has
-     * been called although {@link #canImport(ImportContext, DavResource)} returns
-     * false.
-     * @see #importContent(ImportContext, boolean)
-     */
-    public boolean importContent(ImportContext context, DavResource resource) throws IOException;
-
-    /**
-     * Returns true, if this handler can run a successful export based on the
-     * specified context.
-     *
-     * @param context
-     * @param isCollection
-     * @return
-     */
-    public boolean canExport(ExportContext context, boolean isCollection);
-
-    /**
-     * Returns true, if this handler can run a successful export based on
-     * the specified context and resource. A simple implementation may choose
-     * to return the same as {@link #canExport(ExportContext, boolean)} where
-     * the isCollection flag is determined by {@link DavResource#isCollection()}.
-     *
-     * @param context
-     * @param resource
-     * @return
-     */
-    public boolean canExport(ExportContext context, DavResource resource);
-
-    /**
-     * Runs the export for the given context. It indicates by a boolean return
-     * value, if the export could be completed successfully. If the specified
-     * <code>ExportContext</code> does not provide a {@link ExportContext#hasStream() stream}
-     * the implementation should set the properties only and ignore the content to
-     * be exported. A simple implementation may return the same as
-     * {@link #exportContent(ExportContext, boolean)} where the isCollection flag
-     * is determined by {@link DavResource#isCollection()}<br>
-     *
-     * Please note, that it is the responsibility of the specified
-     * <code>ExportContext</code> to assert, that its stream is not written
-     * multiple times when being passed to a chain of <code>IOHandler</code>s.
-     *
-     * @param context
-     * @param isCollection
-     * @return
-     * @throws IOException if an unexpected error occurs or if this method has
-     * been called although {@link #canExport(ExportContext, boolean)} returns
-     * false.
-     */
-    public boolean exportContent(ExportContext context, boolean isCollection) throws IOException;
-
-    /**
-     * Runs the export for the given context and resource. It indicates by a boolean return
-     * value, if the export could be completed successfully. If the specified
-     * <code>ExportContext</code> does not provide a {@link ExportContext#hasStream() stream}
-     * the implementation should set the properties only and ignore the content to
-     * be exported. A simple implementation may return the same as
-     * {@link #exportContent(ExportContext, boolean)} where the isCollection flag
-     * is determined by {@link DavResource#isCollection()}<br>
-     *
-     * Please note, that it is the responsibility of the specified
-     * <code>ExportContext</code> to assert, that its stream is not written
-     * multiple times when being passed to a chain of <code>IOHandler</code>s.
-     *
-     * @param context
-     * @param resource
-     * @return
-     * @throws IOException if an unexpected error occurs or if this method has
-     * been called although {@link #canExport(ExportContext, DavResource)} returns
-     * false.
-     */
-    public boolean exportContent(ExportContext context, DavResource resource) throws IOException;
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/IOListener.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/IOListener.java
deleted file mode 100644
index 0406cee..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/IOListener.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.server.io;
-
-/**
- * <code>IOListener</code> defines an import/export listener.
- */
-public interface IOListener {
-
-    /**
-     * The import/export context has been passed to the given <code>IOHandler</code>
-     *
-     * @param handler
-     * @param context
-     */
-    public void onBegin(IOHandler handler, IOContext context);
-
-    /**
-     * The specified <code>IOHandler</code> finished. A boolean flag indicates
-     * whether the handler was able to run the import/export.
-     *
-     * @param handler
-     * @param context
-     * @param success
-     */
-    public void onEnd(IOHandler handler, IOContext context, boolean success);
-
-    /**
-     * An expection occured during import/export within the specified
-     * <code>IOHandler</code>.
-     *
-     * @param ioHandler
-     * @param context
-     * @param e
-     */
-    public void onError(IOHandler ioHandler, IOContext context, Exception e);
-}
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/IOManager.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/IOManager.java
deleted file mode 100644
index 06f58c1..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/IOManager.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.server.io;
-
-import org.apache.jackrabbit.webdav.DavResource;
-
-import java.io.IOException;
-
-/**
- * <code>IOManager</code> interface provides the means to define a list of
- * <code>IOHandlers</code> that should be asked to perform an import or export.
- */
-public interface IOManager {
-
-    /**
-     * Adds the specified handler to the list of handlers.
-     *
-     * @param ioHandler to be added
-     */
-    public void addIOHandler(IOHandler ioHandler);
-
-    /**
-     * Returns all handlers that have been added to this manager.
-     *
-     * @return Array of all handlers
-     */
-    public IOHandler[] getIOHandlers();
-
-    /**
-     * Passes the specified context and boolean value to the IOHandlers present
-     * on this manager.
-     * As soon as the first handler incidates success the import should be
-     * considered completed. If none of the handlers can deal with the given
-     * information this method must return false.
-     *
-     * @param context
-     * @param isCollection
-     * @return true if any of the handlers import the given context.
-     * False otherwise.
-     * @throws IOException
-     * @see IOHandler#importContent(ImportContext, boolean)
-     */
-    public boolean importContent(ImportContext context, boolean isCollection) throws IOException;
-
-    /**
-     * Passes the specified information to the IOHandlers present on this manager.
-     * As soon as the first handler incidates success the import should be
-     * considered completed. If none of the handlers can deal with the given
-     * information this method must return false.
-     *
-     * @param context
-     * @param resource
-     * @return true if any of the handlers import the information present on the
-     * specified context.
-     * @throws IOException
-     * @see IOHandler#importContent(ImportContext, DavResource)
-     */
-    public boolean importContent(ImportContext context, DavResource resource) throws IOException;
-
-    /**
-     * Passes the specified information to the IOHandlers present on this manager.
-     * As soon as the first handler incidates success the export should be
-     * considered completed. If none of the handlers can deal with the given
-     * information this method must return false.
-     *
-     * @param context
-     * @param isCollection
-     * @return true if any of the handlers could run the export successfully,
-     * false otherwise.
-     * @throws IOException
-     * @see IOHandler#exportContent(ExportContext, boolean)
-     */
-    public boolean exportContent(ExportContext context, boolean isCollection) throws IOException;
-
-    /**
-     * Passes the specified information to the IOHandlers present on this manager.
-     * As soon as the first handler incidates success the export should be
-     * considered completed. If none of the handlers can deal with the given
-     * information this method must return false.
-     *
-     * @param context
-     * @param resource
-     * @return true if any of the handlers could run the export successfully,
-     * false otherwise.
-     * @throws IOException
-     * @see IOHandler#exportContent(ExportContext, DavResource)
-     */
-    public boolean exportContent(ExportContext context, DavResource resource) throws IOException;
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/IOUtil.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/IOUtil.java
deleted file mode 100644
index dc57781..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/IOUtil.java
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.server.io;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.util.Text;
-import org.apache.jackrabbit.webdav.DavConstants;
-
-import javax.jcr.RepositoryException;
-import javax.jcr.Node;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.util.Date;
-
-/**
- * <code>IOUtil</code> provides utitily methods used for import and export
- * operations.
- */
-public class IOUtil {
-
-    private static Logger log = Logger.getLogger(IOUtil.class);
-
-    /**
-     * Constant for undefined modification/creation time
-     */
-    public static final long UNDEFINED_TIME = -1;
-
-    /**
-     * Constant for undefined content length
-     */
-    public static final long UNDEFINED_LENGTH = -1;
-
-    /**
-     * MimeType resolver used to retrieve the mimetype if no content type is
-     * available during import.
-     */
-    public static final MimeResolver MIME_RESOLVER = new MimeResolver();
-
-    /**
-     * Return the last modification time as formatted string.
-     *
-     * @return last modification time as string.
-     * @see DavConstants#modificationDateFormat
-     */
-    public static String getLastModified(long modificationTime) {
-        if (modificationTime <= IOUtil.UNDEFINED_TIME) {
-            modificationTime = new Date().getTime();
-        }
-        return DavConstants.modificationDateFormat.format(new Date(modificationTime));
-    }
-
-    /**
-     * Return the creation time as formatted string.
-     *
-     * @return creation time as string.
-     * @see DavConstants#creationDateFormat
-     */
-    public static String getCreated(long createdTime) {
-        if (createdTime <= IOUtil.UNDEFINED_TIME) {
-            createdTime = 0;
-        }
-        return DavConstants.creationDateFormat.format(new Date(createdTime));
-    }
-
-    /**
-     *
-     * @param in
-     * @param out
-     * @throws IOException
-     */
-    public static void spool(InputStream in, OutputStream out) throws IOException {
-        try {
-            byte[] buffer = new byte[8192];
-            int read;
-            while ((read = in.read(buffer)) >= 0) {
-                out.write(buffer, 0, read);
-            }
-        } finally {
-            in.close();
-        }
-    }
-
-    /**
-     * Build a valid content type string from the given mimeType and encoding:
-     * <pre>
-     * &lt;mimeType&gt;; charset="&lt;encoding&gt;"
-     * </pre>
-     * If the specified mimeType is <code>null</code>, <code>null</code> is returned.
-     *
-     * @param mimeType
-     * @param encoding
-     * @return contentType or <code>null</code> if the specified mimeType is
-     * <code>null</code>
-     */
-    public static String buildContentType(String mimeType, String encoding) {
-        String contentType = mimeType;
-        if (encoding != null) {
-            contentType += "; charset=\"" + encoding + "\"";
-        }
-        return contentType;
-    }
-
-    /**
-     * Retrieve the mimeType from the specified contentType.
-     *
-     * @param contentType
-     * @return mimeType or <code>null</code>
-     */
-    public static String getMimeType(String contentType) {
-        String mimeType = contentType;
-        if (mimeType == null) {
-            // property will be removed.
-            // Note however, that jcr:mimetype is a mandatory property with the
-            // built-in nt:file nodetype.
-            return mimeType;
-        }
-        // strip any parameters
-        int semi = mimeType.indexOf(";");
-        return (semi > 0) ? mimeType.substring(0, semi) : mimeType;
-    }
-
-    /**
-     * Retrieve the encoding from the specified contentType.
-     *
-     * @param contentType
-     * @return encoding or <code>null</code> if the specified contentType is
-     * <code>null</code> or does not define a charset.
-     */
-    public static String getEncoding(String contentType) {
-        // find the charset parameter
-        int equal;
-        if (contentType == null || (equal = contentType.indexOf("charset=")) == -1) {
-            // jcr:encoding property will be removed
-            return null;
-        }
-        String encoding = contentType.substring(equal + 8);
-        // get rid of any other parameters that might be specified after the charset
-        int semi = encoding.indexOf(";");
-        if (semi != -1) {
-            encoding = encoding.substring(0, semi);
-        }
-        // strip off enclosing quotes
-        if (encoding.startsWith("\"") || encoding.startsWith("'")) {
-            encoding = encoding.substring(1, encoding.length() - 1);
-        }
-        return encoding;
-    }
-
-    /**
-     * Builds a new temp. file from the given input stream.<br>
-     * It is left to the user to remove the file as soon as it is not used
-     * any more.
-     *
-     * @param inputStream the input stream
-     * @return temp. file or <code>null</code> if the specified input is
-     * <code>null</code>.
-     */
-    public static File getTempFile(InputStream inputStream) throws IOException {
-        if (inputStream == null) {
-            return null;
-        }
-        // we need a tmp file, since the import could fail
-        File tmpFile = File.createTempFile("__importcontext", "tmp");
-        FileOutputStream out = new FileOutputStream(tmpFile);
-        byte[] buffer = new byte[8192];
-        int read;
-        while ((read=inputStream.read(buffer))>0) {
-            out.write(buffer, 0, read);
-        }
-        out.close();
-        inputStream.close();
-        return tmpFile;
-    }
-
-    /**
-     * Recursively creates nodes below the specified root node.
-     *
-     * @param root
-     * @param relPath
-     * @return the node corresponding to the last segment of the specified
-     * relative path.
-     * @throws RepositoryException
-     */
-    public static Node mkDirs(Node root, String relPath, String dirNodeType) throws RepositoryException {
-        String[] seg = Text.explode(relPath, '/');
-        for (int i=0; i< seg.length; i++) {
-            if (!root.hasNode(seg[i])) {
-                root.addNode(seg[i], dirNodeType);
-            }
-            root = root.getNode(seg[i]);
-        }
-        return root;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/ImportContext.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/ImportContext.java
deleted file mode 100644
index 1603968..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/ImportContext.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.server.io;
-
-import javax.jcr.Item;
-import java.io.InputStream;
-
-/**
- * <code>ImportContext</code>...
- */
-public interface ImportContext extends IOContext {
-
-    /**
-     * Returns the import root of the resource to import, i.e. the parent node
-     * of the new content to be created.
-     *
-     * @return the import root of the resource to import.
-     */
-    public Item getImportRoot();
-
-    /**
-     * Returns the system id of the resource to be imported. This id depends on
-     * the system the resource is comming from. it can be a filename, a
-     * display name of a webdav resource, an URI, etc.
-     *
-     * @return the system id of the resource to import
-     */
-    public String getSystemId();
-
-    /**
-     * Returns the input stream of the data to import or <code>null</code> if
-     * there are none.
-     *
-     * @return the input stream.
-     * @see #hasStream()
-     */
-    public InputStream getInputStream();
-
-    /**
-     * Returns the modification time of the resource or the current time if
-     * the modification time has not been set.
-     *
-     * @return the modification time.
-     */
-    public long getModificationTime();
-
-    /**
-     * Returns the content language or <code>null</code>
-     *
-     * @return contentLanguage
-     */
-    public String getContentLanguage();
-
-    /**
-     * Returns the length of the data or {@link IOUtil#UNDEFINED_LENGTH -1} if
-     * the content length could not be determined.
-     *
-     * @return the content length
-     */
-    public long getContentLength();
-
-    /**
-     * Returns the main media type. It should be retrieved from a content type
-     * (as present in a http request) or from the systemId. If either value
-     * is indefined <code>null</code> should be returned.
-     *
-     * @return the mimetype of the resource to be imported
-     */
-    public String getMimeType();
-
-    /**
-     * Returns the encoding extracted from a content type as present in a
-     * request header or <code>null</code>
-     *
-     * @return the encoding to be used for importing
-     */
-    public String getEncoding();
-
-    /**
-     *
-     * @param propertyName
-     * @return
-     */
-    public Object getProperty(Object propertyName);
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/ImportContextImpl.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/ImportContextImpl.java
deleted file mode 100644
index c0c8743..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/ImportContextImpl.java
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.server.io;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.io.InputContext;
-
-import javax.jcr.Item;
-import java.io.InputStream;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.File;
-import java.util.Date;
-
-/**
- * <code>ImportContextImpl</code>...
- */
-public class ImportContextImpl implements ImportContext {
-
-    private static Logger log = Logger.getLogger(ImportContextImpl.class);
-
-    private final IOListener ioListener;
-    private final Item importRoot;
-    private final String systemId;
-    private final File inputFile;
-
-    private InputContext inputCtx;
-    private boolean completed;
-
-    /**
-     * Creates a new item import context with the given root item and the
-     * specified <code>InputContext</code>. If the input context provides an
-     * input stream, the stream is written to a temporary file in order to avoid
-     * problems with multiple IOHandlers that try to run the import but fail.
-     * The temporary file is deleted as soon as this context is informed that
-     * the import has been completed and it will not be used any more.
-     *
-     * @param importRoot the import root node
-     * @param inputCtx wrapped by this <code>ImportContext</code>
-     */
-    public ImportContextImpl(Item importRoot, String systemId, InputContext inputCtx) throws IOException {
-        this(importRoot, systemId, (inputCtx != null) ? inputCtx.getInputStream() : null, null);
-        this.inputCtx = inputCtx;
-    }
-
-    /**
-     * Creates a new item import context. The specified InputStream is written
-     * to a temporary file in order to avoid problems with multiple IOHandlers
-     * that try to run the import but fail. The temporary file is deleted as soon
-     * as this context is informed that the import has been completed and it
-     * will not be used any more.
-     *
-     * @param importRoot
-     * @param systemId
-     * @param in
-     * @param ioListener
-     * @throws IOException
-     * @see ImportContext#informCompleted(boolean)
-     */
-    public ImportContextImpl(Item importRoot, String systemId, InputStream in, IOListener ioListener) throws IOException {
-        this.importRoot = importRoot;
-        this.systemId = systemId;
-        this.inputFile = IOUtil.getTempFile(in);
-        this.ioListener = (ioListener != null) ? ioListener : new DefaultIOListener(log);
-    }
-
-    /**
-     * @see ImportContext#getIOListener()
-     */
-    public IOListener getIOListener() {
-        return ioListener;
-    }
-
-    /**
-     * @see ImportContext#getImportRoot()
-     */
-    public Item getImportRoot() {
-        return importRoot;
-    }
-
-    /**
-     * @see ImportContext#hasStream()
-     */
-    public boolean hasStream() {
-        return inputFile != null;
-    }
-
-    /**
-     * Returns a new <code>InputStream</code> to the temporary file created
-     * during instanciation or <code>null</code>, if this context does not
-     * provide a stream.
-     *
-     * @see ImportContext#getInputStream()
-     * @see #hasStream()
-     */
-    public InputStream getInputStream() {
-        checkCompleted();
-        InputStream in = null;
-        if (inputFile != null) {
-            try {
-                in = new FileInputStream(inputFile);
-            } catch (IOException e) {
-                // unexpected error... ignore and return null
-            }
-        }
-        return in;
-    }
-
-    /**
-     * @see ImportContext#getSystemId()
-     */
-    public String getSystemId() {
-        return systemId;
-    }
-
-    /**
-     * @see ImportContext#getModificationTime()
-     */
-    public long getModificationTime() {
-        return (inputCtx != null) ? inputCtx.getModificationTime() : new Date().getTime();
-    }
-
-    /**
-     * @see ImportContext#getContentLanguage()
-     */
-    public String getContentLanguage() {
-        return (inputCtx != null) ? inputCtx.getContentLanguage() : null;
-    }
-
-    /**
-     * @see ImportContext#getContentLength()
-     */
-    public long getContentLength() {
-        return (inputCtx != null) ? inputCtx.getContentLength() : IOUtil.UNDEFINED_LENGTH;
-    }
-
-    /**
-     * @return the content type present on the <code>InputContext</code> or
-     * <code>null</code>
-     * @see InputContext#getContentType()
-     */
-    private String getContentType() {
-        return (inputCtx != null) ? inputCtx.getContentType() : null;
-    }
-
-    /**
-     * @see ImportContext#getMimeType()
-     */
-    public String getMimeType() {
-        String contentType = getContentType();
-        String mimeType = null;
-        if (contentType != null) {
-            mimeType = IOUtil.getMimeType(contentType);
-        } else if (getSystemId() != null) {
-            mimeType = IOUtil.MIME_RESOLVER.getMimeType(getSystemId());
-        }
-        return mimeType;
-    }
-
-    /**
-     * @see ImportContext#getEncoding()
-     */
-    public String getEncoding() {
-        String contentType = getContentType();
-        return (contentType != null) ? IOUtil.getEncoding(contentType) : null;
-    }
-
-    /**
-     * @see ImportContext#getProperty(Object)
-     */
-    public Object getProperty(Object propertyName) {
-        return (inputCtx != null) ? inputCtx.getProperty(propertyName.toString()) : null;
-    }
-
-    /**
-     * @see ImportContext#informCompleted(boolean)
-     */
-    public void informCompleted(boolean success) {
-        checkCompleted();
-        completed = true;
-        if (inputFile != null) {
-            inputFile.delete();
-        }
-    }
-
-    /**
-     * @see ImportContext#isCompleted()
-     */
-    public boolean isCompleted() {
-        return completed;
-    }
-
-    /**
-     * @throws IllegalStateException if the context is already completed.
-     * @see #isCompleted()
-     * @see #informCompleted(boolean)
-     */
-    private void checkCompleted() {
-        if (completed) {
-            throw new IllegalStateException("ImportContext has already been consumed.");
-        }
-    }
-}
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/MimeResolver.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/MimeResolver.java
deleted file mode 100644
index 55eb1cf..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/MimeResolver.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.server.io;
-
-import java.util.Properties;
-import java.io.IOException;
-
-import org.apache.jackrabbit.util.Text;
-
-/**
- * This Class implements a very simple mime type resolver.
- */
-public class MimeResolver {
-
-    /**
-     * the loaded mime types
-     */
-    private Properties mimeTypes = new Properties();
-
-    /**
-     * the default mime type
-     */
-    private String defaultMimeType = "application/octet-stream";
-
-    /**
-     * Creates a new mime resolver.
-     */
-    public MimeResolver() {
-        try {
-            // init the mime types
-            mimeTypes.load(getClass().getResourceAsStream("mimetypes.properties"));
-        } catch (IOException e) {
-            throw new InternalError("Unable to load mimetypes: " + e.toString());
-        }
-    }
-
-    /**
-     * Returns the default mime type
-     * @return
-     */
-    public String getDefaultMimeType() {
-	return defaultMimeType;
-    }
-
-    /**
-     * Sets the default mime type
-     * @param defaultMimeType
-     */
-    public void setDefaultMimeType(String defaultMimeType) {
-	this.defaultMimeType = defaultMimeType;
-    }
-
-    /**
-     * Retrusn the mime type for the given name.
-     * @param filename
-     * @return
-     */
-    public String getMimeType(String filename) {
-	String ext = Text.getName(filename, '.');
-        if (ext.equals("")) {
-            ext = filename;
-        }
-	return mimeTypes.getProperty(ext.toLowerCase(), defaultMimeType);
-    }
-
-}
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/XmlHandler.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/XmlHandler.java
deleted file mode 100644
index 430437f..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/XmlHandler.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.server.io;
-
-import org.apache.log4j.Logger;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-import javax.jcr.ImportUUIDBehavior;
-import javax.jcr.Session;
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-
-import org.apache.jackrabbit.JcrConstants;
-
-/**
- * <code>XmlHandler</code> imports xml files and exports nodes that have
- * the proper {@link #XML_MIMETYPE} defined with their content. The export is
- * performed by running a {@link Session#exportDocumentView(String, OutputStream, boolean, boolean)
- * document view export} for the content of the export root defined with the
- * specified {@link ExportContext}.<br>
- * Please note that this handler is not suited for a generic system or document
- * view import/export of {@link Node}s because an extra root node is always
- * created during import and expected during export, respectively.
- */
-public class XmlHandler extends DefaultHandler {
-
-    private static Logger log = Logger.getLogger(XmlHandler.class);
-
-    /**
-     * the xml mimetype
-     */
-    public static final String XML_MIMETYPE = "text/xml";
-
-    /**
-     * Creates a new <code>XmlHandler</code> with default nodetype definitions:<br>
-     * <ul>
-     * <li>Nodetype for Collection: {@link JcrConstants#NT_UNSTRUCTURED nt:unstructured}</li>
-     * <li>Nodetype for Non-Collection: {@link JcrConstants#NT_FILE nt:file}</li>
-     * <li>Nodetype for Non-Collection content: {@link JcrConstants#NT_UNSTRUCTURED nt:unstructured}</li>
-     * </ul>
-     *
-     * @param ioManager
-     */
-    public XmlHandler(IOManager ioManager) {
-        super(ioManager, JcrConstants.NT_UNSTRUCTURED, JcrConstants.NT_FILE, JcrConstants.NT_UNSTRUCTURED);
-    }
-
-    /**
-     * Creates a new <code>XmlHandler</code>
-     *
-     * @param ioManager
-     * @param collectionNodetype
-     * @param defaultNodetype
-     * @param contentNodetype
-     */
-    public XmlHandler(IOManager ioManager, String collectionNodetype, String defaultNodetype, String contentNodetype) {
-        super(ioManager, collectionNodetype, defaultNodetype, contentNodetype);
-    }
-
-    /**
-     * @see IOHandler#canImport(ImportContext, boolean)
-     */
-    public boolean canImport(ImportContext context, boolean isCollection) {
-        if (context == null || context.isCompleted()) {
-            return false;
-        }
-        boolean isXmlMimeType = XML_MIMETYPE.equals(context.getMimeType());
-        return isXmlMimeType && context.hasStream() && super.canImport(context, isCollection);
-    }
-
-    /**
-     * @see DefaultHandler#importData(ImportContext, boolean, Node)
-     */
-    protected boolean importData(ImportContext context, boolean isCollection, Node contentNode) throws IOException, RepositoryException {
-        InputStream in = context.getInputStream();
-        int uuidBehavior = (isCollection)
-            ? ImportUUIDBehavior.IMPORT_UUID_COLLISION_REMOVE_EXISTING
-            : ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW;
-        try {
-            contentNode.getSession().importXML(contentNode.getPath(), in, uuidBehavior);
-        } finally {
-            in.close();
-        }
-        return true;
-    }
-
-    /**
-     * @see DefaultHandler#importProperties(ImportContext, boolean, Node)
-     */
-    protected boolean importProperties(ImportContext context, boolean isCollection, Node contentNode) {
-        boolean success = super.importProperties(context, isCollection, contentNode);
-        if (success) {
-            // encoding: always UTF-8 for the xml import
-            try {
-                contentNode.setProperty(JcrConstants.JCR_ENCODING, "UTF-8");
-            } catch (RepositoryException e) {
-                // ignore, since given nodetype could not allow encoding
-                // deliberately not rethrowing an IOException.
-            }
-        }
-        return success;
-    }
-
-    /**
-     * @see IOHandler#canExport(ExportContext, boolean)
-     */
-    public boolean canExport(ExportContext context, boolean isCollection) {
-        if (super.canExport(context, isCollection)) {
-            String mimeType = null;
-            try {
-                Node contentNode = getContentNode(context, isCollection);
-                if (contentNode.hasProperty(JcrConstants.JCR_MIMETYPE)) {
-                    mimeType = contentNode.getProperty(JcrConstants.JCR_MIMETYPE).getString();
-                } else {
-                    mimeType = IOUtil.MIME_RESOLVER.getMimeType(context.getExportRoot().getName());
-                }
-            } catch (RepositoryException e) {
-                // ignore and return false
-            }
-            return XML_MIMETYPE.equals(mimeType);
-        }
-        return false;
-    }
-
-    /**
-     * @see DefaultHandler#exportProperties(ExportContext, boolean, Node)
-     */
-    protected void exportData(ExportContext context, boolean isCollection, Node contentNode) throws IOException, RepositoryException {
-        // first child of content is XML document root
-        if (contentNode.getNodes().hasNext()) {
-            contentNode = contentNode.getNodes().nextNode();
-        }
-        OutputStream out = context.getOutputStream();
-        contentNode.getSession().exportDocumentView(contentNode.getPath(), out, true, false);
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/ZipHandler.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/ZipHandler.java
deleted file mode 100644
index 0844afc..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/ZipHandler.java
+++ /dev/null
@@ -1,356 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.server.io;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.util.Text;
-import org.apache.jackrabbit.JcrConstants;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-import javax.jcr.NodeIterator;
-import javax.jcr.Item;
-import javax.jcr.Property;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.zip.ZipInputStream;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipOutputStream;
-
-/**
- * <code>ZipHandler</code> imports and extracts Zip files and exported nodes
- * (an their subnodes) to a Zip file. Please not that for the export the selected
- * export root must have the property {@link #ZIP_MIMETYPE} defined with its
- * content. Furthermore the content must not represent a zip-file that has
- * been imported to a binary {@link Property property}, which is properly
- * handled by the {@link DefaultHandler}.
- */
-public class ZipHandler extends DefaultHandler {
-
-    private static Logger log = Logger.getLogger(ZipHandler.class);
-
-    /**
-     * the zip mimetype
-     */
-    public static final String ZIP_MIMETYPE = "application/zip";
-
-    private boolean intermediateSave;
-
-    /**
-     * Creates a new <code>ZipHandler</code> with default nodetype definitions:<br>
-     * <ul>
-     * <li>Nodetype for Collection: {@link JcrConstants#NT_UNSTRUCTURED nt:unstructured}</li>
-     * <li>Nodetype for Non-Collection: {@link JcrConstants#NT_FILE nt:file}</li>
-     * <li>Nodetype for Non-Collection content: {@link JcrConstants#NT_UNSTRUCTURED nt:unstructured}</li>
-     * </ul>
-     *
-     * @param ioManager
-     * @throws IllegalArgumentException if the specified <code>IOManager</code>
-     * is <code>null</code>
-     */
-    public ZipHandler(IOManager ioManager) {
-        this(ioManager, JcrConstants.NT_FOLDER, JcrConstants.NT_FILE, JcrConstants.NT_UNSTRUCTURED);
-    }
-
-    /**
-     * Creates a new <code>ZipHandler</code>
-     *
-     * @param ioManager
-     * @param collectionNodetype
-     * @param defaultNodetype
-     * @param contentNodetype
-     * @throws IllegalArgumentException if the specified <code>IOManager</code>
-     * is <code>null</code>
-     */
-    public ZipHandler(IOManager ioManager, String collectionNodetype, String defaultNodetype, String contentNodetype) {
-        super(ioManager, collectionNodetype, defaultNodetype, contentNodetype);
-        if (ioManager == null) {
-            throw new IllegalArgumentException("The IOManager must not be null.");
-        }
-    }
-
-    /**
-     * If set to <code>true</code> the import root will be {@link Item#save() saved}
-     * after every imported zip entry. Note however, that this removes the possibility
-     * to revert all modifications if the import cannot be completed successfully.
-     * By default the intermediate save is disabled.
-     *
-     * @param intermediateSave
-     */
-    public void setIntermediateSave(boolean intermediateSave) {
-        this.intermediateSave = intermediateSave;
-    }
-
-    /**
-     * @see IOHandler#canImport(ImportContext, boolean)
-     */
-    public boolean canImport(ImportContext context, boolean isCollection) {
-        if (context == null || context.isCompleted()) {
-            return false;
-        }
-        boolean isZip = ZIP_MIMETYPE.equals(context.getMimeType());
-        return isZip && context.hasStream() && super.canImport(context, isCollection);
-    }
-
-    /**
-     * @see DefaultHandler#importData(ImportContext, boolean, Node)
-     */
-    protected boolean importData(ImportContext context, boolean isCollection, Node contentNode) throws IOException, RepositoryException {
-        boolean success = true;
-        InputStream in = context.getInputStream();
-        ZipInputStream zin = new ZipInputStream(in);
-        try {
-            ZipEntry entry;
-            while ((entry=zin.getNextEntry())!=null && success) {
-                importZipEntry(zin, entry, context, contentNode);
-                zin.closeEntry();
-            }
-        } finally {
-            zin.close();
-            in.close();
-        }
-        return success;
-    }
-
-    /**
-     * @see IOHandler#canExport(ExportContext, boolean)
-     */
-    public boolean canExport(ExportContext context, boolean isCollection) {
-        if (super.canExport(context, isCollection)) {
-            // mimetype must be application/zip
-            String mimeType = null;
-            // if zip-content has not been extracted -> delegate to some other handler
-            boolean hasDataProperty = false;
-            try {
-                Node contentNode = getContentNode(context, isCollection);
-                // jcr:data property indicates that the zip-file has been imported as binary (not extracted)
-                hasDataProperty = contentNode.hasProperty(JcrConstants.JCR_DATA);
-                if (contentNode.hasProperty(JcrConstants.JCR_MIMETYPE)) {
-                    mimeType  = contentNode.getProperty(JcrConstants.JCR_MIMETYPE).getString();
-                } else {
-                    mimeType = IOUtil.MIME_RESOLVER.getMimeType(context.getExportRoot().getName());
-                }
-            } catch (RepositoryException e) {
-                // ignore and return false
-            }
-            return ZIP_MIMETYPE.equals(mimeType) && !hasDataProperty;
-        }
-        return false;
-    }
-
-    /**
-     * @see DefaultHandler#exportData(ExportContext,boolean,Node)
-     */
-    protected void exportData(ExportContext context, boolean isCollection, Node contentNode) throws IOException, RepositoryException {
-        ZipOutputStream zout = new ZipOutputStream(context.getOutputStream());
-        zout.setMethod(ZipOutputStream.DEFLATED);
-        try {
-            exportZipEntry(context, zout, contentNode, contentNode.getPath().length()+1);
-        } finally {
-            zout.finish();
-        }
-    }
-
-    /**
-     * If the specified node is the defined non-collection nodetype a new
-     * Zip entry is created and the exportContent is called on the IOManager
-     * defined with this handler. If in contrast the specified node does not
-     * represent a non-collection this method is called recursively for all
-     * child nodes.
-     *
-     * @param context
-     * @param zout
-     * @param node
-     * @param pos
-     * @throws IOException
-     */
-    private void exportZipEntry(ExportContext context, ZipOutputStream zout, Node node, int pos) throws IOException{
-        try {
-            if (node.isNodeType(getNodeType())) {
-                ZipEntryExportContext subctx = new ZipEntryExportContext(node, zout, context, pos);
-                // try if iomanager can treat node as zip entry otherwise recurse.
-                zout.putNextEntry(subctx.entry);
-                getIOManager().exportContent(subctx, false);
-            } else {
-                // recurse
-                NodeIterator niter = node.getNodes();
-                while (niter.hasNext()) {
-                    exportZipEntry(context, zout, niter.nextNode(), pos);
-                }
-            }
-        } catch (RepositoryException e) {
-            log.fatal(e.getMessage());
-            // should never occur
-        }
-    }
-
-    /**
-     * Creates a new sub context for the specified Zip entry and passes it to
-     * the IOManager defined with this handler.
-     *
-     * @param zin
-     * @param entry
-     * @param context
-     * @param node
-     * @return
-     * @throws RepositoryException
-     * @throws IOException
-     */
-    private boolean importZipEntry(ZipInputStream zin, ZipEntry entry, ImportContext context, Node node) throws RepositoryException, IOException {
-        boolean success = false;
-        log.debug("entry: " + entry.getName() + " size: " + entry.getSize());
-        if (entry.isDirectory()) {
-            IOUtil.mkDirs(node, makeValidJCRPath(entry.getName(), false), getCollectionNodeType());
-        } else {
-            // import zip entry as file
-            BoundedInputStream bin = new BoundedInputStream(zin);
-            bin.setPropagateClose(false);
-            ImportContext entryContext = new ZipEntryImportContext(context, entry, bin, node);
-
-            // let the iomanager deal with the individual entries.
-            IOManager ioManager = getIOManager();
-            success = (ioManager != null) ? ioManager.importContent(entryContext, false) : false;
-
-            // intermediate save in order to avoid problems with large zip files
-            if (intermediateSave) {
-                context.getImportRoot().save();
-            }
-        }
-        return success;
-    }
-
-    /**
-     * Creates a valid jcr label from the given one
-     *
-     * @param label
-     * @return
-     */
-    private static String makeValidJCRPath(String label, boolean appendLeadingSlash) {
-        if (appendLeadingSlash && !label.startsWith("/")) {
-            label = "/" + label;
-        }
-        StringBuffer ret = new StringBuffer(label.length());
-        for (int i=0; i<label.length(); i++) {
-            char c = label.charAt(i);
-            if (c=='*' || c=='\'' || c=='\"') {
-                c='_';
-            /* not quite correct: [] may be the index of a previously exported item. */
-            } else if (c=='[') {
-                c='(';
-            } else if (c==']') {
-                c=')';
-            }
-            ret.append(c);
-        }
-        return ret.toString();
-    }
-
-    //--------------------------------------------------------< inner class >---
-    /**
-     * Inner class used to create subcontexts for the import of the individual
-     * zip file entries.
-     */
-    private class ZipEntryImportContext extends ImportContextImpl {
-
-        private final Item importRoot;
-        private final ZipEntry entry;
-
-        private ZipEntryImportContext(ImportContext context, ZipEntry entry, BoundedInputStream bin, Node contentNode) throws IOException, RepositoryException {
-            super(contentNode, Text.getName(makeValidJCRPath(entry.getName(), true)), bin, context.getIOListener());
-            this.entry = entry;
-            String path = makeValidJCRPath(entry.getName(), true);
-            importRoot = IOUtil.mkDirs(contentNode, Text.getRelativeParent(path, 1), getCollectionNodeType());
-        }
-
-        public Item getImportRoot() {
-            return importRoot;
-        }
-
-        public long getModificationTime() {
-            return entry.getTime();
-        }
-
-        public long getContentLength() {
-            return entry.getSize();
-        }
-    }
-
-    /**
-     * Inner class used to create subcontexts for the export of the individual
-     * zip file entries.
-     */
-    private class ZipEntryExportContext extends AbstractExportContext {
-
-        private ZipEntry entry;
-        private OutputStream out;
-
-        private ZipEntryExportContext(Item exportRoot, OutputStream out, ExportContext context, int pos) {
-            super(exportRoot, out != null, context.getIOListener());
-            this.out = out;
-            try {
-                String entryPath = (exportRoot.getPath().length() > pos) ? exportRoot.getPath().substring(pos) : "";
-                entry = new ZipEntry(entryPath);
-            } catch (RepositoryException e) {
-                // should never occur
-            }
-        }
-
-        /**
-         * Returns the Zip output stream. Note, that this context does not
-         * deal properly with multiple IOHandlers writing to the stream.
-         *
-         * @return
-         */
-        public OutputStream getOutputStream() {
-            return out;
-        }
-
-        public void setContentType(String mimeType, String encoding) {
-            if (entry != null) {
-                entry.setComment(mimeType);
-            }
-        }
-
-        public void setContentLanguage(String contentLanguage) {
-            // ignore
-        }
-
-        public void setContentLength(long contentLength) {
-            if (entry != null) {
-                entry.setSize(contentLength);
-            }
-        }
-
-        public void setCreationTime(long creationTime) {
-            // ignore
-        }
-
-        public void setModificationTime(long modificationTime) {
-            if (entry != null) {
-                entry.setTime(modificationTime);
-            }
-        }
-
-        public void setETag(String etag) {
-            // ignore
-        }
-
-        public void setProperty(Object propertyName, Object propertyValue) {
-            // ignore
-        }
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/mimetypes.properties b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/mimetypes.properties
deleted file mode 100644
index d6da214..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/mimetypes.properties
+++ /dev/null
@@ -1,135 +0,0 @@
-ai=application/postscript	
-aif=audio/x-aiff
-aifc=audio/x-aiff
-aiff=audio/x-aiff
-any=text/any
-asc=text/plain
-au=audio/basic
-avi=video/x-msvideo
-bcpio=application/x-bcpio
-bin=application/octet-stream
-bz2=application/x-bzip2
-cdf=application/x-netcdf
-class=application/octet-stream
-cpio=application/x-cpio
-cpt=application/mac-compactpro
-cq=application/cq-durboser
-crx=application/crx-durboser
-csh=application/x-csh
-css=text/css
-dcr=application/x-director
-dir=application/x-director
-dms=application/octet-stream
-doc=application/msword
-dvi=application/x-dvi
-dxr=application/x-director
-ecma=text/qhtml
-eps=application/postscript
-esp=text/qhtml
-etx=text/x-setext
-exe=application/octet-stream
-ez=application/andrew-inset
-gif=image/gif
-gtar=application/x-gtar
-gz=application/x-gzip
-hdf=application/x-hdf
-hqx=application/mac-binhex40
-htm=text/html
-html=text/html
-ice=x-conference/x-cooltalk
-ics=text/calendar
-ief=image/ief
-ifb=text/calendar
-iges=model/iges
-igs=model/iges
-jpe=image/jpeg
-jpeg=image/jpeg
-jpg=image/jpeg
-js=application/x-javascript
-kar=audio/midi
-latex=application/x-latex
-lha=application/octet-stream
-lzh=application/octet-stream
-man=application/x-troff-man
-mdb=application/msaccess
-me=application/x-troff-me
-mesh=model/mesh
-mid=audio/midi
-midi=audio/midi
-mif=application/vnd=mif
-mov=video/quicktime
-movie=video/x-sgi-movie
-mp2=audio/mpeg
-mp3=audio/mpeg
-mpe=video/mpeg
-mpeg=video/mpeg
-mpg=video/mpeg
-mpga=audio/mpeg
-ms=application/x-troff-ms
-msh=model/mesh
-nc=application/x-netcdf
-oda=application/oda
-pbm=image/x-portable-bitmap
-pdb=chemical/x-pdb
-pdf=application/pdf
-pgm=image/x-portable-graymap
-pgn=application/x-chess-pgn
-png=image/png
-pnm=image/x-portable-anymap
-ppm=image/x-portable-pixmap
-ppt=application/vnd=ms-powerpoint
-ps=application/postscript
-qhtml=text/qhtml
-qt=video/quicktime
-ra=audio/x-realaudio
-ram=audio/x-pn-realaudio
-ras=image/x-cmu-raster
-rgb=image/x-rgb
-rm=audio/x-pn-realaudio
-roff=application/x-troff
-rpm=application/x-rpm
-rtf=application/rtf
-rtf=text/rtf
-rtx=text/richtext
-sgm=text/sgml
-sgml=text/sgml
-sh=application/x-sh
-shar=application/x-shar
-silo=model/mesh
-sit=application/x-stuffit
-skd=application/x-koan
-skm=application/x-koan
-skp=application/x-koan
-skt=application/x-koan
-smi=application/smil
-smil=application/smil
-snd=audio/basic
-spl=application/x-futuresplash
-src=application/x-wais-source
-sv4cpio=application/x-sv4cpio
-sv4crc=application/x-sv4crc
-swf=application/x-shockwave-flash
-t=application/x-troff
-tar=application/x-tar
-tcl=application/x-tcl
-tex=application/x-tex
-texi=application/x-texinfo
-texinfo=application/x-texinfo
-tgz=application/x-gzip
-tif=image/tiff
-tiff=image/tiff
-tr=application/x-troff
-tsv=text/tab-separated-values
-txt=text/plain
-ustar=application/x-ustar
-vcd=application/x-cdlink
-vrml=model/vrml
-wav=audio/x-wav
-wrl=model/vrml
-xbm=image/x-xbitmap
-xls=application/msexcel
-xml=text/xml
-xpm=image/x-xpixmap
-xwd=image/x-xwindowdump
-xyz=chemical/x-pdb
-zip=application/zip
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/package.html b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/package.html
deleted file mode 100644
index 02a108f..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/io/package.html
+++ /dev/null
@@ -1,3 +0,0 @@
-The jackrabbit webdav server uses the classes defined in this package in order
-to perform import and export operations in order to respond to PUT and MKCOL and
-PROPFIND, GET, HEAD request, respectively.
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/jcr/JCRWebdavServer.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/jcr/JCRWebdavServer.java
deleted file mode 100644
index 2a0531a..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/server/jcr/JCRWebdavServer.java
+++ /dev/null
@@ -1,312 +0,0 @@
-/*
-* Copyright 2005 The Apache Software Foundation.
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-*      http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-package org.apache.jackrabbit.server.jcr;
-
-import org.apache.jackrabbit.server.SessionProvider;
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavServletRequest;
-import org.apache.jackrabbit.webdav.DavServletResponse;
-import org.apache.jackrabbit.webdav.DavSession;
-import org.apache.jackrabbit.webdav.DavSessionProvider;
-import org.apache.jackrabbit.webdav.WebdavRequest;
-import org.apache.jackrabbit.webdav.jcr.JcrDavException;
-import org.apache.log4j.Logger;
-
-import javax.jcr.LoginException;
-import javax.jcr.Repository;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletResponse;
-import java.util.HashMap;
-import java.util.HashSet;
-/**
- * <code>JCRWebdavServer</code>...
- */
-public class JCRWebdavServer implements DavSessionProvider {
-
-    /** the default logger */
-    private static Logger log = Logger.getLogger(JCRWebdavServer.class);
-
-    /** the session cache */
-    private final SessionCache cache = new SessionCache();
-
-    /** the jcr repository */
-    private final Repository repository;
-
-    /** the provider for the credentials */
-    private final SessionProvider sessionProvider;
-
-    /**
-     * Creates a new JCRWebdavServer that operates on the given repository.
-     *
-     * @param repository
-     */
-    public JCRWebdavServer(Repository repository, SessionProvider sessionProvider) {
-        this.repository = repository;
-        this.sessionProvider = sessionProvider;
-    }
-
-    //---------------------------------------< DavSessionProvider interface >---
-    /**
-     * Acquires a DavSession either from the session cache or creates a new
-     * one by login to the repository.
-     * Upon success, the WebdavRequest will reference that session.
-     *
-     * @param request
-     * @throws DavException if no session could be obtained.
-     * @see DavSessionProvider#attachSession(org.apache.jackrabbit.webdav.WebdavRequest)
-     */
-    public boolean attachSession(WebdavRequest request)
-        throws DavException {
-        DavSession session = cache.get(request);
-        request.setDavSession(session);
-        return true;
-    }
-
-    /**
-     * Releases the reference from the request to the session. If no further
-     * references to the session exist, the session will be removed from the
-     * cache.
-     *
-     * @param request
-     * @see DavSessionProvider#releaseSession(org.apache.jackrabbit.webdav.WebdavRequest)
-     */
-    public void releaseSession(WebdavRequest request) {
-        DavSession session = request.getDavSession();
-        if (session != null) {
-            session.removeReference(request);
-        }
-        // remove the session from the request
-        request.setDavSession(null);
-    }
-
-    //--------------------------------------------------------------------------
-    /**
-     * Private inner class implementing the <code>DavSession</code> interface.
-     */
-    private class DavSessionImpl implements DavSession {
-
-        /** the underlying jcr session */
-        private final Session session;
-
-        /**
-         * Private constructor.
-         *
-         * @param request
-         * @throws DavException in case a {@link javax.jcr.LoginException} or {@link javax.jcr.RepositoryException} occurs.
-         */
-        private DavSessionImpl(DavServletRequest request) throws DavException {
-            try {
-                String workspaceName = request.getRequestLocator().getWorkspaceName();
-                session = sessionProvider.getSession(request, repository, workspaceName);
-            } catch (LoginException e) {
-                // LoginException results in UNAUTHORIZED,
-                throw new JcrDavException(e);
-            } catch (RepositoryException e) {
-                // RepositoryException results in FORBIDDEN
-                throw new JcrDavException(e);
-            } catch (ServletException e) {
-                throw new DavException(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
-            }
-        }
-
-        /**
-         * Add a reference to this <code>DavSession</code>.
-         *
-         * @see DavSession#addReference(Object)
-         */
-        public void addReference(Object reference) {
-            cache.addReference(this, reference);
-        }
-
-        /**
-         * Removes the reference from this <code>DavSession</code>. If no
-         * more references are present, this <code>DavSession</code> is removed
-         * from the internal cache and the underlying session is released by
-         * calling {@link SessionProvider#releaseSession(javax.jcr.Session)} 
-         *
-         * @see DavSession#removeReference(Object)
-         */
-        public void removeReference(Object reference) {
-            cache.removeReference(this, reference);
-        }
-
-        /**
-         * @see DavSession#getRepositorySession()
-         */
-        public Session getRepositorySession() {
-            return session;
-        }
-
-        /**
-         * @see DavSession#addLockToken(String)
-         */
-        public void addLockToken(String token) {
-            session.addLockToken(token);
-        }
-
-        /**
-         * @see DavSession#getLockTokens()
-         */
-        public String[] getLockTokens() {
-            return session.getLockTokens();
-        }
-
-        /**
-         * @see DavSession#removeLockToken(String)
-         */
-        public void removeLockToken(String token) {
-            session.removeLockToken(token);
-        }
-    }
-
-    /**
-     * Private inner class providing a cache for referenced session objects.
-     */
-    private class SessionCache {
-
-        private SessionMap sessionMap = new SessionMap();
-        private HashMap referenceToSessionMap = new HashMap();
-
-        /**
-         * Try to retrieve <code>DavSession</code> if a TransactionId or
-         * SubscriptionId is present in the request header. If no cached session
-         * was found <code>null</code> is returned.
-         *
-         * @param request
-         * @return a cached <code>DavSession</code> or <code>null</code>.
-         * @throws DavException
-         */
-        private DavSession get(WebdavRequest request)
-            throws DavException {
-            String txId = request.getTransactionId();
-            String subscriptionId = request.getSubscriptionId();
-            String lockToken = request.getLockToken();
-
-            if ((lockToken != null || txId != null) && subscriptionId != null) {
-                throw new DavException(DavServletResponse.SC_PRECONDITION_FAILED, "Ambiguous headers: either TransactionId/Lock-Token or SubscriptionId can be present, not both.");
-            }
-
-            DavSession session = null;
-            // try to retrieve a cached session
-            if (lockToken != null && containsReference(lockToken)) {
-                session = getSessionByReference(lockToken);
-            } else if (txId != null && containsReference(txId)) {
-                session = getSessionByReference(txId);
-            } else if (subscriptionId != null && containsReference(subscriptionId)) {
-                session = getSessionByReference(subscriptionId);
-            }
-            // no cached session present -> create new one.
-            if (session == null) {
-                session = new DavSessionImpl(request);
-                sessionMap.put(session, new HashSet());
-                log.info("login: User '" + session.getRepositorySession().getUserID() + "' logged in.");
-            } else {
-                log.info("login: Retrieved cached session for user '" + session.getRepositorySession().getUserID() + "'");
-            }
-            addReference(session, request);
-            return session;
-        }
-
-        /**
-         * Add a references to the specified <code>DavSession</code>.
-         *
-         * @param session
-         * @param reference
-         */
-        private void addReference(DavSession session, Object reference) {
-            HashSet referenceSet = sessionMap.get(session);
-            if (referenceSet != null) {
-                referenceSet.add(reference);
-                referenceToSessionMap.put(reference, session);
-            } else {
-                log.error("Failed to add reference to session. No entry in cache found.");
-            }
-        }
-
-        /**
-         * Remove the given reference from the specified <code>DavSession</code>.
-         *
-         * @param session
-         * @param reference
-         */
-        private void removeReference(DavSession session, Object reference) {
-            HashSet referenceSet = sessionMap.get(session);
-            if (referenceSet != null) {
-                if (referenceSet.remove(reference)) {
-                    log.info("Removed reference " + reference + " to session " + session);
-                    referenceToSessionMap.remove(reference);
-                } else {
-                    log.warn("Failed to remove reference " + reference + " to session " + session);
-                }
-                if (referenceSet.isEmpty()) {
-                    log.info("No more references present on webdav session -> clean up.");
-                    sessionMap.remove(session);
-                    sessionProvider.releaseSession(session.getRepositorySession());
-                    log.info("Login: User '" + session.getRepositorySession().getUserID() + "' logged out");
-                } else {
-                    log.debug(referenceSet.size() + " references remaining on webdav session " + session);
-                }
-            } else {
-                log.error("Failed to remove reference from session. No entry in cache found.");
-            }
-        }
-
-        /**
-         * Returns true, if there exists a <code>DavSession</code> in the cache
-         * that is referenced by the specified object.
-         *
-         * @param reference
-         * @return true if a <code>DavSession</code> is referenced by the given
-         * object.
-         */
-        private boolean containsReference(Object reference) {
-            return referenceToSessionMap.containsKey(reference);
-        }
-
-        /**
-         * Returns the <code>DavSession</code> that is referenced by the
-         * specified reference object.
-         *
-         * @param reference
-         * @return <code>DavSession</code> that is referenced by this reference
-         * object.
-         * @see #containsReference(Object)
-         */
-        private DavSession getSessionByReference(Object reference) {
-            return (DavSession) referenceToSessionMap.get(reference);
-        }
-    }
-
-    /**
-     * Simple inner class extending the {@link HashMap}.
-     */
-    private static class SessionMap extends HashMap {
-
-        public HashSet get(DavSession key) {
-            return (HashSet) super.get(key);
-        }
-
-        public HashSet put(DavSession key, HashSet value) {
-            return (HashSet) super.put(key, value);
-        }
-
-        public HashSet remove(DavSession key) {
-            return (HashSet) super.remove(key);
-        }
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/AbstractItemResource.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/AbstractItemResource.java
deleted file mode 100644
index 0b1b413..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/AbstractItemResource.java
+++ /dev/null
@@ -1,340 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.jcr;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.transaction.TxLockEntry;
-import org.apache.jackrabbit.webdav.version.report.SupportedReportSetProperty;
-import org.apache.jackrabbit.webdav.version.report.ReportType;
-import org.apache.jackrabbit.webdav.DavResourceLocator;
-import org.apache.jackrabbit.webdav.DavSession;
-import org.apache.jackrabbit.webdav.DavResourceFactory;
-import org.apache.jackrabbit.webdav.DavResource;
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavServletResponse;
-import org.apache.jackrabbit.webdav.property.DefaultDavProperty;
-import org.apache.jackrabbit.webdav.property.HrefProperty;
-import org.apache.jackrabbit.webdav.jcr.version.report.NodeTypesReport;
-import org.apache.jackrabbit.webdav.jcr.version.report.LocateByUuidReport;
-import org.apache.jackrabbit.webdav.jcr.version.report.RegisteredNamespacesReport;
-import org.apache.jackrabbit.webdav.jcr.version.report.RepositoryDescriptorsReport;
-import org.apache.jackrabbit.util.Text;
-
-import javax.jcr.Item;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.RepositoryException;
-import javax.jcr.Workspace;
-
-/**
- * <code>AbstractItemResource</code> covers common functionality for the various
- * resources, that represent a repository item.
- */
-abstract class AbstractItemResource extends AbstractResource implements
-    ItemResourceConstants {
-
-    private static Logger log = Logger.getLogger(AbstractItemResource.class);
-
-    protected final Item item;
-
-    /**
-     * Create a new <code>AbstractItemResource</code>.
-     *
-     * @param locator
-     * @param session
-     */
-    AbstractItemResource(DavResourceLocator locator, DavSession session, DavResourceFactory factory, Item item) {
-        super(locator, session, factory);
-        this.item = item;
-
-	// initialize the supported locks and reports
-        initLockSupport();
-        initSupportedReports();
-    }
-
-    //----------------------------------------------< DavResource interface >---
-    /**
-     * @see org.apache.jackrabbit.webdav.DavResource#getComplianceClass()
-     */
-    public String getComplianceClass() {
-        return ItemResourceConstants.COMPLIANCE_CLASS;
-    }
-
-    /**
-     * @see org.apache.jackrabbit.webdav.DavResource#getSupportedMethods()
-     */
-    public String getSupportedMethods() {
-        return ItemResourceConstants.METHODS;
-    }
-
-    /**
-     * Returns true if there exists a {@link Item repository item} with the given
-     * resource path, false otherwise.
-     *
-     * @see org.apache.jackrabbit.webdav.DavResource#exists()
-     */
-    public boolean exists() {
-        return item != null;
-    }
-
-    /**
-     * Retrieves the last segment of the item path (or the resource path if
-     * this resource does not exist). An item path is in addition first translated
-     * to the corresponding resource path.<br>
-     * NOTE: the displayname is not equivalent to {@link Item#getName() item name}
-     * which is exposed with the {@link #JCR_NAME &#123;http://www.day.com/jcr/webdav/1.0&#125;name}
-     * property.
-     *
-     * @see org.apache.jackrabbit.webdav.DavResource#getDisplayName() )
-     */
-    public String getDisplayName() {
-        String resPath = getResourcePath();
-        return (resPath != null) ? Text.getName(resPath) : resPath;
-    }
-
-    /**
-     * Returns the resource representing the parent item of the repository item
-     * represented by this resource. If this resoure represents the root item
-     * a {@link RootCollection} is returned.
-     *
-     * @return the collection this resource is internal member of. Except for the
-     * repository root, the returned collection always represent the parent
-     * repository node.
-     * @see org.apache.jackrabbit.webdav.DavResource#getCollection()
-     */
-    public DavResource getCollection() {
-        DavResource collection = null;
-
-        String resourcePath = getResourcePath();
-        // No special treatment for the root-item needed, because this is
-        // covered by the RootItemCollection itself.
-        String parentResourcePath = Text.getRelativeParent(resourcePath, 1);
-        String parentWorkspacePath = getLocator().getWorkspacePath();
-
-        DavResourceLocator parentLoc = getLocator().getFactory().createResourceLocator(getLocator().getPrefix(), parentWorkspacePath, parentResourcePath);
-        try {
-            collection = createResourceFromLocator(parentLoc);
-        } catch (DavException e) {
-            log.error("Unexpected error while retrieving collection: " + e.getMessage());
-        }
-
-        return collection;
-    }
-
-    /**
-     * Moves the underlying repository item to the indicated destination.
-     *
-     * @param destination
-     * @throws DavException
-     * @see DavResource#move(DavResource)
-     * @see javax.jcr.Session#move(String, String)
-     */
-    public void move(DavResource destination) throws DavException {
-        if (!exists()) {
-            throw new DavException(DavServletResponse.SC_NOT_FOUND);
-        }
-        DavResourceLocator destLocator = destination.getLocator();
-        if (!getLocator().isSameWorkspace(destLocator)) {
-            throw new DavException(DavServletResponse.SC_FORBIDDEN);
-        }
-
-        try {
-            String itemPath = getLocator().getJcrPath();
-            String destItemPath = destination.getLocator().getJcrPath();
-            if (getTransactionId() == null) {
-                // if not part of a transaction directely import on workspace
-                getRepositorySession().getWorkspace().move(itemPath, destItemPath);
-            } else {
-                // changes will not be persisted unless the tx is completed.
-                getRepositorySession().move(itemPath, destItemPath);
-            }
-            // no use in calling 'complete' that would fail for a moved item anyway.
-        } catch (PathNotFoundException e) {
-            // according to rfc 2518
-            throw new DavException(DavServletResponse.SC_CONFLICT, e.getMessage());
-        } catch (RepositoryException e) {
-            throw new JcrDavException(e);
-        }
-    }
-
-    /**
-     * Copies the underlying repository item to the indicated destination. If
-     * the locator of the specified destination resource indicates a different
-     * workspace, {@link Workspace#copy(String, String, String)} is used to perform
-     * the copy operation, {@link Workspace#copy(String, String)} otherwise.
-     * <p/>
-     * Note, that this implementation does not support shallow copy.
-     *
-     * @param destination
-     * @param shallow
-     * @throws DavException
-     * @see DavResource#copy(DavResource, boolean)
-     * @see Workspace#copy(String, String)
-     * @see Workspace#copy(String, String, String)
-     */
-    public void copy(DavResource destination, boolean shallow) throws DavException {
-        if (!exists()) {
-            throw new DavException(DavServletResponse.SC_NOT_FOUND);
-        }
-        // TODO: support shallow and deep copy is required by RFC 2518
-        if (shallow) {
-            throw new DavException(DavServletResponse.SC_FORBIDDEN, "Unable to perform shallow copy.");
-        }
-
-        try {
-            String itemPath = getLocator().getJcrPath();
-            String destItemPath = destination.getLocator().getJcrPath();
-            Workspace workspace = getRepositorySession().getWorkspace();
-            if (getLocator().isSameWorkspace(destination.getLocator())) {
-                workspace.copy(itemPath, destItemPath);
-            } else {
-                log.error("Copy between workspaces is not yet implemented (src: '" + getHref() + "', dest: '" + destination.getHref() + "')");
-                throw new DavException(DavServletResponse.SC_NOT_IMPLEMENTED);
-            }
-        } catch (PathNotFoundException e) {
-            // according to RFC 2518, should not occur
-            throw new DavException(DavServletResponse.SC_NOT_FOUND, e.getMessage());
-        } catch (RepositoryException e) {
-            throw new JcrDavException(e);
-        }
-    }
-
-    //--------------------------------------------------------------------------
-    /**
-     * Initialize the {@link org.apache.jackrabbit.webdav.lock.SupportedLock} property
-     * with entries that are valid for any type item resources.
-     *
-     * @see org.apache.jackrabbit.webdav.lock.SupportedLock
-     * @see org.apache.jackrabbit.webdav.transaction.TxLockEntry
-     * @see AbstractResource#initLockSupport()
-     */
-    protected void initLockSupport() {
-        if (exists()) {
-            // add supportedlock entries for local and eventually for global transaction locks
-            supportedLock.addEntry(new TxLockEntry(true));
-            supportedLock.addEntry(new TxLockEntry(false));
-        }
-    }
-
-    /**
-     * Define the set of reports supported by this resource.
-     *
-     * @see org.apache.jackrabbit.webdav.version.report.SupportedReportSetProperty
-     * @see AbstractResource#initSupportedReports()
-     */
-    protected void initSupportedReports() {
-        if (exists()) {
-            supportedReports = new SupportedReportSetProperty(new ReportType[] {
-                ReportType.EXPAND_PROPERTY,
-                NodeTypesReport.NODETYPES_REPORT,
-                LocateByUuidReport.LOCATE_BY_UUID_REPORT,
-                RegisteredNamespacesReport.REGISTERED_NAMESPACES_REPORT,
-                RepositoryDescriptorsReport.REPOSITORY_DESCRIPTORS_REPORT
-            });
-        }
-    }
-
-    /**
-     * Fill the property set for this resource.
-     */
-    protected void initProperties() {
-        super.initProperties();
-        if (exists()) {
-            try {
-                properties.add(new DefaultDavProperty(JCR_NAME, item.getName()));
-                properties.add(new DefaultDavProperty(JCR_PATH, item.getPath()));
-                properties.add(new DefaultDavProperty(JCR_DEPTH, String.valueOf(item.getDepth())));
-                // add href-property for the items parent unless its the root item
-                if (item.getDepth() > 0) {
-                    String parentHref = getLocatorFromItem(item.getParent()).getHref(true);
-                    properties.add(new HrefProperty(JCR_PARENT, parentHref, false));
-                }
-            } catch (RepositoryException e) {
-                // should not get here
-                log.error("Error while accessing jcr properties: " + e.getMessage());
-            }
-            
-            // transaction resource additional protected properties
-            if (item.isNew()) {
-                properties.add(new DefaultDavProperty(JCR_ISNEW, null, true));
-            } else if (item.isModified()) {
-                properties.add(new DefaultDavProperty(JCR_ISMODIFIED, null, true));
-            }
-        }
-    }
-
-    /**
-     * @return href of the workspace or <code>null</code> if this resource
-     * does not represent a repository item.
-     *
-     * @see AbstractResource#getWorkspaceHref()
-     */
-    protected String getWorkspaceHref() {
-        String workspaceHref = null;
-	DavResourceLocator locator = getLocator();
-        if (locator != null && locator.getWorkspaceName() != null) {
-            DavResourceLocator wspLocator = locator.getFactory().createResourceLocator(locator.getPrefix(), locator.getWorkspacePath(), ItemResourceConstants.ROOT_ITEM_PATH);
-            workspaceHref = wspLocator.getHref(true);
-        }
-	log.info(workspaceHref);
-        return workspaceHref;
-    }
-
-    /**
-     * If this resource exists but does not contain a transaction id, complete
-     * will try to persist any modifications present on the underlying
-     * repository item.
-     *
-     * @throws DavException if calling {@link Item#save()} fails
-     */
-    void complete() throws DavException {
-        if (exists() && getTransactionId() == null) {
-            try {
-                if (item.isModified()) {
-                    item.save();
-                }
-            } catch (RepositoryException e) {
-                // this includes LockException, ConstraintViolationException etc. not detected before
-                log.error("Error while completing request: " + e.getMessage() +" -> reverting changes.");
-                try {
-                    item.refresh(false);
-                } catch (RepositoryException re) {
-                    log.error("Error while reverting changes: " + re.getMessage());
-                }
-                throw new JcrDavException(e);
-            }
-        }
-    }
-
-    /**
-     * Retrieves the last segment of the given path and removes the index if
-     * present.
-     *
-     * @param itemPath
-     * @return valid jcr item name
-     */
-    protected static String getItemName(String itemPath) {
-        if (itemPath == null) {
-            throw new IllegalArgumentException("Cannot retrieve name from a 'null' item path.");
-        }
-        // retrieve the last part of the path
-        String name = Text.getName(itemPath);
-        // remove index
-        if (name.endsWith("]")) {
-            name = name.substring(0, name.lastIndexOf('['));
-        }
-        return name;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/AbstractResource.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/AbstractResource.java
deleted file mode 100644
index 8e1c6e4..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/AbstractResource.java
+++ /dev/null
@@ -1,749 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.jcr;
-
-import org.apache.jackrabbit.server.io.IOUtil;
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavLocatorFactory;
-import org.apache.jackrabbit.webdav.DavResource;
-import org.apache.jackrabbit.webdav.DavResourceFactory;
-import org.apache.jackrabbit.webdav.DavResourceLocator;
-import org.apache.jackrabbit.webdav.DavServletResponse;
-import org.apache.jackrabbit.webdav.DavSession;
-import org.apache.jackrabbit.webdav.MultiStatus;
-import org.apache.jackrabbit.webdav.MultiStatusResponse;
-import org.apache.jackrabbit.webdav.io.OutputContext;
-import org.apache.jackrabbit.webdav.jcr.search.SearchResourceImpl;
-import org.apache.jackrabbit.webdav.jcr.transaction.TxLockManagerImpl;
-import org.apache.jackrabbit.webdav.lock.ActiveLock;
-import org.apache.jackrabbit.webdav.lock.LockDiscovery;
-import org.apache.jackrabbit.webdav.lock.LockInfo;
-import org.apache.jackrabbit.webdav.lock.LockManager;
-import org.apache.jackrabbit.webdav.lock.Scope;
-import org.apache.jackrabbit.webdav.lock.SupportedLock;
-import org.apache.jackrabbit.webdav.lock.Type;
-import org.apache.jackrabbit.webdav.observation.EventDiscovery;
-import org.apache.jackrabbit.webdav.observation.ObservationResource;
-import org.apache.jackrabbit.webdav.observation.Subscription;
-import org.apache.jackrabbit.webdav.observation.SubscriptionDiscovery;
-import org.apache.jackrabbit.webdav.observation.SubscriptionInfo;
-import org.apache.jackrabbit.webdav.observation.SubscriptionManager;
-import org.apache.jackrabbit.webdav.property.DavProperty;
-import org.apache.jackrabbit.webdav.property.DavPropertyName;
-import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
-import org.apache.jackrabbit.webdav.property.DavPropertySet;
-import org.apache.jackrabbit.webdav.property.DefaultDavProperty;
-import org.apache.jackrabbit.webdav.property.HrefProperty;
-import org.apache.jackrabbit.webdav.property.ResourceType;
-import org.apache.jackrabbit.webdav.search.QueryGrammerSet;
-import org.apache.jackrabbit.webdav.search.SearchInfo;
-import org.apache.jackrabbit.webdav.search.SearchResource;
-import org.apache.jackrabbit.webdav.transaction.TransactionConstants;
-import org.apache.jackrabbit.webdav.transaction.TransactionInfo;
-import org.apache.jackrabbit.webdav.transaction.TransactionResource;
-import org.apache.jackrabbit.webdav.transaction.TxLockManager;
-import org.apache.jackrabbit.webdav.version.DeltaVConstants;
-import org.apache.jackrabbit.webdav.version.DeltaVResource;
-import org.apache.jackrabbit.webdav.version.OptionsInfo;
-import org.apache.jackrabbit.webdav.version.OptionsResponse;
-import org.apache.jackrabbit.webdav.version.SupportedMethodSetProperty;
-import org.apache.jackrabbit.webdav.version.report.Report;
-import org.apache.jackrabbit.webdav.version.report.ReportInfo;
-import org.apache.jackrabbit.webdav.version.report.ReportType;
-import org.apache.jackrabbit.webdav.version.report.SupportedReportSetProperty;
-import org.apache.log4j.Logger;
-
-import javax.jcr.Item;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * <code>AbstractResource</code> provides functionality common to all
- * resources.
- */
-abstract class AbstractResource implements DavResource, ObservationResource,
-        TransactionResource, DeltaVResource, SearchResource {
-
-    private static Logger log = Logger.getLogger(AbstractResource.class);
-
-    private final DavResourceLocator locator;
-    private final DavSession session;
-    private final DavResourceFactory factory;
-
-    private SubscriptionManager subsMgr;
-    private TxLockManagerImpl txMgr;
-    private String transactionId;
-
-    private long modificationTime = IOUtil.UNDEFINED_TIME;
-
-    protected boolean initedProps;
-    protected DavPropertySet properties = new DavPropertySet();
-    protected SupportedLock supportedLock = new SupportedLock();
-    protected SupportedReportSetProperty supportedReports = new SupportedReportSetProperty();
-
-    /**
-     * Create a new <code>AbstractResource</code>
-     *
-     * @param locator
-     * @param session
-     */
-    AbstractResource(DavResourceLocator locator, DavSession session, DavResourceFactory factory) {
-        if (session == null) {
-            throw new IllegalArgumentException("Creating AbstractItemResource: DavSession must not be null.");
-        }
-
-        this.locator = locator;
-        this.session = session;
-        this.factory = factory;
-    }
-
-    /**
-     * @see org.apache.jackrabbit.webdav.DavResource#getLocator()
-     */
-    public DavResourceLocator getLocator() {
-        return locator;
-    }
-
-    /**
-     * Returns the path of the underlying repository item or the item to
-     * be created (PUT/MKCOL). If the resource exists but does not represent
-     * a repository item <code>null</code> is returned.
-     *
-     * @return path of the underlying repository item.
-     * @see DavResource#getResourcePath()
-     * @see org.apache.jackrabbit.webdav.DavResourceLocator#getResourcePath()
-     */
-    public String getResourcePath() {
-        return locator.getResourcePath();
-    }
-
-    /**
-     * @see DavResource#getHref()
-     * @see DavResourceLocator#getHref(boolean)
-     */
-    public String getHref() {
-        return locator.getHref(isCollection());
-    }
-
-    /**
-     * @see org.apache.jackrabbit.webdav.DavResource#getModificationTime()
-     */
-    public long getModificationTime() {
-        return modificationTime;
-    }
-
-    /**
-     * Set the modificationTime field and adds the {@link DavPropertyName#GETLASTMODIFIED}
-     * property to the set of properties.
-     *
-     * @param modificationTime
-     */
-    void setModificationTime(long modificationTime) {
-        if (modificationTime > IOUtil.UNDEFINED_TIME) {
-        this.modificationTime = modificationTime;
-            String lastModified = IOUtil.getLastModified(modificationTime);
-            properties.add(new DefaultDavProperty(DavPropertyName.GETLASTMODIFIED, lastModified));
-        }
-    }
-
-    /**
-     * Returns <code>null</code>
-     *
-     * @return Always returns <code>null</code>
-     */
-    InputStream getStream() {
-        return null;
-    }
-
-    /**
-     * @see DavResource#spool(OutputContext)
-     */
-    public void spool(OutputContext outputContext) throws IOException {
-        if (!initedProps) {
-            initProperties();
-        }
-
-        // export properties
-        outputContext.setModificationTime(getModificationTime());
-        DavProperty etag = getProperty(DavPropertyName.GETETAG);
-        if (etag != null) {
-            outputContext.setETag(String.valueOf(etag.getValue()));
-        }
-        DavProperty contentType = getProperty(DavPropertyName.GETCONTENTTYPE);
-        if (contentType != null) {
-            outputContext.setContentType(String.valueOf(contentType.getValue()));
-        }
-        DavProperty contentLength = getProperty(DavPropertyName.GETCONTENTLENGTH);
-        if (contentLength != null) {
-            try {
-                long length = Long.parseLong(contentLength.getValue() + "");
-                if (length > 0) {
-                    outputContext.setContentLength(length);
-                }
-            } catch (NumberFormatException e) {
-                log.error("Could not build content length from property value '" + contentLength.getValue() + "'");
-            }
-        }
-        DavProperty contentLanguage = getProperty(DavPropertyName.GETCONTENTLANGUAGE);
-        if (contentLanguage != null) {
-            outputContext.setContentLanguage(contentLanguage.getValue().toString());
-        }
-
-        // spool content
-        InputStream in = getStream();
-        OutputStream out = outputContext.getOutputStream();
-        if (in != null && out != null) {
-            try {
-                IOUtil.spool(in, out);
-            } finally {
-                // also close stream if not sending content
-                try {
-                    in.close();
-                } catch (IOException e) {
-                    // ignore
-                }
-            }
-        }
-    }
-
-    /**
-     * @see org.apache.jackrabbit.webdav.DavResource#getPropertyNames()
-     */
-    public DavPropertyName[] getPropertyNames() {
-        return getProperties().getPropertyNames();
-    }
-
-    /**
-     * @see org.apache.jackrabbit.webdav.DavResource#getProperty(org.apache.jackrabbit.webdav.property.DavPropertyName)
-     */
-    public DavProperty getProperty(DavPropertyName name) {
-        return getProperties().get(name);
-    }
-
-    /**
-     * @see org.apache.jackrabbit.webdav.DavResource#getProperties()
-     */
-    public DavPropertySet getProperties() {
-        if (!initedProps) {
-            initProperties();
-        }
-        return properties;
-    }
-
-    /**
-     * Throws {@link DavServletResponse#SC_METHOD_NOT_ALLOWED}
-     *
-     * @param property
-     * @throws DavException Always throws {@link DavServletResponse#SC_METHOD_NOT_ALLOWED}
-     * @see org.apache.jackrabbit.webdav.DavResource#setProperty(org.apache.jackrabbit.webdav.property.DavProperty)
-     */
-    public void setProperty(DavProperty property) throws DavException {
-        throw new DavException(DavServletResponse.SC_METHOD_NOT_ALLOWED);
-    }
-
-    /**
-     * Throws {@link DavServletResponse#SC_METHOD_NOT_ALLOWED}
-     *
-     * @param propertyName
-     * @throws DavException Always throws {@link DavServletResponse#SC_METHOD_NOT_ALLOWED}
-     * @see org.apache.jackrabbit.webdav.DavResource#removeProperty(org.apache.jackrabbit.webdav.property.DavPropertyName)
-     */
-    public void removeProperty(DavPropertyName propertyName) throws DavException {
-        throw new DavException(DavServletResponse.SC_METHOD_NOT_ALLOWED);
-    }
-
-    /**
-     * Throws {@link DavServletResponse#SC_METHOD_NOT_ALLOWED}
-     *
-     * @see DavResource#alterProperties(org.apache.jackrabbit.webdav.property.DavPropertySet, org.apache.jackrabbit.webdav.property.DavPropertyNameSet) 
-     */
-    public MultiStatusResponse alterProperties(DavPropertySet setProperties,
-                                DavPropertyNameSet removePropertyNames)
-        throws DavException {
-        throw new DavException(DavServletResponse.SC_METHOD_NOT_ALLOWED);
-    }
-
-    /**
-     * Throws {@link DavServletResponse#SC_METHOD_NOT_ALLOWED}
-     *
-     * @param destination
-     * @throws DavException Always throws {@link DavServletResponse#SC_METHOD_NOT_ALLOWED}
-     * @see DavResource#move(org.apache.jackrabbit.webdav.DavResource)
-     */
-    public void move(DavResource destination) throws DavException {
-        throw new DavException(DavServletResponse.SC_METHOD_NOT_ALLOWED);
-    }
-
-    /**
-     * Throws {@link DavServletResponse#SC_METHOD_NOT_ALLOWED}
-     *
-     * @param destination
-     * @param shallow
-     * @throws DavException Always throws {@link DavServletResponse#SC_METHOD_NOT_ALLOWED}
-     * @see DavResource#copy(org.apache.jackrabbit.webdav.DavResource, boolean)
-     */
-    public void copy(DavResource destination, boolean shallow) throws DavException {
-        throw new DavException(DavServletResponse.SC_METHOD_NOT_ALLOWED);
-    }
-
-
-    /**
-     * Returns true, if the {@link SupportedLock} property contains an entry
-     * with the given type and scope. By default resources allow for {@link org.apache.jackrabbit.webdav.transaction.TransactionConstants.XML_TRANSACTION
-     * transaction} lock only.
-     *
-     * @param type
-     * @param scope
-     * @return true if this resource may be locked by the given type and scope.
-     * @see DavResource#isLockable(org.apache.jackrabbit.webdav.lock.Type, org.apache.jackrabbit.webdav.lock.Scope)
-     */
-    public boolean isLockable(Type type, Scope scope) {
-        return supportedLock.isSupportedLock(type, scope);
-    }
-
-    /**
-     * Returns true if this resource has a lock applied with the given type and scope.
-     *
-     * @param type
-     * @param scope
-     * @return true if this resource has a lock applied with the given type and scope.
-     * @see DavResource#hasLock(Type, Scope)
-     */
-    public boolean hasLock(Type type, Scope scope) {
-        return getLock(type, scope) != null;
-    }
-
-    /**
-     * @see DavResource#getLock(Type, Scope)
-     */
-    public ActiveLock getLock(Type type, Scope scope) {
-        ActiveLock lock = null;
-        if (TransactionConstants.TRANSACTION.equals(type)) {
-            lock = txMgr.getLock(type, scope, this);
-        }
-        return lock;
-    }
-
-    /**
-     * @see DavResource#getLocks()
-     * todo improve....
-     */
-    public ActiveLock[] getLocks() {
-        List locks = new ArrayList();
-        // tx locks
-        ActiveLock l = getLock(TransactionConstants.TRANSACTION, TransactionConstants.LOCAL);
-        if (l != null) {
-            locks.add(l);
-        }
-        l = getLock(TransactionConstants.TRANSACTION, TransactionConstants.GLOBAL);
-        if (l != null) {
-            locks.add(l);
-        }
-        // write lock (either exclusive or session-scoped).
-        l = getLock(Type.WRITE, Scope.EXCLUSIVE);
-        if (l != null) {
-            locks.add(l);
-        } else {
-            l = getLock(Type.WRITE, ItemResourceConstants.EXCLUSIVE_SESSION);
-            if (l != null) {
-                locks.add(l);
-            }
-        }
-        return (ActiveLock[]) locks.toArray(new ActiveLock[locks.size()]);
-    }
-
-    /**
-     * @see DavResource#lock(org.apache.jackrabbit.webdav.lock.LockInfo)
-     */
-    public ActiveLock lock(LockInfo reqLockInfo) throws DavException {
-        if (isLockable(reqLockInfo.getType(), reqLockInfo.getScope())) {
-            return txMgr.createLock(reqLockInfo, this);
-        } else {
-            throw new DavException(DavServletResponse.SC_PRECONDITION_FAILED);
-        }
-    }
-
-    /**
-     * Only transaction lock may be available on this resource.
-     *
-     * @param info
-     * @param lockToken
-     * @throws DavException
-     * @see DavResource#refreshLock(org.apache.jackrabbit.webdav.lock.LockInfo, String)
-     */
-    public ActiveLock refreshLock(LockInfo info, String lockToken) throws DavException {
-        return txMgr.refreshLock(info, lockToken, this);        
-    }
-
-    /**
-     * Throws {@link DavServletResponse#SC_METHOD_NOT_ALLOWED} since only transaction
-     * locks may be present on this resource, that need to be released by calling
-     * {@link TransactionResource#unlock(String, org.apache.jackrabbit.webdav.transaction.TransactionInfo)}.
-     *
-     * @param lockToken
-     * @throws DavException Always throws {@link DavServletResponse#SC_METHOD_NOT_ALLOWED}
-     */
-    public void unlock(String lockToken) throws DavException {
-        throw new DavException(DavServletResponse.SC_PRECONDITION_FAILED);
-    }
-
-    /**
-     * @see DavResource#addLockManager(org.apache.jackrabbit.webdav.lock.LockManager)
-     */
-    public void addLockManager(LockManager lockMgr) {
-        if (lockMgr instanceof TxLockManagerImpl) {
-            txMgr = (TxLockManagerImpl) lockMgr;
-        }
-    }
-
-    /**
-     * @see org.apache.jackrabbit.webdav.DavResource#getFactory()
-     */
-    public DavResourceFactory getFactory() {
-        return factory;
-    }
-
-    //--------------------------------------------------------------------------
-    /**
-     * @see org.apache.jackrabbit.webdav.transaction.TransactionResource#getSession()
-     * @see org.apache.jackrabbit.webdav.observation.ObservationResource#getSession()
-     */
-    public DavSession getSession() {
-        return session;
-    }
-
-    //--------------------------------------< ObservationResource interface >---
-    /**
-     * @see ObservationResource#init(SubscriptionManager)
-     */
-    public void init(SubscriptionManager subsMgr) {
-        this.subsMgr = subsMgr;
-    }
-
-    /**
-     * @see ObservationResource#subscribe(org.apache.jackrabbit.webdav.observation.SubscriptionInfo, String)
-     * @see SubscriptionManager#subscribe(org.apache.jackrabbit.webdav.observation.SubscriptionInfo, String, org.apache.jackrabbit.webdav.observation.ObservationResource)
-     */
-    public Subscription subscribe(SubscriptionInfo info, String subscriptionId)
-            throws DavException {
-        return subsMgr.subscribe(info, subscriptionId, this);
-    }
-
-    /**
-     * @see ObservationResource#unsubscribe(String)
-     * @see SubscriptionManager#unsubscribe(String, org.apache.jackrabbit.webdav.observation.ObservationResource)
-     */
-    public void unsubscribe(String subscriptionId) throws DavException {
-        subsMgr.unsubscribe(subscriptionId, this);
-    }
-
-    /**
-     * @see ObservationResource#poll(String)
-     * @see SubscriptionManager#poll(String, org.apache.jackrabbit.webdav.observation.ObservationResource)
-     */
-    public EventDiscovery poll(String subscriptionId) throws DavException {
-        return subsMgr.poll(subscriptionId, this);
-    }
-
-    //--------------------------------------< TransactionResource interface >---
-    /**
-     * @see TransactionResource#init(TxLockManager, String)
-     */
-    public void init(TxLockManager txMgr, String transactionId) {
-        this.txMgr = (TxLockManagerImpl) txMgr;
-        this.transactionId = transactionId;
-    }
-
-    /**
-     * @see TransactionResource#unlock(String, org.apache.jackrabbit.webdav.transaction.TransactionInfo)
-     */
-    public void unlock(String lockToken, TransactionInfo tInfo) throws DavException {
-        txMgr.releaseLock(tInfo, lockToken, this);
-    }
-
-    /**
-     * @see TransactionResource#getTransactionId()
-     */
-    public String getTransactionId() {
-        return transactionId;
-    }
-
-    //-------------------------------------------< DeltaVResource interface >---
-    /**
-     * @param optionsInfo
-     * @return object to be used in the OPTIONS response body or <code>null</code>
-     * @see DeltaVResource#getOptionResponse(org.apache.jackrabbit.webdav.version.OptionsInfo)
-     */
-    public OptionsResponse getOptionResponse(OptionsInfo optionsInfo) {
-        OptionsResponse oR = null;
-        if (optionsInfo != null) {
-            oR = new OptionsResponse();
-            // currently only DAV:version-history-collection-set and
-            // DAV:workspace-collection-set is supported.
-            if (optionsInfo.containsElement(DeltaVConstants.XML_VH_COLLECTION_SET, DeltaVConstants.NAMESPACE)) {
-                String[] hrefs = new String[] {
-                    getLocatorFromItemPath(ItemResourceConstants.VERSIONSTORAGE_PATH).getHref(true)
-                };
-                oR.addEntry(DeltaVConstants.XML_VH_COLLECTION_SET, DeltaVConstants.NAMESPACE, hrefs);
-            }
-            if (optionsInfo.containsElement(DeltaVConstants.XML_WSP_COLLECTION_SET, DeltaVConstants.NAMESPACE)) {
-                // workspaces cannot be created anywhere.
-                oR.addEntry(DeltaVConstants.XML_WSP_COLLECTION_SET, DeltaVConstants.NAMESPACE, new String[0]);
-            }
-        }
-        return oR;
-    }
-
-    /**
-     * @param reportInfo
-     * @return the requested report
-     * @throws DavException
-     * @see DeltaVResource#getReport(org.apache.jackrabbit.webdav.version.report.ReportInfo)
-     */
-    public Report getReport(ReportInfo reportInfo) throws DavException {
-        if (reportInfo == null) {
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "A REPORT request must provide a valid XML request body.");
-        }
-        if (!exists()) {
-            throw new DavException(DavServletResponse.SC_NOT_FOUND);
-        }
-
-        if (supportedReports.isSupportedReport(reportInfo)) {
-            Report report = ReportType.getType(reportInfo).createReport(this, reportInfo);
-                return report;
-        } else {
-            throw new DavException(DavServletResponse.SC_UNPROCESSABLE_ENTITY, "Unkown report "+ reportInfo.getReportName() +"requested.");
-        }
-    }
-
-    /**
-     * The JCR api does not provide methods to create new workspaces. Calling
-     * <code>addWorkspace</code> on this resource will always fail.
-     *
-     * @param workspace
-     * @throws DavException Always throws.
-     * @see DeltaVResource#addWorkspace(org.apache.jackrabbit.webdav.DavResource)
-     */
-    public void addWorkspace(DavResource workspace) throws DavException {
-        throw new DavException(DavServletResponse.SC_FORBIDDEN);
-    }
-
-    /**
-     * Return an array of <code>DavResource</code> objects that are referenced
-     * by the property with the specified name.
-     *
-     * @param hrefPropertyName
-     * @return array of <code>DavResource</code>s
-     * @throws DavException
-     * @see DeltaVResource#getReferenceResources(org.apache.jackrabbit.webdav.property.DavPropertyName)
-     */
-    public DavResource[] getReferenceResources(DavPropertyName hrefPropertyName) throws DavException {
-        DavProperty prop = getProperty(hrefPropertyName);
-        if (prop == null || !(prop instanceof HrefProperty)) {
-            throw new DavException(DavServletResponse.SC_CONFLICT, "Unknown Href-Property '"+hrefPropertyName+"' on resource "+getResourcePath());
-        }
-
-        List hrefs = ((HrefProperty)prop).getHrefs();
-        DavResource[] refResources = new DavResource[hrefs.size()];
-        Iterator hrefIter = hrefs.iterator();
-        int i = 0;
-        while (hrefIter.hasNext()) {
-            refResources[i] = getResourceFromHref((String)hrefIter.next());
-            i++;
-        }
-        return refResources;
-    }
-
-    /**
-     * Retrieve the <code>DavResource</code> object that is represented by
-     * the given href String.
-     *
-     * @param href
-     * @return <code>DavResource</code> object
-     */
-    private DavResource getResourceFromHref(String href) throws DavException {
-        // build a new locator: remove trailing prefix
-        DavResourceLocator locator = getLocator();
-        String prefix = locator.getPrefix();
-        DavResourceLocator loc = locator.getFactory().createResourceLocator(prefix, href);
-
-        // create a new resource object
-        try {
-            DavResource res;
-            if (getRepositorySession().itemExists(loc.getJcrPath())) {
-                res = createResourceFromLocator(loc);
-            } else {
-                throw new DavException(DavServletResponse.SC_NOT_FOUND);
-            }
-            return res;
-        } catch (RepositoryException e) {
-            throw new JcrDavException(e);
-        }
-    }
-
-    //-------------------------------------------< SearchResource interface >---
-    /**
-     * @return
-     * @see org.apache.jackrabbit.webdav.search.SearchResource#getQueryGrammerSet()
-     */
-    public QueryGrammerSet getQueryGrammerSet() {
-        return new SearchResourceImpl(getLocator(), getSession()).getQueryGrammerSet();
-    }
-
-    /**
-     * @param sInfo
-     * @return
-     * @throws DavException
-     * @see SearchResource#search(org.apache.jackrabbit.webdav.search.SearchInfo)
-     */
-    public MultiStatus search(SearchInfo sInfo) throws DavException {
-        return new SearchResourceImpl(getLocator(), getSession()).search(sInfo);
-    }
-    //--------------------------------------------------------------------------
-    /**
-     * Fill the set of default properties
-     */
-    protected void initProperties() {
-        if (getDisplayName() != null) {
-            properties.add(new DefaultDavProperty(DavPropertyName.DISPLAYNAME, getDisplayName()));
-        }
-        if (isCollection()) {
-            properties.add(new ResourceType(ResourceType.COLLECTION));
-            // Windows XP support
-            properties.add(new DefaultDavProperty(DavPropertyName.ISCOLLECTION, "1"));
-        } else {
-            properties.add(new ResourceType(ResourceType.DEFAULT_RESOURCE));
-            // Windows XP support
-            properties.add(new DefaultDavProperty(DavPropertyName.ISCOLLECTION, "0"));
-        }
-        // todo: add etag
-
-        // default last modified
-        setModificationTime(new Date().getTime());
-        // default creation time
-        properties.add(new DefaultDavProperty(DavPropertyName.CREATIONDATE, DavConstants.creationDateFormat.format(new Date(0))));
-
-        // supported lock property
-        properties.add(supportedLock);
-
-        // set current lock information. If no lock is applied to this resource,
-        // an empty lockdiscovery will be returned in the response.
-        properties.add(new LockDiscovery(getLocks()));
-
-        // observation resource
-        SubscriptionDiscovery subsDiscovery = subsMgr.getSubscriptionDiscovery(this);
-        properties.add(subsDiscovery);
-
-        properties.add(new SupportedMethodSetProperty(getSupportedMethods().split(",\\s")));
-
-	// DeltaV properties
-	properties.add(supportedReports);
-	// creator-displayname, comment: not value available from jcr
-	properties.add(new DefaultDavProperty(DeltaVConstants.CREATOR_DISPLAYNAME, null, true));
-	properties.add(new DefaultDavProperty(DeltaVConstants.COMMENT, null, true));
-
-	// 'workspace' property as defined by RFC 3253
-	String workspaceHref = getWorkspaceHref();
-	if (workspaceHref != null) {
-	    properties.add(new HrefProperty(DeltaVConstants.WORKSPACE, workspaceHref, true));
-	}
-	// TODO: required supported-live-property-set
-    }
-
-    /**
-     * Create a new <code>DavResource</code> from the given locator.
-     * @param loc
-     * @return new <code>DavResource</code>
-     */
-    protected DavResource createResourceFromLocator(DavResourceLocator loc)
-            throws DavException {
-        DavResource res = factory.createResource(loc, session);
-        if (res instanceof AbstractResource) {
-            ((AbstractResource)res).transactionId = this.transactionId;
-        }
-        return res;
-    }
-
-    /**
-     * Build a <code>DavResourceLocator</code> from the given itemPath path.
-     *
-     * @param itemPath
-     * @return a new <code>DavResourceLocator</code>
-     * @see DavLocatorFactory#createResourceLocator(String, String, String)
-     */
-    protected DavResourceLocator getLocatorFromItemPath(String itemPath) {
-        DavResourceLocator loc = locator.getFactory().createResourceLocator(locator.getPrefix(), locator.getWorkspacePath(), itemPath, false);
-        return loc;
-    }
-
-    /**
-     * Build a new {@link DavResourceLocator} from the given repository item.
-     *
-     * @param repositoryItem
-     * @return a new locator for the specified item.
-     * @see #getLocatorFromItemPath(String)
-     */
-    protected DavResourceLocator getLocatorFromItem(Item repositoryItem) {
-        String itemPath = null;
-        try {
-            if (repositoryItem != null) {
-                itemPath = repositoryItem.getPath();
-            }
-        } catch (RepositoryException e) {
-            // ignore: should not occur
-            log.warn(e.getMessage());
-        }
-        return getLocatorFromItemPath(itemPath);
-    }
-
-    /**
-     * Shortcut for <code>getSession().getRepositorySession()</code>
-     *
-     * @return repository session present in the {@link #session}.
-     */
-    protected Session getRepositorySession() {
-        return getSession().getRepositorySession();
-    }
-
-    /**
-     * Define the set of locks supported by this resource.
-     *
-     * @see org.apache.jackrabbit.webdav.lock.SupportedLock
-     */
-    abstract protected void initLockSupport();
-
-    /**
-     * Define the set of reports supported by this resource.
-     *
-     * @see org.apache.jackrabbit.webdav.version.report.SupportedReportSetProperty
-     */
-    abstract protected void initSupportedReports();
-
-    /**
-     * Retrieve the href of the workspace the current session belongs to.
-     *
-     * @return href of the workspace
-     */
-    abstract protected String getWorkspaceHref();
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/DavLocatorFactoryImpl.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/DavLocatorFactoryImpl.java
deleted file mode 100644
index ab4a22b..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/DavLocatorFactoryImpl.java
+++ /dev/null
@@ -1,326 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.jcr;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.DavResourceLocator;
-import org.apache.jackrabbit.webdav.DavLocatorFactory;
-import org.apache.jackrabbit.util.Text;
-
-/**
- * <code>DavLocatorFactoryImpl</code>...
- */
-public class DavLocatorFactoryImpl implements DavLocatorFactory {
-
-    private static Logger log = Logger.getLogger(DavLocatorFactoryImpl.class);
-
-    private final String pathPrefix;
-
-    /**
-     * Create a new factory
-     *
-     * @param pathPrefix Prefix, that needs to be removed in order to retrieve
-     *                   the path of the repository item from a given <code>DavResourceLocator</code>.
-     */
-    public DavLocatorFactoryImpl(String pathPrefix) {
-        this.pathPrefix = pathPrefix;
-    }
-
-    /**
-     * Create a new <code>DavResourceLocator</code>. Any leading
-     * path-prefix (as defined with the constructor) and trailing '/' with
-     * the request handle is removed. The first label of the remaining handle is
-     * treated as workspace name. The remaining part of the given request handle
-     * is said to be the resource handle ("/" if an empty string remains).
-     * If the request handle does neither provide workspace name nor resource
-     * handle both values are set to <code>null</code>; the path object then
-     * represents the root resource that has no corresponding item in the JCR
-     * repository.
-     *
-     * @param prefix
-     * @param href
-     * @return a new <code>DavResourceLocator</code>
-     * @throws IllegalArgumentException if the request handle is <code>null</code>
-     */
-    public DavResourceLocator createResourceLocator(String prefix, String href) {
-        if (href == null) {
-            throw new IllegalArgumentException("Request handle must not be null.");
-        }
-
-        StringBuffer b = new StringBuffer("");
-        if (prefix != null) {
-            b.append(prefix);
-            if (pathPrefix != null && !prefix.endsWith(pathPrefix)) {
-                b.append(pathPrefix);
-            }
-        }
-        String rlPrefix = b.toString();
-
-        // remove any prefix that may still be present with the given href
-        if (pathPrefix != null && href.startsWith(pathPrefix)) {
-            href = href.substring(pathPrefix.length());
-        } else if (!"".equals(rlPrefix) && href.startsWith(rlPrefix)) {
-            href = href.substring(rlPrefix.length());
-        }
-
-        // remove trailing "/" that is present with collections
-        if (href.endsWith("/")) {
-            href = href.substring(0, href.length() - 1);
-        }
-
-        String resourcePath;
-        String workspacePath;
-
-        // an empty requestHandle (after removal of the "/") signifies a request
-        // to the root that does not represent a repository item.
-        if ("".equals(href)) {
-            resourcePath = null;
-            workspacePath = null;
-        } else {
-            // look for the first slash ignoring the leading one
-            int pos = href.indexOf('/', 1);
-            if (pos == -1) {
-                // request to a 'workspace' resource that in the same time
-                // represent the root node of the repository.
-                workspacePath = href;
-                resourcePath = ItemResourceConstants.ROOT_ITEM_PATH;
-            } else {
-                // separate the workspace name from the path of the repository
-                // item.
-                workspacePath = href.substring(0, pos);
-                resourcePath = Text.unescape(href.substring(pos));
-            }
-        }
-
-        return new DavResourceLocatorImpl(rlPrefix, workspacePath, resourcePath, this);
-    }
-
-    /**
-     * Create a new <code>DavResourceLocator</code> from the specified prefix,
-     * workspace path and resource path, whithout modifying the specified Strings.
-     *
-     * @param prefix
-     * @param workspacePath
-     * @param resourcePath
-     * @return a new <code>DavResourceLocator</code>
-     * @see DavLocatorFactory#createResourceLocator(String, String, String)
-     */
-    public DavResourceLocator createResourceLocator(String prefix, String workspacePath, String resourcePath) {
-        return createResourceLocator(prefix, workspacePath, resourcePath, true);
-    }
-
-    /**
-     *
-     * @param prefix
-     * @param workspacePath
-     * @param path
-     * @param isResourcePath
-     * @return
-     * @see DavLocatorFactory#createResourceLocator(String, String, String, boolean)
-     */
-    public DavResourceLocator createResourceLocator(String prefix, String workspacePath, String path, boolean isResourcePath) {
-        return new DavResourceLocatorImpl(prefix, workspacePath, path, this);
-    }
-
-    /**
-     * Private inner class <code>DavResourceLocatorImpl</code> implementing
-     * the <code>DavResourceLocator</code> interface.
-     */
-    private class DavResourceLocatorImpl implements DavResourceLocator {
-
-        private final String prefix;
-        private final String workspacePath;
-        private final String resourcePath;
-        private final DavLocatorFactory factory;
-
-        private final String href;
-
-        /**
-         * Create a new <code>DavResourceLocatorImpl</code>.
-         *
-         * @param prefix
-         * @param workspacePath
-         * @param resourcePath
-         */
-        DavResourceLocatorImpl(String prefix, String workspacePath, String resourcePath, DavLocatorFactory factory) {
-            this.prefix = prefix;
-            this.workspacePath = workspacePath;
-            this.resourcePath = resourcePath;
-            this.factory = factory;
-
-            StringBuffer buf = new StringBuffer(prefix);
-            if (workspacePath != null) {
-                buf.append(workspacePath);
-            }
-            if (resourcePath != null) {
-                buf.append(Text.escapePath(resourcePath));
-            }
-            int length = buf.length();
-            if (length > 0 && buf.charAt(length - 1) != '/') {
-                buf.append("/");
-            }
-            href = buf.toString();
-        }
-
-        /**
-         * Return the prefix used to build the href String. This includes the initial
-         * hrefPrefix as well a the path prefix.
-         *
-         * @return prefix String used to build the href.
-         */
-        public String getPrefix() {
-            return prefix;
-        }
-
-        /**
-         * Return the resource path of <code>null</code> if this locator object
-         * represents the '/' request handle. To a request handle specifying a
-         * workspace name only the '/' resource path is assigned, which represents
-         * the root node of the repository.
-         *
-         * @return resource path or <code>null</code>
-         * @see org.apache.jackrabbit.webdav.DavResourceLocator#getResourcePath()
-         */
-        public String getResourcePath() {
-            return resourcePath;
-        }
-
-        /**
-         * Return the workspace path or <code>null</code> if this locator object
-         * represents the '/' request handle.
-         *
-         * @return workspace path or <code>null</code>
-         * @see org.apache.jackrabbit.webdav.DavResourceLocator#getWorkspacePath()
-         */
-        public String getWorkspacePath() {
-            return workspacePath;
-        }
-
-        /**
-         * Return the workspace name or <code>null</code> if this locator object
-         * represents the '/' request handle.
-         *
-         * @return workspace name or <code>null</code>
-         * @see org.apache.jackrabbit.webdav.DavResourceLocator#getWorkspaceName()
-         */
-        public String getWorkspaceName() {
-            if (workspacePath != null) {
-                return workspacePath.substring(1);
-            }
-            return null;
-        }
-
-        /**
-         * Returns true if the specified locator object refers to a resource within
-         * the same workspace.
-         *
-         * @param locator
-         * @return true if the workspace name is equal to this workspace name.
-         * @see DavResourceLocator#isSameWorkspace(org.apache.jackrabbit.webdav.DavResourceLocator)
-         */
-        public boolean isSameWorkspace(DavResourceLocator locator) {
-            return (locator == null) ? false : isSameWorkspace(locator.getWorkspaceName());
-        }
-
-        /**
-         * Returns true if the specified string equals to this workspace name or
-         * if this workspace name is null.
-         *
-         * @param workspaceName
-         * @return true if the workspace name is equal to this workspace name.
-         * @see DavResourceLocator#isSameWorkspace(String)
-         */
-        public boolean isSameWorkspace(String workspaceName) {
-            if (getWorkspaceName() == null) {
-                return true;
-            } else {
-                return getWorkspaceName().equals(workspaceName);
-            }
-        }
-
-        /**
-         * Builds the 'href' from the prefix, the workspace name and the
-         * resource path present and assures a trailing '/' in case the href
-         * is used for collection. Note, that the resource path is
-         * {@link Text#escapePath(String) escaped}.
-         *
-         * @param isCollection
-         * @return href String representing the text of the href element
-         * @see org.apache.jackrabbit.webdav.DavConstants#XML_HREF
-         * @see DavResourceLocator#getHref(boolean)
-         */
-        public String getHref(boolean isCollection) {
-            return (isCollection) ? href : href.substring(0, href.length() - 1);
-        }
-
-        /**
-         * Returns true if the 'workspaceName' field is <code>null</code>.
-         *
-         * @return true if the 'workspaceName' field is <code>null</code>.
-         * @see org.apache.jackrabbit.webdav.DavResourceLocator#isRootLocation()
-         */
-        public boolean isRootLocation() {
-            return workspacePath == null;
-        }
-
-        /**
-         * Return the factory that created this locator.
-         *
-         * @return factory
-         * @see org.apache.jackrabbit.webdav.DavResourceLocator#getFactory()
-         */
-        public DavLocatorFactory getFactory() {
-            return factory;
-        }
-
-        /**
-         * Returns the same as {@link #getResourcePath()}. No encoding is performed
-         * at all.
-         * @see DavResourceLocator#getJcrPath()
-         */
-        public String getJcrPath() {
-            return getResourcePath();
-        }
-
-        /**
-         * Computes the hash code from the href, that is built from the prefix,
-         * the workspace name and the resource path all of them representing
-         * final instance fields.
-         *
-         * @return the hash code
-         */
-        public int hashCode() {
-            return href.hashCode();
-        }
-
-        /**
-         * Returns true, if the given object is a <code>DavResourceLocator</code>
-         * with the same hash code.
-         *
-         * @param obj the object to compare to
-         * @return <code>true</code> if the 2 objects are equal;
-         *         <code>false</code> otherwise
-         */
-        public boolean equals(Object obj) {
-            if (obj instanceof DavResourceLocator) {
-                DavResourceLocator other = (DavResourceLocator) obj;
-                return hashCode() == other.hashCode();
-            }
-            return false;
-        }
-    }
-}
-
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/DavResourceFactoryImpl.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/DavResourceFactoryImpl.java
deleted file mode 100644
index 4261388..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/DavResourceFactoryImpl.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.jcr;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.transaction.TransactionResource;
-import org.apache.jackrabbit.webdav.transaction.TransactionDavServletRequest;
-import org.apache.jackrabbit.webdav.observation.SubscriptionManager;
-import org.apache.jackrabbit.webdav.observation.ObservationResource;
-import org.apache.jackrabbit.webdav.version.DeltaVServletRequest;
-import org.apache.jackrabbit.webdav.version.VersionControlledResource;
-import org.apache.jackrabbit.webdav.jcr.version.VersionItemCollection;
-import org.apache.jackrabbit.webdav.jcr.version.VersionHistoryItemCollection;
-import org.apache.jackrabbit.webdav.jcr.transaction.TxLockManagerImpl;
-import org.apache.jackrabbit.webdav.DavResourceFactory;
-import org.apache.jackrabbit.webdav.DavResource;
-import org.apache.jackrabbit.webdav.DavResourceLocator;
-import org.apache.jackrabbit.webdav.DavServletRequest;
-import org.apache.jackrabbit.webdav.DavServletResponse;
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavSession;
-import org.apache.jackrabbit.webdav.DavMethods;
-
-import javax.jcr.version.Version;
-import javax.jcr.version.VersionHistory;
-import javax.jcr.Item;
-import javax.jcr.Node;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-
-/**
- * <code>DavResourceFactoryImpl</code>...
- */
-public class DavResourceFactoryImpl implements DavResourceFactory {
-
-    private static Logger log = Logger.getLogger(DavResourceFactoryImpl.class);
-
-    private final TxLockManagerImpl txMgr;
-    private final SubscriptionManager subsMgr;
-
-    /**
-     * Create a new <code>DavResourceFactoryImpl</code>.
-     *
-     * @param txMgr
-     * @param subsMgr
-     */
-    public DavResourceFactoryImpl(TxLockManagerImpl txMgr, SubscriptionManager subsMgr) {
-        this.txMgr = txMgr;
-        this.subsMgr = subsMgr;
-    }
-
-    /**
-     * Create a new <code>DavResource</code> from the specified locator and request
-     * objects. Note, that in contrast to
-     * {@link #createResource(DavResourceLocator, DavSession)} the locator may
-     * point to a non-existing resource.
-     * <p/>
-     * If the request contains a {@link org.apache.jackrabbit.webdav.version.DeltaVServletRequest#getLabel()
-     * Label header}, the resource is build from the indicated
-     * {@link org.apache.jackrabbit.webdav.version.VersionResource version} instead.
-     *
-     * @param locator
-     * @param request
-     * @param response
-     * @return
-     * @see DavResourceFactory#createResource(org.apache.jackrabbit.webdav.DavResourceLocator, org.apache.jackrabbit.webdav.DavServletRequest, org.apache.jackrabbit.webdav.DavServletResponse)
-     */
-    public DavResource createResource(DavResourceLocator locator,
-                                      DavServletRequest request,
-                                      DavServletResponse response) throws DavException {
-
-        DavSession session = request.getDavSession();
-        DavResource resource;
-        if (locator.isRootLocation()) {
-            resource = new RootCollection(locator, session, this);
-        } else {
-            try {
-                resource = createResourceForItem(locator, session);
-
-                /* if the created resource is version-controlled and the request
-                contains a Label header, the corresponding Version must be used
-                instead.*/
-                if (request instanceof DeltaVServletRequest && isVersionControlled(resource)) {
-                    String labelHeader = ((DeltaVServletRequest)request).getLabel();
-                    if (labelHeader != null && DavMethods.isMethodAffectedByLabel(request)) {
-                        Item item = getItem(session, locator);
-                        Version v = ((Node)item).getVersionHistory().getVersionByLabel(labelHeader);
-                        DavResourceLocator vloc = locator.getFactory().createResourceLocator(locator.getPrefix(), locator.getWorkspacePath(), v.getPath(), false);
-                        resource =  new VersionItemCollection(vloc, session, this, v);
-                    }
-                }
-            } catch (PathNotFoundException e) {
-                /* item does not exist yet: create the default resources
-                Note: MKCOL request forces a collection-resource even if there already
-                exists a repository-property with the given path. the MKCOL will
-                in that particular case fail with a 405 (method not allowed).*/
-                if (DavMethods.getMethodCode(request.getMethod()) == DavMethods.DAV_MKCOL) {
-                    resource = new VersionControlledItemCollection(locator, session, this, null);
-                } else {
-                    resource = new DefaultItemResource(locator, session, this, null);
-                }
-            } catch (RepositoryException e) {
-                log.error("Failed to build resource from item '"+ locator.getResourcePath() + "'");
-                throw new JcrDavException(e);
-            }
-        }
-
-        ((TransactionResource)resource).init(txMgr, ((TransactionDavServletRequest)request).getTransactionId());
-        ((ObservationResource)resource).init(subsMgr);
-        return resource;
-    }
-
-    /**
-     * Create a new <code>DavResource</code> from the given locator and session.
-     *
-     * @param locator
-     * @param session
-     * @return DavResource representing either a repository item or the {@link RootCollection}.
-     * @throws DavException if the given locator does neither refer to a repository item
-     * nor does represent the {@link org.apache.jackrabbit.webdav.DavResourceLocator#isRootLocation()
-     * root location}.
-     */
-    public DavResource createResource(DavResourceLocator locator, DavSession session) throws DavException {
-        DavResource resource;
-        try {
-            resource = createResourceForItem(locator, session);
-        } catch (RepositoryException e) {
-            log.info("Creating resource for non-existing repository item ...");
-            if (locator.isRootLocation()) {
-                resource =  new RootCollection(locator, session, this);
-            } else {
-		// todo: is this correct?
-		resource = new VersionControlledItemCollection(locator, session, this, null);
-            }
-        }
-
-        // todo: currently transactionId is set manually after creation > to be improved.
-        resource.addLockManager(txMgr);
-        ((ObservationResource)resource).init(subsMgr);
-        return resource;
-    }
-
-    /**
-     * Tries to retrieve the repository item defined by the locator's resource
-     * path and build the corresponding WebDAV resource. The following distinction
-     * is made between items: Version nodes, VersionHistory nodes, root node,
-     * unspecified nodes and finally property items.
-     *
-     * @param locator
-     * @param session
-     * @return DavResource representing a repository item.
-     * @throws RepositoryException if {@link javax.jcr.Session#getItem(String)} fails.
-     */
-    private DavResource createResourceForItem(DavResourceLocator locator, DavSession session) throws RepositoryException {
-        DavResource resource;
-        Item item = getItem(session, locator);
-        if (item.isNode()) {
-            // create special resources for Version and VersionHistory
-            if (item instanceof Version) {
-                resource = new VersionItemCollection(locator, session, this, item);
-            } else if (item instanceof VersionHistory) {
-                resource = new VersionHistoryItemCollection(locator, session, this, item);
-            } else if (ItemResourceConstants.ROOT_ITEM_PATH.equals(item.getPath())) {
-                resource =  new RootItemCollection(locator, session, this, item);
-            }  else{
-                resource = new VersionControlledItemCollection(locator, session, this, item);
-            }
-        } else {
-            resource = new DefaultItemResource(locator, session, this, item);
-        }
-        return resource;
-    }
-
-    private Item getItem(DavSession davSession, DavResourceLocator locator) throws PathNotFoundException, RepositoryException {
-        Session s = davSession.getRepositorySession();
-        return s.getItem(locator.getJcrPath());
-    }
-
-    /**
-     * Returns true, if the specified resource is a {@link VersionControlledResource}
-     * and has a version history.
-     *
-     * @param resource
-     * @return true if the specified resource is version-controlled.
-     */
-    private boolean isVersionControlled(DavResource resource) {
-        boolean vc = false;
-        if (resource instanceof VersionControlledResource) {
-            try {
-                vc = ((VersionControlledResource)resource).getVersionHistory() != null;
-            } catch (DavException e) {
-                log.debug("Resource '" + resource.getHref() + "' is not version-controlled.");
-            }
-        }
-        return vc;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/DefaultItemCollection.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/DefaultItemCollection.java
deleted file mode 100644
index 5934c39..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/DefaultItemCollection.java
+++ /dev/null
@@ -1,863 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.jcr;
-
-import org.apache.jackrabbit.JcrConstants;
-import org.apache.jackrabbit.util.Text;
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavResource;
-import org.apache.jackrabbit.webdav.DavResourceFactory;
-import org.apache.jackrabbit.webdav.DavResourceIterator;
-import org.apache.jackrabbit.webdav.DavResourceIteratorImpl;
-import org.apache.jackrabbit.webdav.DavResourceLocator;
-import org.apache.jackrabbit.webdav.DavServletResponse;
-import org.apache.jackrabbit.webdav.DavSession;
-import org.apache.jackrabbit.webdav.MultiStatusResponse;
-import org.apache.jackrabbit.webdav.io.InputContext;
-import org.apache.jackrabbit.webdav.jcr.lock.JcrActiveLock;
-import org.apache.jackrabbit.webdav.jcr.nodetype.NodeTypeProperty;
-import org.apache.jackrabbit.webdav.jcr.version.report.ExportViewReport;
-import org.apache.jackrabbit.webdav.jcr.version.report.LocateCorrespondingNodeReport;
-import org.apache.jackrabbit.webdav.lock.ActiveLock;
-import org.apache.jackrabbit.webdav.lock.LockInfo;
-import org.apache.jackrabbit.webdav.lock.Scope;
-import org.apache.jackrabbit.webdav.lock.Type;
-import org.apache.jackrabbit.webdav.ordering.OrderPatch;
-import org.apache.jackrabbit.webdav.ordering.OrderingConstants;
-import org.apache.jackrabbit.webdav.ordering.OrderingResource;
-import org.apache.jackrabbit.webdav.ordering.OrderingType;
-import org.apache.jackrabbit.webdav.ordering.Position;
-import org.apache.jackrabbit.webdav.property.DavProperty;
-import org.apache.jackrabbit.webdav.property.DavPropertyIterator;
-import org.apache.jackrabbit.webdav.property.DavPropertyName;
-import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
-import org.apache.jackrabbit.webdav.property.DavPropertySet;
-import org.apache.jackrabbit.webdav.property.DefaultDavProperty;
-import org.apache.jackrabbit.webdav.property.HrefProperty;
-import org.apache.log4j.Logger;
-
-import javax.jcr.AccessDeniedException;
-import javax.jcr.ImportUUIDBehavior;
-import javax.jcr.Item;
-import javax.jcr.ItemExistsException;
-import javax.jcr.ItemNotFoundException;
-import javax.jcr.Node;
-import javax.jcr.NodeIterator;
-import javax.jcr.Property;
-import javax.jcr.PropertyIterator;
-import javax.jcr.PropertyType;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.UnsupportedRepositoryOperationException;
-import javax.jcr.lock.Lock;
-import javax.jcr.nodetype.NodeType;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.Set;
-
-/**
- * <code>DefaultItemCollection</code> represents a JCR node item.
- */
-public class DefaultItemCollection extends AbstractItemResource
-        implements OrderingResource {
-
-    private static Logger log = Logger.getLogger(DefaultItemCollection.class);
-
-    private File content;
-
-    /**
-     * Create a new <code>DefaultItemCollection</code>.
-     *
-     * @param locator
-     * @param session
-     */
-    protected DefaultItemCollection(DavResourceLocator locator, DavSession session,
-                                    DavResourceFactory factory, Item item) {
-        super(locator, session, factory, item);
-        if (exists() && !(item instanceof Node)) {
-            throw new IllegalArgumentException("A collection resource can not be constructed from a Property item.");
-        }
-    }
-
-    //----------------------------------------------< DavResource interface >---
-    /**
-     * @see org.apache.jackrabbit.webdav.DavResource#getComplianceClass()
-     */
-    public String getComplianceClass() {
-        StringBuffer sb = new StringBuffer(super.getComplianceClass());
-        sb.append(", ").append(OrderingResource.COMPLIANCE_CLASS);
-        return sb.toString();
-    }
-
-    /**
-     * @see org.apache.jackrabbit.webdav.DavResource#getSupportedMethods()
-     */
-    public String getSupportedMethods() {
-        StringBuffer sb = new StringBuffer(super.getSupportedMethods());
-        // Ordering
-        if (isOrderable()) {
-           sb.append(", ").append(OrderingResource.METHODS);
-        }
-        return sb.toString();
-    }
-
-    /**
-     * Always returns true
-     *
-     * @return true
-     * @see org.apache.jackrabbit.webdav.DavResource#isCollection()
-     */
-    public boolean isCollection() {
-        return true;
-    }
-
-
-    /**
-     * Returns an {@link java.io.InputStream} to the content of this collection.
-     */
-    public InputStream getStream() {
-        if (!initedProps)  {
-        initProperties();
-        }
-        if (content != null) {
-            try {
-                return new FileInputStream(content);
-            } catch (FileNotFoundException e) {
-                // should not occur
-                log.error(e.getMessage());
-            }
-        }
-        return null;
-    }
-
-    /**
-     * This implementation of the <code>DavResource</code> does only allow
-     * to set the mixinnodetypes property. Please note that the existing list of
-     * mixin nodetypes will be completely replaced.<br>
-     * In order to add / set any other repository property on the underlying
-     * {@link javax.jcr.Node} use <code>addMember(DavResource)</code> or
-     * <code>addMember(DavResource, InputStream)</code> or modify the value
-     * of the corresponding resource.
-     *
-     * @param property
-     * @throws org.apache.jackrabbit.webdav.DavException
-     * @see org.apache.jackrabbit.webdav.DavResource#setProperty(org.apache.jackrabbit.webdav.property.DavProperty)
-     * @see #JCR_MIXINNODETYPES
-     */
-    public void setProperty(DavProperty property) throws DavException {
-        internalSetProperty(property);
-        complete();
-    }
-
-    /**
-     * Internal method used to set or add the given property
-     *
-     * @param property
-     * @throws DavException
-     * @see #setProperty(DavProperty)
-     * @see #alterProperties(DavPropertySet, DavPropertyNameSet)
-     */
-    private void internalSetProperty(DavProperty property) throws DavException {
-        if (!exists()) {
-            throw new DavException(DavServletResponse.SC_NOT_FOUND);
-        }
-        if (property.getName().equals(JCR_MIXINNODETYPES)) {
-            Node n = (Node)item;
-            try {
-                NodeType[] existingMixin = n.getMixinNodeTypes();
-                NodeTypeProperty mix = new NodeTypeProperty(property);
-                Set mixins = mix.getNodeTypeNames();
-
-                for (int i = 0; i < existingMixin.length; i++) {
-                    String name = existingMixin[i].getName();
-                    if (mixins.contains(name)){
-                        // do not add existing mixins
-                        mixins.remove(name);
-                    } else {
-                        // remove mixin that are not contained in the new list
-                        n.removeMixin(name);
-                    }
-                }
-
-                // add the remaining mixing types that are not yet set
-                Iterator it = mixins.iterator();
-                while (it.hasNext()) {
-                    n.addMixin((String)it.next());
-                }
-            } catch (RepositoryException e) {
-                throw new JcrDavException(e);
-            }
-        } else {
-            // all props except for mixinnodetypes are read-only
-            throw new DavException(DavServletResponse.SC_CONFLICT);
-        }
-    }
-
-    /**
-     * This implementation of the <code>DavResource</code> does only allow
-     * to remove the mixinnodetypes property.
-     *
-     * @param propertyName
-     * @throws org.apache.jackrabbit.webdav.DavException
-     * @see org.apache.jackrabbit.webdav.DavResource#removeProperty(org.apache.jackrabbit.webdav.property.DavPropertyName)
-     * @see #JCR_MIXINNODETYPES
-     */
-    public void removeProperty(DavPropertyName propertyName) throws DavException {
-        internalRemoveProperty(propertyName);
-        complete();
-    }
-
-    /**
-     * Internal method used to remove the property with the given name.
-     *
-     * @param propertyName
-     * @throws DavException
-     * @see #removeProperty(DavPropertyName)
-     * @see #alterProperties(DavPropertySet, DavPropertyNameSet)
-     */
-    private void internalRemoveProperty(DavPropertyName propertyName) throws DavException {
-        if (!exists()) {
-            throw new DavException(DavServletResponse.SC_NOT_FOUND);
-        }
-        if (JCR_MIXINNODETYPES.equals(propertyName)) {
-            // remove all mixin nodetypes
-            try {
-                Node n = (Node)item;
-                NodeType[] mixins = n.getMixinNodeTypes();
-                for (int i = 0; i < mixins.length; i++) {
-                    n.removeMixin(mixins[i].getName());
-                }
-            } catch (RepositoryException e) {
-                // NoSuchNodeTypeException, ConstraintViolationException should never occur...
-                throw new JcrDavException(e);
-            }
-        } else {
-            // all props except for mixinnodetypes are read-only
-            throw new DavException(DavServletResponse.SC_CONFLICT);
-        }
-    }
-
-    /**
-     * Loops over the given <code>Set</code>s and alters the properties accordingly.
-     * Changes are persisted at the end according to the rules defined with
-     * the {@link #complete()} method.<p>
-     * Please note: since there is only a single property ({@link #JCR_MIXINNODETYPES}
-     * that can be set or removed with PROPPATCH, this method either succeeds
-     * or throws an exception, even if this violates RFC 2518. Thus no property
-     * specific multistatus will be created in case of an error.
-     *
-     * @param setProperties
-     * @param removePropertyNames
-     * @return
-     * @throws DavException
-     * @see DavResource#alterProperties(org.apache.jackrabbit.webdav.property.DavPropertySet, org.apache.jackrabbit.webdav.property.DavPropertyNameSet)
-     */
-    public MultiStatusResponse alterProperties(DavPropertySet setProperties,
-                                DavPropertyNameSet removePropertyNames)
-        throws DavException {
-        DavPropertyIterator setIter = setProperties.iterator();
-        while (setIter.hasNext()) {
-            DavProperty prop = setIter.nextProperty();
-            // use the internal set method in order to prevent premature 'save'
-            internalSetProperty(prop);
-        }
-        Iterator remNameIter = removePropertyNames.iterator();
-        while (remNameIter.hasNext()) {
-            DavPropertyName propName = (DavPropertyName) remNameIter.next();
-            // use the internal set method in order to prevent premature 'save'
-            internalRemoveProperty(propName);
-        }
-        // TODO: missing undo of successful set/remove if subsequent operation fails
-        // NOTE, that this is relevant with transactions only.
-
-        // success: save all changes together if no error occured
-        complete();
-        return new MultiStatusResponse(getHref(), DavServletResponse.SC_OK);
-    }
-
-    /**
-     * If the specified resource represents a collection, a new node is {@link Node#addNode(String)
-     * added} to the item represented by this resource. If an input stream is specified
-     * together with a collection resource {@link Session#importXML(String, java.io.InputStream, int)}
-     * is called instead and this resource path is used as <code>parentAbsPath</code> argument.
-     * <p/>
-     * However, if the specified resource is not of resource type collection a
-     * new {@link Property} is set or an existing one is changed by modifying its
-     * value.<br>
-     * NOTE: with the current implementation it is not possible to create or
-     * modify multivalue JCR properties.<br>
-     * NOTE: if the JCR property represented by the specified resource has an
-     * {@link PropertyType#UNDEFINED undefined} resource type, its value will be
-     * changed/set to type {@link PropertyType#BINARY binary}.
-     *
-     * @param resource
-     * @param inputContext
-     * @throws org.apache.jackrabbit.webdav.DavException
-     * @see org.apache.jackrabbit.webdav.DavResource#addMember(org.apache.jackrabbit.webdav.DavResource, InputContext)
-     * @see Node#addNode(String)
-     * @see Node#setProperty(String, java.io.InputStream)
-     */
-    public void addMember(DavResource resource, InputContext inputContext)
-            throws DavException {
-
-        /* RFC 2815 states that all 'parents' must exist in order all addition of members */
-        if (!exists()) {
-            throw new DavException(DavServletResponse.SC_CONFLICT);
-        }
-
-        try {
-            Node n = (Node) item;
-            InputStream in = (inputContext != null) ? inputContext.getInputStream() : null;
-            String itemPath = getLocator().getJcrPath();
-            String memberName = getItemName(resource.getLocator().getJcrPath());
-            if (resource.isCollection()) {
-                if (in == null) {
-                    // MKCOL without a request body, try if a default-primary-type is defined.
-                    n.addNode(memberName);
-                } else {
-                    // MKCOL, which is not allowed for existing resources
-                    if (getTransactionId() == null) {
-                        // if not part of a transaction directely import on workspace
-                        // since changes would be explicitely saved in the
-                        // complete-call.
-                        getRepositorySession().getWorkspace().importXML(itemPath, in, ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW);
-                    } else {
-                        // changes will not be persisted unless the tx is completed.
-                        getRepositorySession().importXML(itemPath, in, ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW);
-                    }
-                }
-            } else {
-                if (in == null) {
-                    // PUT: not possible
-                    throw new DavException(DavServletResponse.SC_BAD_REQUEST, "Cannot create a new non-collection resource without request body.");
-                } else {
-                    // TODO: find a way to create non-binary and multivalue properties
-                    // PUT : create new or overwrite existing property.
-                    // NOTE: will fail for multivalue properties.
-                    n.setProperty(memberName, in);
-                }
-            }
-            complete();
-        } catch (ItemExistsException e) {
-            // according to RFC 2518: MKCOL only possible on non-existing/deleted resource
-            throw new JcrDavException(e, DavServletResponse.SC_METHOD_NOT_ALLOWED);
-        } catch (RepositoryException e) {
-            throw new JcrDavException(e);
-        } catch (IOException e) {
-            throw new DavException(DavServletResponse.SC_UNPROCESSABLE_ENTITY, e.getMessage());
-        }
-    }
-
-    /**
-     * @see org.apache.jackrabbit.webdav.DavResource#getMembers()
-     */
-    public DavResourceIterator getMembers() {
-        ArrayList memberList = new ArrayList();
-	if (exists()) {
-	    try {
-                Node n = (Node)item;
-                // add all node members
-		NodeIterator it = n.getNodes();
-		while (it.hasNext()) {
-                    Node node = it.nextNode();
-                    DavResourceLocator loc = getLocatorFromItem(node);
-		    memberList.add(createResourceFromLocator(loc));
-		}
-                // add all property members
-                PropertyIterator propIt = n.getProperties();
-                while (propIt.hasNext()) {
-                    Property prop = propIt.nextProperty();
-                    DavResourceLocator loc = getLocatorFromItem(prop);
-                    memberList.add(createResourceFromLocator(loc));
-                }
-	    } catch (RepositoryException e) {
-		// ignore
-                log.error(e.getMessage());
-	    } catch (DavException e) {
-                // should never occur.
-                log.error(e.getMessage());
-            }
-	}
-	return new DavResourceIteratorImpl(memberList);
-    }
-
-    /**
-     * Removes the repository item represented by the specified member
-     * resource.
-     *
-     * @throws DavException if this resource does not exist or if an error occurs
-     * while deleting the underlying item.
-     * @see DavResource#removeMember(DavResource)
-     * @see javax.jcr.Item#remove()
-     */
-    public void removeMember(DavResource member) throws DavException {
-        Session session = getRepositorySession();
-        try {
-            String itemPath = member.getLocator().getJcrPath();
-            if (!exists() || !session.itemExists(itemPath)) {
-                throw new DavException(DavServletResponse.SC_NOT_FOUND);
-            }
-            if (!getResourcePath().equals(Text.getRelativeParent(member.getResourcePath(), 1))) {
-                throw new DavException(DavServletResponse.SC_CONFLICT, member.getResourcePath() + "is not member of this resource (" + getResourcePath() + ")");
-            }
-            getRepositorySession().getItem(itemPath).remove();
-            complete();
-        } catch (RepositoryException e) {
-            log.error("Unexpected error: " + e.getMessage());
-            throw new JcrDavException(e);
-        }
-    }
-
-    /**
-     * @param type
-     * @param scope
-     * @return true if a lock with the specified type and scope is present on
-     * this resource, false otherwise. If retrieving the corresponding information
-     * fails, false is returned.
-     * @see org.apache.jackrabbit.webdav.DavResource#hasLock(org.apache.jackrabbit.webdav.lock.Type, org.apache.jackrabbit.webdav.lock.Scope)
-     */
-    public boolean hasLock(Type type, Scope scope) {
-        if (isLockable(type, scope)) {
-            if (Type.WRITE.equals(type)) {
-                try {
-                    return ((Node) item).isLocked();
-                } catch (RepositoryException e) {
-                    log.error(e.getMessage());
-                }
-            } else {
-                return super.hasLock(type, scope);
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Retrieve the lock with the specified type and scope.
-     *
-     * @param type
-     * @param scope
-     * @return lock with the specified type and scope is present on this
-     * resource or <code>null</code>. NOTE: If retrieving the write lock present
-     * on the underlying repository item fails, <code>null</code> is return.
-     * @see org.apache.jackrabbit.webdav.DavResource#getLock(org.apache.jackrabbit.webdav.lock.Type, org.apache.jackrabbit.webdav.lock.Scope)
-     * @see javax.jcr.Node#getLock() for the write locks.
-     */
-    public ActiveLock getLock(Type type, Scope scope) {
-        ActiveLock lock = null;
-        if (isLockable(type, scope)) {
-            if (Type.WRITE.equals(type)) {
-                try {
-                    if (!exists()) {
-                        log.warn("Unable to retrieve lock: no item found at '" + getResourcePath() + "'");
-                    } else if (((Node) item).isLocked()) {
-                        Lock jcrLock = ((Node) item).getLock();
-                        // TODO: find out whether this lock is session-scoped or not!
-                        lock = new JcrActiveLock(jcrLock);
-                    }
-                } catch (AccessDeniedException e) {
-                    log.error("Error while accessing resource lock: "+e.getMessage());
-                } catch (UnsupportedRepositoryOperationException e) {
-                    log.error("Error while accessing resource lock: "+e.getMessage());
-                } catch (RepositoryException e) {
-                    log.error("Error while accessing resource lock: "+e.getMessage());
-                }
-            } else {
-                lock = super.getLock(type, scope);
-            }
-        }
-        return lock;
-    }
-
-    /**
-     * Creates a lock on this resource by locking the underlying
-     * {@link javax.jcr.Node node}. Except for the {@link org.apache.jackrabbit.webdav.lock.LockInfo#isDeep()} }
-     * all information included in the <code>LockInfo</code> object is ignored.
-     * Lock timeout is defined by JCR implementation.
-     *
-     * @param reqLockInfo
-     * @return lock object representing the lock created on this resource.
-     * @throws org.apache.jackrabbit.webdav.DavException
-     * @see org.apache.jackrabbit.webdav.DavResource#lock(org.apache.jackrabbit.webdav.lock.LockInfo)
-     * @see Node#lock(boolean, boolean)
-     */
-    public ActiveLock lock(LockInfo reqLockInfo) throws DavException {
-
-        if (!isLockable(reqLockInfo.getType(), reqLockInfo.getScope())) {
-            throw new DavException(DavServletResponse.SC_PRECONDITION_FAILED);
-        }
-
-        if (Type.WRITE.equals(reqLockInfo.getType())) {
-            if (!exists()) {
-                log.warn("Cannot create a write lock for non-existing JCR node (" + getResourcePath() + ")");
-                throw new DavException(DavServletResponse.SC_NOT_FOUND);
-            }
-            try {
-                boolean sessionScoped = EXCLUSIVE_SESSION.equals(reqLockInfo.getScope());
-                Lock jcrLock = ((Node)item).lock(reqLockInfo.isDeep(), sessionScoped);
-                return new JcrActiveLock(jcrLock, sessionScoped);
-
-            } catch (RepositoryException e) {
-                // UnsupportedRepositoryOperationException should not occur...
-                throw new JcrDavException(e);
-            }
-        } else {
-            return super.lock(reqLockInfo);
-        }
-    }
-
-    /**
-     * Refreshes the lock on this resource. With this implementation the
-     * {@link javax.jcr.lock lock} present on the underlying {@link javax.jcr.Node node}
-     * is refreshed. The timeout indicated by the <code>LockInfo</code>
-     * object is ignored.
-     *
-     * @param reqLockInfo LockInfo as build from the request.
-     * @param lockToken
-     * @return the updated lock info object.
-     * @throws org.apache.jackrabbit.webdav.DavException in case the lock could not be refreshed.
-     * @see org.apache.jackrabbit.webdav.DavResource#refreshLock(org.apache.jackrabbit.webdav.lock.LockInfo, String)
-     * @see javax.jcr.lock.Lock#refresh()
-     */
-    public ActiveLock refreshLock(LockInfo reqLockInfo, String lockToken)
-            throws DavException {
-
-        if (lockToken == null) {
-            throw new DavException(DavServletResponse.SC_PRECONDITION_FAILED);
-        }
-
-        ActiveLock lock = getLock(reqLockInfo.getType(), reqLockInfo.getScope());
-        if (lock == null) {
-            throw new DavException(DavServletResponse.SC_PRECONDITION_FAILED, "No lock with the given scope/type present on this resource.");
-        }
-
-        if (Type.WRITE.equals(lock.getType())) {
-            try {
-                Lock jcrLock = ((Node) item).getLock();
-                jcrLock.refresh();
-                return new JcrActiveLock(jcrLock, EXCLUSIVE_SESSION.equals(lock.getScope()));
-            } catch (RepositoryException e) {
-                /*
-                  NOTE: LockException is only thrown by Lock.refresh()
-                        the lock exception thrown by Node.getLock() was circumvented
-                        by the init test if there is a lock applied...
-                  NOTE: UnsupportedRepositoryOperationException should not occur
-                */
-                throw new JcrDavException(e);
-            }
-        } else {
-            return super.refreshLock(reqLockInfo, lockToken);
-        }
-    }
-
-    /**
-     * Remove the write lock from this resource by unlocking the underlying
-     * {@link javax.jcr.Node node}.
-     *
-     * @param lockToken
-     * @throws org.apache.jackrabbit.webdav.DavException
-     * @see org.apache.jackrabbit.webdav.DavResource#unlock(String)
-     * @see javax.jcr.Node#unlock()
-     */
-    public void unlock(String lockToken) throws DavException {
-        ActiveLock lock = getWriteLock();
-        if (lock != null && lockToken.equals(lock.getToken())) {
-            try {
-                ((Node) item).unlock();
-            } catch (RepositoryException e) {
-                throw new JcrDavException(e);
-            }
-        } else {
-            super.unlock(lockToken);
-        }
-    }
-
-    /**
-     * Returns the write lock present on this resource or <code>null</code> if
-     * no write lock exists. NOTE: that the scope of a write lock may either
-     * be {@link org.apache.jackrabbit.webdav.lock.Scope#EXCLUSIVE} or {@link #EXCLUSIVE_SESSION}.
-     *
-     * @return write lock or <code>null</code>
-     * @throws DavException if this resource does not represent a repository item.
-     */
-    private ActiveLock getWriteLock() throws DavException {
-        if (!exists()) {
-            throw new DavException(DavServletResponse.SC_NOT_FOUND, "Unable to retrieve write lock for non existing repository item (" + getResourcePath() + ")");
-        }
-        ActiveLock writeLock = getLock(Type.WRITE, Scope.EXCLUSIVE);
-        if (writeLock == null) {
-            writeLock = getLock(Type.WRITE, EXCLUSIVE_SESSION);
-        }
-        return writeLock;
-    }
-
-    //-----------------------------------------< OrderingResource interface >---
-    /**
-     * Returns true if this resource exists and the nodetype defining the
-     * underlying repository node allow to reorder this nodes children.
-     *
-     * @return true if {@link #orderMembers(OrderPatch)} can be called on this
-     * resource.
-     * @see org.apache.jackrabbit.webdav.ordering.OrderingResource#isOrderable()
-     * @see javax.jcr.nodetype.NodeType#hasOrderableChildNodes()
-     */
-    public boolean isOrderable() {
-        boolean orderable = false;
-        if (exists()) {
-            try {
-                orderable = ((Node) item).getPrimaryNodeType().hasOrderableChildNodes();
-            } catch (RepositoryException e) {
-                log.warn(e.getMessage());
-            }
-        }
-        return orderable;
-    }
-
-    /**
-     * Reorder the child nodes of the repository item represented by this
-     * resource as indicated by the specified {@link OrderPatch} object.
-     *
-     * @param orderPatch
-     * @throws org.apache.jackrabbit.webdav.DavException
-     * @see org.apache.jackrabbit.webdav.ordering.OrderingResource#orderMembers(org.apache.jackrabbit.webdav.ordering.OrderPatch)
-     * @see Node#orderBefore(String, String)
-     */
-    public void orderMembers(OrderPatch orderPatch) throws DavException {
-        if (!isOrderable()) {
-            throw new DavException(DavServletResponse.SC_METHOD_NOT_ALLOWED);
-        }
-        // only custom ordering is allowed
-        if (!OrderingConstants.ORDERING_TYPE_CUSTOM.equalsIgnoreCase(orderPatch.getOrderingType())) {
-            throw new DavException(DavServletResponse.SC_UNPROCESSABLE_ENTITY,"Only DAV:custom ordering type supported.");
-        }
-
-        OrderPatch.Member[] instructions = orderPatch.getOrderInstructions();
-        Node n = (Node)item;
-        try {
-            for (int i = 0; i < instructions.length; i++) {
-                String srcRelPath = Text.getName(instructions[i].getMemberHandle());
-                Position pos = instructions[i].getPosition();
-                String destRelPath = getRelDestinationPath(pos, n.getNodes());
-                // preform the reordering
-                n.orderBefore(srcRelPath, destRelPath);
-            }
-        } catch (RepositoryException e) {
-            // UnsupportedRepositoryException should not occur
-            throw new JcrDavException(e);
-        }
-    }
-
-    /**
-     * Retrieve the relative path of the child node that acts as destination.
-     * A <code>null</code> destination path is used to place the child node indicated
-     * by the source path at the end of the list.
-     *
-     * @param position
-     * @param childNodes
-     * @return the relative path of the child node used as destination or <code>null</code>
-     * if the source node should be placed at the last position.
-     * @throws javax.jcr.RepositoryException
-     */
-    private String getRelDestinationPath(Position position, NodeIterator childNodes)
-            throws RepositoryException {
-
-        String destPath = null;
-        if (OrderingConstants.XML_FIRST.equals(position.getType())) {
-            if (childNodes.hasNext()) {
-                Node firstChild = childNodes.nextNode();
-                destPath = firstChild.getPath();
-            }
-            // no child nodes available > reordering to 'first' position fails.
-            if (destPath == null) {
-                throw new ItemNotFoundException("No 'first' item found for reordering.");
-            }
-        } else if (OrderingConstants.XML_AFTER.equals(position.getType())) {
-            String afterRelPath = Text.getName(position.getSegment());
-            boolean found = false;
-            // jcr only knows order-before > retrieve the node that follows the
-            // one incidated by the 'afterRelPath'.
-            while (childNodes.hasNext() && destPath == null) {
-                String childPath = childNodes.nextNode().getPath();
-                if (found) {
-                    destPath = childPath;
-                } else {
-                    found = afterRelPath.equals(Text.getName(childPath));
-                }
-            }
-        } else {
-            destPath = position.getSegment();
-        }
-
-        return (destPath != null) ? Text.getName(destPath) : destPath;
-    }
-
-    //--------------------------------------------------------------------------
-    /**
-     * Extend the general {@link #supportedLock} field by lock entries specific for this
-     * resource: write locks (exclusive or exclusive session-scoped) in case the underlying
-     * node has the node type mix:lockable.
-     *
-     * @see org.apache.jackrabbit.JcrConstants#MIX_LOCKABLE
-     */
-    protected void initLockSupport() {
-        super.initLockSupport();
-        // add exclusive write lock if allowed for the given node
-        try {
-            if (exists() && ((Node)item).isNodeType(JcrConstants.MIX_LOCKABLE)) {
-                supportedLock.addEntry(Type.WRITE, Scope.EXCLUSIVE);
-                // TODO: do session-scoped lock properly (including session caching and proper scope discovery)
-                //supportedLock.addEntry(new SessionScopedLockEntry());
-            }
-        } catch (RepositoryException e) {
-            log.warn(e.getMessage());
-        }
-    }
-
-    /**
-     * Defines the additional reports supported by this resource (reports
-     * specific for resources representing a repository {@link Node node}):
-     * <ul>
-     * <li>{@link ExportViewReport export view report}</li>
-     * <li>{@link LocateCorrespondingNodeReport locate corresponding node report}</li>
-     * </ul>
-     * 
-     * @see org.apache.jackrabbit.webdav.version.report.SupportedReportSetProperty
-     */
-    protected void initSupportedReports() {
-        super.initSupportedReports();
-        if (exists()) {
-            supportedReports.addReportType(ExportViewReport.EXPORTVIEW_REPORT);
-            supportedReports.addReportType(LocateCorrespondingNodeReport.LOCATE_CORRESPONDING_NODE_REPORT);
-        }
-    }
-
-    /**
-     * Fill the property set for this resource.
-     */
-    protected void initProperties() {
-        super.initProperties();
-        if (exists()) {
-            try {
-                String prefix = "_tmp_" + item.getName();
-                // create tmpFile in default system-tmp directory
-                content = File.createTempFile(prefix, null, null);
-                content.deleteOnExit();
-                FileOutputStream out = new FileOutputStream(content);
-                getSession().getRepositorySession().exportSystemView(item.getPath(), out, false, true);
-                out.close();
-                properties.add(new DefaultDavProperty(DavPropertyName.GETCONTENTLENGTH, new Long(content.length())));
-                properties.add(new DefaultDavProperty(DavPropertyName.GETCONTENTTYPE, "text/xml"));
-
-            } catch (IOException e) {
-                log.error("Error while property initialization: "+e.getMessage());
-            } catch (RepositoryException e) {
-                log.error("Error while property initialization: "+e.getMessage());
-            }
-
-            Node n = (Node)item;
-            // overwrite the default modificationtime if possible
-            try {
-		if (n.hasProperty(JcrConstants.JCR_LASTMODIFIED)) {
-                    setModificationTime(n.getProperty(JcrConstants.JCR_LASTMODIFIED).getLong());
-		}
-	    } catch (RepositoryException e) {
-		log.warn("Error while accessing jcr:lastModified property");
-	    }
-            // overwrite the default creation date if possible
-            try {
-                if (n.hasProperty(JcrConstants.JCR_CREATED)) {
-                    long creationTime = n.getProperty(JcrConstants.JCR_CREATED).getValue().getLong();
-                    properties.add(new DefaultDavProperty(DavPropertyName.CREATIONDATE,
-                            DavConstants.creationDateFormat.format(new Date(creationTime))));
-                }
-            } catch (RepositoryException e) {
-                log.warn("Error while accessing jcr:created property");
-            }
-
-            // add node-specific resource properties
-	    try {
-                properties.add(new NodeTypeProperty(JCR_PRIMARYNODETYPE, n.getPrimaryNodeType(), false));
-                properties.add(new NodeTypeProperty(JCR_MIXINNODETYPES, n.getMixinNodeTypes(), false));
-                properties.add(new DefaultDavProperty(JCR_INDEX, new Integer(n.getIndex()), true));
-                addHrefProperty(JCR_REFERENCES, n.getReferences(), true);
-                if (n.isNodeType(JcrConstants.MIX_REFERENCEABLE)) {
-                    properties.add(new DefaultDavProperty(JCR_UUID, n.getUUID(), true));
-                }
-            } catch (RepositoryException e) {
-                log.error("Failed to retrieve primary nodetype property: " + e.getMessage());
-            }
-            try {
-                Item primaryItem = n.getPrimaryItem();
-                addHrefProperty(JCR_PRIMARYITEM, new Item[] {primaryItem}, true);
-            } catch (ItemNotFoundException e) {
-                log.info("No primary item present on this node '" + getResourcePath() + "'");
-            } catch (RepositoryException e) {
-                log.error("Error while retrieving primary item: " + e.getMessage());
-            }
-
-            // property defined by RFC 3648: this resource always has custom ordering!
-            if (isOrderable()) {
-                properties.add(new OrderingType(OrderingConstants.ORDERING_TYPE_CUSTOM));
-            }
-        }
-    }
-
-    /**
-     * Add a {@link org.apache.jackrabbit.webdav.property.HrefProperty} with the
-     * specified property name and values. Each item present in the specified
-     * values array is referenced in the resulting property.
-     *
-     * @param name
-     * @param values
-     * @param isProtected
-     */
-    protected void addHrefProperty(DavPropertyName name, Item[] values, boolean isProtected) {
-        if (values == null) {
-            return;
-        }
-        String[] pHref = new String[values.length];
-        for (int i = 0; i < values.length; i++) {
-            pHref[i] = getLocatorFromItem(values[i]).getHref(true);
-        }
-        properties.add(new HrefProperty(name, pHref, isProtected));
-    }
-
-    /**
-     * Add a new {@link HrefProperty href property} to the property set, where
-     * all items present in the specifed iterator are referenced in the
-     * resulting property.
-     *
-     * @param name
-     * @param itemIterator
-     * @param isProtected
-     * @see #addHrefProperty(DavPropertyName, Item[], boolean)
-     */
-    protected void addHrefProperty(DavPropertyName name, Iterator itemIterator,
-                                   boolean isProtected) {
-        ArrayList l = new ArrayList();
-        while (itemIterator.hasNext()) {
-            l.add(itemIterator.next());
-        }
-        addHrefProperty(name, (Item[]) l.toArray(new Item[l.size()]), isProtected);
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/DefaultItemResource.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/DefaultItemResource.java
deleted file mode 100644
index 03bd4c3..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/DefaultItemResource.java
+++ /dev/null
@@ -1,308 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.jcr;
-
-import org.apache.jackrabbit.value.ValueHelper;
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavResource;
-import org.apache.jackrabbit.webdav.DavResourceFactory;
-import org.apache.jackrabbit.webdav.DavResourceIterator;
-import org.apache.jackrabbit.webdav.DavResourceIteratorImpl;
-import org.apache.jackrabbit.webdav.DavResourceLocator;
-import org.apache.jackrabbit.webdav.DavServletResponse;
-import org.apache.jackrabbit.webdav.DavSession;
-import org.apache.jackrabbit.webdav.MultiStatusResponse;
-import org.apache.jackrabbit.webdav.io.InputContext;
-import org.apache.jackrabbit.webdav.jcr.property.LengthsProperty;
-import org.apache.jackrabbit.webdav.jcr.property.ValuesProperty;
-import org.apache.jackrabbit.webdav.lock.ActiveLock;
-import org.apache.jackrabbit.webdav.lock.Scope;
-import org.apache.jackrabbit.webdav.lock.Type;
-import org.apache.jackrabbit.webdav.property.DavProperty;
-import org.apache.jackrabbit.webdav.property.DavPropertyIterator;
-import org.apache.jackrabbit.webdav.property.DavPropertyName;
-import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
-import org.apache.jackrabbit.webdav.property.DavPropertySet;
-import org.apache.jackrabbit.webdav.property.DefaultDavProperty;
-import org.apache.log4j.Logger;
-
-import javax.jcr.Item;
-import javax.jcr.Property;
-import javax.jcr.PropertyType;
-import javax.jcr.RepositoryException;
-import javax.jcr.Value;
-import javax.jcr.ValueFormatException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Iterator;
-
-/**
- * <code>DefaultItemResource</code> represents JCR property item.
- *
- * @see Property
- */
-public class DefaultItemResource extends AbstractItemResource {
-
-    private static Logger log = Logger.getLogger(DefaultItemResource.class);
-
-    /**
-     * Create a new <code>DefaultItemResource</code>.
-     *
-     * @param locator
-     * @param session
-     */
-    public DefaultItemResource(DavResourceLocator locator, DavSession session,
-                               DavResourceFactory factory, Item item) {
-        super(locator, session, factory, item);
-    }
-
-    //----------------------------------------------< DavResource interface >---
-    /**
-     * Returns false.
-     *
-     * @return false
-     * @see DavResource#isCollection()
-     */
-    public boolean isCollection() {
-        return false;
-    }
-
-    /**
-     * In case an underlying repository {@link Property property} exists the following
-     * logic is applyed to obtain the stream:<ul>
-     * <li>Property is not multivalue: Return the {@link javax.jcr.Value#getStream()
-     * stream representation} of the property value.</li>
-     * <li>Property is multivalue: Return stream that provides the system view of
-     * that item.</li>
-     * </ul>
-     *
-     * @return
-     */
-    InputStream getStream() {
-        InputStream in = null;
-        if (exists()) {
-            try {
-                // NOTE: stream cannot be obtained for multivalue properties
-                if (!isMultiple()) {
-                    in = ((Property)item).getStream();
-                }
-            } catch (ValueFormatException e) {
-                // should not occur
-                log.error("Cannot obtain stream from resource: " + e.getMessage());
-            } catch (RepositoryException e) {
-                log.error("Cannot obtain stream from resource: " + e.getMessage());
-            }
-        }
-        return in;
-    }
-
-    /**
-     * Sets the given property. Note, that {@link #JCR_VALUE} and {@link #JCR_VALUES}
-     * are the only resource properties that are allowed to be modified. Any other
-     * property is read-only and will throw an exception ('Conflict').
-     *
-     * @param property
-     * @throws DavException
-     * @see DavResource#setProperty(org.apache.jackrabbit.webdav.property.DavProperty)
-     */
-    public void setProperty(DavProperty property) throws DavException {
-        internalSetProperty(property);
-        complete();
-    }
-
-    /**
-     * Internal method that performs the setting or adding of properties
-     *
-     * @param property
-     * @throws DavException
-     * @see #setProperty(DavProperty)
-     * @see #alterProperties(DavPropertySet, DavPropertyNameSet)
-     */
-    private void internalSetProperty(DavProperty property) throws DavException {
-        if (!exists()) {
-            throw new DavException(DavServletResponse.SC_NOT_FOUND);
-        }
-        try {
-            Property prop = (Property) item;
-            int type = prop.getType();
-            if (property.getName().equals(JCR_VALUE)) {
-                String strVal = (property.getValue() != null) ? String.valueOf(property.getValue()) : "";
-                Value val = ValueHelper.deserialize(strVal, type, false);
-                prop.setValue(val);
-            } else if (property.getName().equals(JCR_VALUES)) {
-                prop.setValue(new ValuesProperty(property).getValues(prop.getType()));
-            } else {
-                throw new DavException(DavServletResponse.SC_CONFLICT);
-            }
-        } catch (IllegalArgumentException e) {
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST, e.getMessage());
-        } catch (RepositoryException e) {
-            throw new JcrDavException(e);
-        }
-    }
-
-    /**
-     * Removing properties is not allowed, for a single-value JCR-property without
-     * a value does not exist. For multivalue properties an empty {@link Value values array}
-     * may be specified with by setting the {@link #JCR_VALUES 'values' webdav property}.
-     *
-     * @param propertyName
-     * @throws DavException
-     * @see org.apache.jackrabbit.webdav.DavResource#removeProperty(org.apache.jackrabbit.webdav.property.DavPropertyName)
-     */
-    public void removeProperty(DavPropertyName propertyName) throws DavException {
-        if (!exists()) {
-            throw new DavException(DavServletResponse.SC_NOT_FOUND);
-        }
-        throw new DavException(DavServletResponse.SC_FORBIDDEN);
-    }
-
-    /**
-     * Loops over the given <code>Set</code>s and alters the properties accordingly.
-     * Changes are persisted at the end only according to the rules defined with
-     * the {@link #complete()} method.<p>
-     * Please note: since there is only a single property than can be set
-     * from a client (i.e. jcr:value OR jcr:values) this method either succeeds
-     * or throws an exception, even if this violates RFC 2518.
-     *
-     * @param setProperties
-     * @param removePropertyNames
-     * @throws DavException
-     * @see DavResource#alterProperties(DavPropertySet, DavPropertyNameSet)
-     */
-    public MultiStatusResponse alterProperties(DavPropertySet setProperties,
-                                DavPropertyNameSet removePropertyNames)
-        throws DavException {
-
-        // altering any properties fails if an attempt is made to remove a property
-        if (removePropertyNames != null && !removePropertyNames.isEmpty()) {
-            Iterator it = removePropertyNames.iterator();
-            while (it.hasNext()) {
-                throw new DavException(DavServletResponse.SC_FORBIDDEN);
-            }
-        }
-
-        // only set/add >> existance of resource is checked inside internal method
-        DavPropertyIterator setIter = setProperties.iterator();
-        while (setIter.hasNext()) {
-            DavProperty prop = setIter.nextProperty();
-            internalSetProperty(prop);
-        }
-        complete();
-        return new MultiStatusResponse(getHref(), DavServletResponse.SC_OK);
-    }
-
-    /**
-     * Method is not allowed.
-     *
-     * @see org.apache.jackrabbit.webdav.DavResource#addMember(org.apache.jackrabbit.webdav.DavResource, InputContext)
-     */
-    public void addMember(DavResource resource, InputContext inputContext) throws DavException {
-        throw new DavException(DavServletResponse.SC_METHOD_NOT_ALLOWED, "Cannot add members to a non-collection resource");
-    }
-
-    /**
-     * Always returns an empty iterator for a non-collection resource might
-     * not have internal members.
-     *
-     * @return an empty iterator
-     * @see DavResource#getMembers()
-     */
-    public DavResourceIterator getMembers() {
-        log.warn("A non-collection resource never has internal members.");
-        return new DavResourceIteratorImpl(new ArrayList(0));
-    }
-
-    /**
-     * Method is not allowed.
-     *
-     * @see DavResource#removeMember(DavResource)
-     */
-    public void removeMember(DavResource member) throws DavException {
-        throw new DavException(DavServletResponse.SC_METHOD_NOT_ALLOWED, "Cannot remove members from a non-collection resource");
-    }
-
-    /**
-     * {@link javax.jcr.Property JCR properties} are locked if their
-     * parent node is locked; thus this method will always return the
-     * {@link ActiveLock lock} object from the collection this resource is
-     * internal member of.
-     *
-     * @param type
-     * @param scope
-     * @return lock present on this resource or <code>null</code> if this resource
-     * has no lock.
-     * @see DavResource#getLock(Type, Scope)
-     */
-    public ActiveLock getLock(Type type, Scope scope) {
-        if (Type.WRITE.equals(type)) {
-            return getCollection().getLock(type, scope);
-        } else {
-            return super.getLock(type, scope);
-        }
-    }
-
-    //--------------------------------------------------------------------------
-    /**
-     * Add resource specific properties.
-     */
-    protected void initProperties() {
-        super.initProperties();
-        if (exists()) {
-            try {
-                Property prop = (Property)item;
-                int type = prop.getType();
-
-                // set the content type
-                String contentType;
-                if (!isMultiple()) {
-                    contentType = (type == PropertyType.BINARY) ? "application/octet-stream" : "text/plain";
-                    properties.add(new DefaultDavProperty(DavPropertyName.GETCONTENTTYPE, contentType));
-                } // else: no contenttype for multivalue properties
-
-                // add jcr-specific resource properties
-                properties.add(new DefaultDavProperty(JCR_TYPE, PropertyType.nameFromValue(type)));
-                if (isMultiple()) {
-                    properties.add(new ValuesProperty(prop.getValues()));
-                    properties.add(new LengthsProperty(prop.getLengths()));
-                } else {
-                    properties.add(new DefaultDavProperty(JCR_VALUE, ValueHelper.serialize(prop.getValue(), false)));
-                    properties.add(new DefaultDavProperty(JCR_LENGTH, String.valueOf(prop.getLength()), true));
-                }
-            } catch (RepositoryException e) {
-                log.error("Failed to retrieve resource properties: "+e.getMessage());
-            }
-        }
-    }
-
-    /**
-     * Returns true if the JCR Property represented by this resource is a multi
-     * value property. Note: if this resource does not exist or if the definition
-     * could not be retrieved false is returned.
-     *
-     * @return true if the underlying resource is a multi value property.
-     */
-    private boolean isMultiple() {
-        try {
-            if (exists() && ((Property)item).getDefinition().isMultiple()) {
-                return true;
-            }
-        } catch (RepositoryException e) {
-            log.error("Error while retrieving property definition: " + e.getMessage());
-        }
-        return false;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/ItemResourceConstants.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/ItemResourceConstants.java
deleted file mode 100644
index f46fb4e..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/ItemResourceConstants.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.jcr;
-
-import org.apache.jackrabbit.webdav.property.DavPropertyName;
-import org.apache.jackrabbit.webdav.DavResource;
-import org.apache.jackrabbit.webdav.xml.Namespace;
-import org.apache.jackrabbit.webdav.version.DeltaVResource;
-import org.apache.jackrabbit.webdav.lock.Scope;
-import org.apache.jackrabbit.webdav.search.SearchResource;
-import org.apache.jackrabbit.webdav.observation.ObservationResource;
-
-/**
- * <code>ItemResourceConstants</code> provides constants for any resources
- * representing repository items.
- */
-public interface ItemResourceConstants {
-
-    /**
-     * Complience classes common to all item resources.
-     */
-    public static final String COMPLIANCE_CLASS = DavResource.COMPLIANCE_CLASS + ", " +ObservationResource.COMPLIANCE_CLASS + ", " + DeltaVResource.COMPLIANCE_CLASS;
-
-    /**
-     * Methods common to all item resources.
-     */
-    public static final String METHODS = DavResource.METHODS + ", " + ObservationResource.METHODS + ", " + SearchResource.METHODS + ", " +DeltaVResource.METHODS;
-
-    /**
-     * The resource path of the root-item-resource.
-     */
-    public static final String ROOT_ITEM_PATH = "/";
-
-    /**
-     * The version storage item resource path.
-     */
-    public static final String VERSIONSTORAGE_PATH = "/jcr:system/jcr:versionStorage";
-
-    /**
-     * The namespace for all jcr specific extensions.
-     */
-    public static final Namespace NAMESPACE = Namespace.getNamespace("dcr", "http://www.day.com/jcr/webdav/1.0");
-
-    // xml element names
-    public static final String XML_PRIMARYNODETYPE = "primarynodetype";
-    public static final String XML_VALUE = "value";
-    public static final String XML_LENGTH = "length";
-    public static final String XML_EXCLUSIVE_SESSION_SCOPED = "exclusive-session-scoped";
-
-    // xml elements used to reflect the workspaces ns-registry
-    // TODO: to be reviewed...
-    public static final String XML_NAMESPACE = "namespace";
-    public static final String XML_PREFIX = "prefix";
-    public static final String XML_URI = "uri";
-
-    // xml elements used for repository-descritors report
-    public static final String XML_DESCRIPTOR = "descriptor";
-    public static final String XML_DESCRIPTORKEY = "descriptorkey";
-    public static final String XML_DESCRIPTORVALUE = "descriptorvalue";
-
-    /**
-     * Extension to the WebDAV 'exclusive' lock, that allows to distinguish
-     * the session-scoped and open-scoped locks on a JCR node.
-     *
-     * @see javax.jcr.Node#lock(boolean, boolean)
-     */
-    public static final Scope EXCLUSIVE_SESSION = Scope.create(XML_EXCLUSIVE_SESSION_SCOPED, NAMESPACE);
-
-    /**
-     * The 'removeexisting' element is not defined by RFC 3253. If it is present
-     * in the UPDATE request body, uuid conflicts should be solved by removing
-     * the existing nodes.
-     *
-     * @see javax.jcr.Node#restore(javax.jcr.version.Version, boolean)
-     * @see javax.jcr.Workspace#restore(javax.jcr.version.Version[], boolean)
-     * @see org.apache.jackrabbit.webdav.version.UpdateInfo
-     */
-    public static final String XML_REMOVEEXISTING = "removeexisting";
-
-    /**
-     * The 'relpath' element is not defined by RFC 3253. If it is present
-     * in the UPDATE request body, the server is forced to used the text contained
-     * as 'relPath' argument for the {@link javax.jcr.Node#restore(javax.jcr.version.Version, String, boolean)
-     * Node.restore} call.
-     *
-     * @see javax.jcr.Node#restore(javax.jcr.version.Version, String, boolean)
-     * @see org.apache.jackrabbit.webdav.version.UpdateInfo
-     */
-    public static final String XML_RELPATH = "relpath";
-
-    // general property names
-    public static final DavPropertyName JCR_NAME = DavPropertyName.create("name", NAMESPACE);
-    public static final DavPropertyName JCR_PATH = DavPropertyName.create("path", NAMESPACE);
-    public static final DavPropertyName JCR_DEPTH = DavPropertyName.create("depth", NAMESPACE);
-    public static final DavPropertyName JCR_PARENT = DavPropertyName.create("parent", NAMESPACE);
-    public static final DavPropertyName JCR_ISNEW = DavPropertyName.create("isnew", NAMESPACE);
-    public static final DavPropertyName JCR_ISMODIFIED = DavPropertyName.create("ismodified", NAMESPACE);
-
-    // property names used for resources representing jcr-nodes
-    public static final DavPropertyName JCR_PRIMARYNODETYPE = DavPropertyName.create(XML_PRIMARYNODETYPE, NAMESPACE);
-    public static final DavPropertyName JCR_MIXINNODETYPES = DavPropertyName.create("mixinnodetypes", NAMESPACE);
-    public static final DavPropertyName JCR_INDEX = DavPropertyName.create("index", NAMESPACE);
-    public static final DavPropertyName JCR_REFERENCES = DavPropertyName.create("references", NAMESPACE);
-    public static final DavPropertyName JCR_UUID = DavPropertyName.create("uuid", NAMESPACE);
-    public static final DavPropertyName JCR_PRIMARYITEM = DavPropertyName.create("primaryitem", NAMESPACE);
-
-    // property names used for resources representing jcr-properties
-    public static final DavPropertyName JCR_TYPE = DavPropertyName.create("type", NAMESPACE);
-    public static final DavPropertyName JCR_VALUE = DavPropertyName.create("value", NAMESPACE);
-    public static final DavPropertyName JCR_VALUES = DavPropertyName.create("values", NAMESPACE);
-    public static final DavPropertyName JCR_LENGTH = DavPropertyName.create("length", NAMESPACE);
-    public static final DavPropertyName JCR_LENGTHS = DavPropertyName.create("lengths", NAMESPACE);
-
-    // property names used for resource representing a workspace
-    public static final DavPropertyName JCR_NAMESPACES = DavPropertyName.create("namespaces", NAMESPACE);
-
-    // property names used for resource representing a version hisotry
-    public static final DavPropertyName JCR_VERSIONABLEUUID = DavPropertyName.create("versionableuuid", NAMESPACE);
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/JcrDavException.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/JcrDavException.java
deleted file mode 100644
index 0641573..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/JcrDavException.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.jcr;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavServletResponse;
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-import javax.jcr.query.InvalidQueryException;
-import javax.jcr.lock.LockException;
-import javax.jcr.version.VersionException;
-import javax.jcr.AccessDeniedException;
-import javax.jcr.InvalidItemStateException;
-import javax.jcr.InvalidSerializedDataException;
-import javax.jcr.ItemExistsException;
-import javax.jcr.ItemNotFoundException;
-import javax.jcr.MergeException;
-import javax.jcr.NamespaceException;
-import javax.jcr.RepositoryException;
-import javax.jcr.ReferentialIntegrityException;
-import javax.jcr.NoSuchWorkspaceException;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.LoginException;
-import javax.jcr.UnsupportedRepositoryOperationException;
-import javax.jcr.ValueFormatException;
-import javax.jcr.nodetype.ConstraintViolationException;
-import javax.jcr.nodetype.NoSuchNodeTypeException;
-import java.util.HashMap;
-
-/**
- * <code>JcrDavException</code> extends the {@link DavException} in order to
- * wrap various repository exceptions.
- */
-public class JcrDavException extends DavException {
-
-    private static Logger log = Logger.getLogger(JcrDavException.class);
-
-    // mapping of Jcr exceptions to error codes.
-    private static HashMap codeMap = new HashMap();
-    static {
-        codeMap.put(AccessDeniedException.class, new Integer(DavServletResponse.SC_FORBIDDEN));
-        codeMap.put(ConstraintViolationException.class, new Integer(DavServletResponse.SC_CONFLICT));
-        codeMap.put(InvalidItemStateException.class, new Integer(DavServletResponse.SC_CONFLICT));
-        codeMap.put(InvalidSerializedDataException.class, new Integer(DavServletResponse.SC_BAD_REQUEST));
-        codeMap.put(InvalidQueryException.class, new Integer(DavServletResponse.SC_BAD_REQUEST));
-        codeMap.put(ItemExistsException.class, new Integer(DavServletResponse.SC_CONFLICT));
-        codeMap.put(ItemNotFoundException.class, new Integer(DavServletResponse.SC_FORBIDDEN));
-        codeMap.put(LockException.class, new Integer(DavServletResponse.SC_LOCKED));
-        codeMap.put(MergeException.class, new Integer(DavServletResponse.SC_CONFLICT));
-        codeMap.put(NamespaceException.class, new Integer(DavServletResponse.SC_CONFLICT));
-        codeMap.put(NoSuchNodeTypeException.class, new Integer(DavServletResponse.SC_CONFLICT));
-        codeMap.put(NoSuchWorkspaceException.class, new Integer(DavServletResponse.SC_CONFLICT));
-        codeMap.put(PathNotFoundException.class, new Integer(DavServletResponse.SC_CONFLICT));
-        codeMap.put(ReferentialIntegrityException.class, new Integer(DavServletResponse.SC_CONFLICT));
-        codeMap.put(RepositoryException.class, new Integer(DavServletResponse.SC_FORBIDDEN));
-        codeMap.put(LoginException.class, new Integer(DavServletResponse.SC_UNAUTHORIZED));
-        codeMap.put(UnsupportedRepositoryOperationException.class, new Integer(DavServletResponse.SC_NOT_IMPLEMENTED));
-        codeMap.put(ValueFormatException.class, new Integer(DavServletResponse.SC_CONFLICT));
-        codeMap.put(VersionException.class, new Integer(DavServletResponse.SC_CONFLICT));
-    }
-
-    private Class exceptionClass;
-
-    public JcrDavException(Exception e, int errorCode) {
-        super(errorCode, e.getMessage());
-        exceptionClass = e.getClass();
-        if (log.isDebugEnabled()) {
-            log.debug("Handling exception with error code " + errorCode, e);
-        }
-    }
-
-    public JcrDavException(RepositoryException e) {
-        this(e, ((Integer)codeMap.get(e.getClass())).intValue());
-    }
-
-    /**
-     * @return true
-     */
-    public boolean hasErrorCondition() {
-        return true;
-    }
-
-    /**
-     * Returns a DAV:error Xml element containing the exceptions class and the
-     * message as child elements.
-     *
-     * @return Xml representation of this exception.
-     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
-     * @param document
-     */
-    public Element toXml(Document document) {
-        Element error = DomUtil.createElement(document, XML_ERROR, DavConstants.NAMESPACE);
-        Element excep = DomUtil.createElement(document, "exception", ItemResourceConstants.NAMESPACE);
-        DomUtil.addChildElement(excep, "class", ItemResourceConstants.NAMESPACE, exceptionClass.getName());
-        DomUtil.addChildElement(excep, "message", ItemResourceConstants.NAMESPACE, getMessage());
-        error.appendChild(excep);
-        return error;
-    }
-
-}
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/RootCollection.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/RootCollection.java
deleted file mode 100644
index f34a8cd..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/RootCollection.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.jcr;
-
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavResource;
-import org.apache.jackrabbit.webdav.DavResourceFactory;
-import org.apache.jackrabbit.webdav.DavResourceIterator;
-import org.apache.jackrabbit.webdav.DavResourceIteratorImpl;
-import org.apache.jackrabbit.webdav.DavResourceLocator;
-import org.apache.jackrabbit.webdav.DavServletResponse;
-import org.apache.jackrabbit.webdav.DavSession;
-import org.apache.jackrabbit.webdav.io.InputContext;
-import org.apache.jackrabbit.webdav.jcr.version.report.NodeTypesReport;
-import org.apache.jackrabbit.webdav.jcr.version.report.RegisteredNamespacesReport;
-import org.apache.jackrabbit.webdav.jcr.version.report.RepositoryDescriptorsReport;
-import org.apache.jackrabbit.webdav.version.report.ReportType;
-import org.apache.jackrabbit.webdav.version.report.SupportedReportSetProperty;
-import org.apache.log4j.Logger;
-
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-/**
- * <code>RootCollection</code> represent the WebDAV root resource that does not
- * represent any repository item. A call to getMembers() returns a
- * <code>DavResourceIterator</code> containing only <code>RootItemCollection</code>
- * resources, thus revealing the names of the accessable workspaces.
- */
-public class RootCollection extends AbstractResource implements DavResource {
-
-    private static Logger log = Logger.getLogger(RootCollection.class);
-
-    /**
-     * Create a new <code>RootCollection</code>.
-     *
-     * @param locator
-     * @param session
-     */
-    protected RootCollection(DavResourceLocator locator, DavSession session, DavResourceFactory factory) {
-        super(locator, session, factory);
-        setModificationTime(new Date().getTime());
-
-        // initialize the supported locks and reports
-        initLockSupport();
-        initSupportedReports();
-    }
-
-    /**
-     * Returns a string listing the complieance classes for this resource as it
-     * is required for the DAV response header.
-     *
-     * @return string listing the compliance classes.
-     * @see org.apache.jackrabbit.webdav.DavResource#getComplianceClass()
-     */
-    public String getComplianceClass() {
-        return DavResource.COMPLIANCE_CLASS;
-    }
-
-    /**
-     * Returns a string listing the METHODS for this resource as it
-     * is required for the "Allow" response header.
-     *
-     * @return string listing the METHODS allowed
-     * @see org.apache.jackrabbit.webdav.DavResource#getSupportedMethods()
-     */
-    public String getSupportedMethods() {
-        StringBuffer sb = new StringBuffer(DavResource.METHODS);
-        return sb.toString();
-    }
-
-    /**
-     * Returns true
-     *
-     * @return true
-     * @see org.apache.jackrabbit.webdav.DavResource#exists()
-     */
-    public boolean exists() {
-        return true;
-    }
-
-    /**
-     * Returns true
-     *
-     * @return true
-     * @see org.apache.jackrabbit.webdav.DavResource#isCollection()
-     */
-    public boolean isCollection() {
-        return true;
-    }
-
-    /**
-     * Returns an empty string.
-     *
-     * @return empty string
-     * @see org.apache.jackrabbit.webdav.DavResource#getDisplayName()
-     */
-    public String getDisplayName() {
-        return "";
-    }
-
-    /**
-     * Always returns <code>null</code>
-     *
-     * @return <code>null</code> for the root resource is not internal member
-     * of any resource.
-     * @see org.apache.jackrabbit.webdav.DavResource#getCollection()
-     */
-    public DavResource getCollection() {
-        return null;
-    }
-
-    /**
-     * Throws exception: 403 Forbidden.
-     * @see DavResource#addMember(DavResource, InputContext)
-     */
-    public void addMember(DavResource resource, InputContext inputContext) throws DavException {
-        throw new DavException(DavServletResponse.SC_FORBIDDEN);
-    }
-
-    /**
-     * Returns an iterator over the member resources, which are all
-     * <code>RootItemCollection</code> resources, revealing
-     * the names of all available workspaces.
-     *
-     * @return members of this collection
-     * @see org.apache.jackrabbit.webdav.DavResource#getMembers()
-     */
-    public DavResourceIterator getMembers() {
-        List memberList = new ArrayList();
-        try {
-            String[] wsNames = getSession().getRepositorySession().getWorkspace().getAccessibleWorkspaceNames();
-            for (int i = 0; i < wsNames.length; i++) {
-                DavResourceLocator childLoc = getLocator().getFactory().createResourceLocator(getLocator().getPrefix(), "/"+wsNames[i], ItemResourceConstants.ROOT_ITEM_PATH);
-                memberList.add(createResourceFromLocator(childLoc));
-            }
-        } catch (RepositoryException e) {
-            log.error(e.getMessage());
-        } catch (DavException e) {
-            // should never occur
-            log.error(e.getMessage());
-        }
-        return new DavResourceIteratorImpl(memberList);
-    }
-
-    /**
-     * Throws exception: 403 Forbidden.
-     * @see DavResource#removeMember(org.apache.jackrabbit.webdav.DavResource)
-     */
-    public void removeMember(DavResource member) throws DavException {
-        throw new DavException(DavServletResponse.SC_FORBIDDEN);
-    }
-
-    //--------------------------------------------------------------------------
-    /**
-     * @see AbstractResource#initLockSupport()
-     */
-    protected void initLockSupport() {
-        // no locking supported
-    }
-
-    /**
-     * @see AbstractResource#initSupportedReports()
-     */
-    protected void initSupportedReports() {
-        supportedReports = new SupportedReportSetProperty(new ReportType[] {
-            ReportType.EXPAND_PROPERTY,
-            NodeTypesReport.NODETYPES_REPORT,
-            RegisteredNamespacesReport.REGISTERED_NAMESPACES_REPORT,
-            RepositoryDescriptorsReport.REPOSITORY_DESCRIPTORS_REPORT
-        });
-    }
-
-    /**
-     * Since the root resource does not represent a repository item and therefore
-     * is not member of a workspace resource, the workspace href is calculated
-     * from the workspace name retrieved from the underlying repository session.
-     *
-     * @return workspace href build from workspace name.
-     * @see AbstractResource#getWorkspaceHref()
-     */
-    protected String getWorkspaceHref() {
-        Session session = getRepositorySession();
-        if (session != null) {
-            String workspaceName = session.getWorkspace().getName();
-            DavResourceLocator loc = getLocator().getFactory().createResourceLocator(getLocator().getPrefix(), "/"+workspaceName, ItemResourceConstants.ROOT_ITEM_PATH);
-            return loc.getHref(true);
-        }
-        return null;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/RootItemCollection.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/RootItemCollection.java
deleted file mode 100644
index dc8cae2..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/RootItemCollection.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.jcr;
-
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavResource;
-import org.apache.jackrabbit.webdav.DavResourceFactory;
-import org.apache.jackrabbit.webdav.DavResourceLocator;
-import org.apache.jackrabbit.webdav.DavSession;
-import org.apache.jackrabbit.webdav.MultiStatusResponse;
-import org.apache.jackrabbit.webdav.jcr.property.NamespacesProperty;
-import org.apache.jackrabbit.webdav.property.DavProperty;
-import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
-import org.apache.jackrabbit.webdav.property.DavPropertySet;
-import org.apache.log4j.Logger;
-
-import javax.jcr.Item;
-import javax.jcr.NamespaceRegistry;
-import javax.jcr.RepositoryException;
-import java.util.Iterator;
-import java.util.Properties;
-
-/**
- * <code>RootItemCollection</code> represents the root node of the underlying
- * repository. However, the display name the name of the workspace is returned
- * the root node is located.
- *
- * @todo currently the jcr root node is the same for all workspace resources... this is wrong...
- */
-public class RootItemCollection extends VersionControlledItemCollection {
-
-    private static Logger log = Logger.getLogger(RootItemCollection.class);
-
-    /**
-     * Create a new <code>RootItemCollection</code>.
-     *
-     * @param locator
-     * @param session
-     */
-    protected RootItemCollection(DavResourceLocator locator, DavSession session,
-                                 DavResourceFactory factory, Item item) {
-        super(locator, session, factory, item);
-    }
-
-    //----------------------------------------------< DavResource interface >---
-    /**
-     * Returns the name of the workspace the underlying root item forms part of.
-     *
-     * @return The workspace name
-     * @see org.apache.jackrabbit.webdav.DavResource#getDisplayName()
-     * @see javax.jcr.Workspace#getName()
-     */
-    public String getDisplayName() {
-        return getLocator().getWorkspaceName();
-    }
-
-    /**
-     * Retrieve the collection that has all root item / workspace collections
-     * as internal members.
-     *
-     * @see org.apache.jackrabbit.webdav.DavResource#getCollection()
-     */
-    public DavResource getCollection() {
-        DavResource collection = null;
-        // create location with 'null' values for workspace-path and resource-path
-        DavResourceLocator parentLoc = getLocator().getFactory().createResourceLocator(getLocator().getPrefix(), null, null);
-        try {
-            collection = createResourceFromLocator(parentLoc);
-        } catch (DavException e) {
-            log.error("Unexpected error while retrieving collection: " + e.getMessage());
-        }
-        return collection;
-    }
-
-    /**
-     * Allows to alter the registered namespaces ({@link #JCR_NAMESPACES}) and
-     * forwards any other property to the super class.<p/>
-     * Note that again no property status is set. Any failure while setting
-     * a property results in an exception (violating RFC 2518).
-     *
-     * @param property
-     * @throws DavException
-     * @see DavResource#setProperty(org.apache.jackrabbit.webdav.property.DavProperty)
-     */
-    public void setProperty(DavProperty property) throws DavException {
-        if (JCR_NAMESPACES.equals(property.getName())) {
-            NamespacesProperty nsp = new NamespacesProperty(property);
-                try {
-                Properties changes = nsp.getNamespaces();
-                    NamespaceRegistry nsReg = getRepositorySession().getWorkspace().getNamespaceRegistry();
-                    String[] registeredPrefixes = nsReg.getPrefixes();
-                    for (int i = 0; i < registeredPrefixes.length; i++) {
-                        String prfx = registeredPrefixes[i];
-                    if (!changes.containsKey(prfx)) {
-                            // prefix not present amongst the new values any more > unregister
-                            nsReg.unregisterNamespace(prfx);
-                    } else if (changes.get(prfx).equals(nsReg.getURI(prfx))) {
-                            // present with same uri-value >> no action required
-                        changes.remove(prfx);
-                        }
-                    }
-
-                    // try to register any prefix/uri pair that has a changed uri or
-                    // it has not been present before.
-                Iterator prefixIt = changes.keySet().iterator();
-                    while (prefixIt.hasNext()) {
-                        String prefix = (String)prefixIt.next();
-                    String uri = (String)changes.get(prefix);
-                        nsReg.registerNamespace(prefix, uri);
-                    }
-                } catch (RepositoryException e) {
-                    throw new JcrDavException(e);
-                }
-            } else {
-            super.setProperty(property);
-        }
-    }
-
-    /**
-     * Handles an attempt to set {@link #JCR_NAMESPACES} and forwards any other
-     * set or remove requests to the super class.
-     * Please note, that RFC 2518 is violated because setting {@link #JCR_NAMESPACES}
-     * is handled out of the order indicated by the set and changes may be persisted
-     * even if altering another property fails.
-     *
-     * @see #setProperty(DavProperty)
-     * @see DefaultItemCollection#alterProperties(org.apache.jackrabbit.webdav.property.DavPropertySet, org.apache.jackrabbit.webdav.property.DavPropertyNameSet)
-     */
-    public MultiStatusResponse alterProperties(DavPropertySet setProperties, DavPropertyNameSet removePropertyNames) throws DavException {
-        // TODO: respect order of the set and do not persist if super.alterProperties fails
-        if (setProperties.contains(JCR_NAMESPACES)) {
-            setProperty(setProperties.remove(JCR_NAMESPACES));
-        }
-        // let super-class handle the rest of the properties
-        return super.alterProperties(setProperties, removePropertyNames);
-    }
-
-    //--------------------------------------------------------------------------
-    protected void initProperties() {
-        super.initProperties();
-        try {
-            // init workspace specific properties
-            NamespaceRegistry nsReg = getRepositorySession().getWorkspace().getNamespaceRegistry();
-            DavProperty namespacesProp = new NamespacesProperty(nsReg);
-            properties.add(namespacesProp);
-        } catch (RepositoryException e) {
-            log.error("Failed to access NamespaceRegistry: " + e.getMessage());
-        }
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/VersionControlledItemCollection.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/VersionControlledItemCollection.java
deleted file mode 100644
index 9c2b085..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/VersionControlledItemCollection.java
+++ /dev/null
@@ -1,661 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.jcr;
-
-import org.apache.jackrabbit.JcrConstants;
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavLocatorFactory;
-import org.apache.jackrabbit.webdav.DavResource;
-import org.apache.jackrabbit.webdav.DavResourceFactory;
-import org.apache.jackrabbit.webdav.DavResourceLocator;
-import org.apache.jackrabbit.webdav.DavServletResponse;
-import org.apache.jackrabbit.webdav.DavSession;
-import org.apache.jackrabbit.webdav.MultiStatus;
-import org.apache.jackrabbit.webdav.MultiStatusResponse;
-import org.apache.jackrabbit.webdav.property.DavPropertyName;
-import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
-import org.apache.jackrabbit.webdav.property.DavPropertySet;
-import org.apache.jackrabbit.webdav.property.DefaultDavProperty;
-import org.apache.jackrabbit.webdav.property.HrefProperty;
-import org.apache.jackrabbit.webdav.version.LabelInfo;
-import org.apache.jackrabbit.webdav.version.MergeInfo;
-import org.apache.jackrabbit.webdav.version.UpdateInfo;
-import org.apache.jackrabbit.webdav.version.VersionControlledResource;
-import org.apache.jackrabbit.webdav.version.VersionHistoryResource;
-import org.apache.jackrabbit.webdav.version.VersionResource;
-import org.apache.jackrabbit.webdav.version.VersionableResource;
-import org.apache.jackrabbit.webdav.version.report.ReportType;
-import org.apache.jackrabbit.webdav.version.report.SupportedReportSetProperty;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.apache.log4j.Logger;
-import org.w3c.dom.Element;
-
-import javax.jcr.Item;
-import javax.jcr.Node;
-import javax.jcr.NodeIterator;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.Value;
-import javax.jcr.ValueFormatException;
-import javax.jcr.Workspace;
-import javax.jcr.observation.Event;
-import javax.jcr.observation.EventIterator;
-import javax.jcr.observation.EventListener;
-import javax.jcr.version.Version;
-import javax.jcr.version.VersionHistory;
-import java.util.List;
-
-/**
- * <code>VersionControlledItemCollection</code> represents a JCR node item and
- * covers all functionality related to versioning of {@link Node}s.
- *
- * @see Node
- */
-public class VersionControlledItemCollection extends DefaultItemCollection
-        implements VersionControlledResource {
-
-    private static Logger log = Logger.getLogger(VersionControlledItemCollection.class);
-
-    /**
-     * Create a new <code>VersionControlledItemCollection</code>.
-     *
-     * @param locator
-     * @param session
-     */
-    public VersionControlledItemCollection(DavResourceLocator locator,
-                                           DavSession session, DavResourceFactory factory,
-                                           Item item) {
-        super(locator, session, factory, item);
-        if (exists() && !(item instanceof Node)) {
-            throw new IllegalArgumentException("A collection resource can not be constructed from a Property item.");
-        }
-    }
-
-    //----------------------------------------------< DavResource interface >---
-    /**
-     * Return a comma separated string listing the supported method names.
-     *
-     * @return the supported method names.
-     * @see org.apache.jackrabbit.webdav.DavResource#getSupportedMethods()
-     */
-    public String getSupportedMethods() {
-        StringBuffer sb = new StringBuffer(super.getSupportedMethods());
-        // Versioning support
-        sb.append(", ").append(VersionableResource.METHODS);
-        if (this.isVersionControlled()) {
-            try {
-                if (((Node)item).isCheckedOut()) {
-                    sb.append(", ").append(VersionControlledResource.methods_checkedOut);
-                } else {
-                    sb.append(", ").append(VersionControlledResource.methods_checkedIn);
-                }
-            } catch (RepositoryException e) {
-                // should not occur.
-                log.error(e.getMessage());
-            }
-        }
-        return sb.toString();
-    }
-
-    /**
-     *
-     * @param setProperties
-     * @param removePropertyNames
-     * @throws DavException
-     * @see DefaultItemCollection#alterProperties(org.apache.jackrabbit.webdav.property.DavPropertySet, org.apache.jackrabbit.webdav.property.DavPropertyNameSet)
-     * for additional description of non-compliant behaviour.
-     */
-    public MultiStatusResponse alterProperties(DavPropertySet setProperties, DavPropertyNameSet removePropertyNames) throws DavException {
-        /* first resolve merge conflict since they cannot be handled by
-           setting property values in jcr (and are persisted immediately).
-           NOTE: this violates RFC 2518 that requires that proppatch
-           is processed in the order entries are present in the xml and that
-           required that no changes must be persisted if any set/remove fails.
-        */
-        // TODO: solve violation of RFC 2518
-        resolveMergeConflict(setProperties, removePropertyNames);
-        // alter other properties only if merge-conflicts could be handled
-        return super.alterProperties(setProperties, removePropertyNames);
-    }
-
-    /**
-     * Resolve one or multiple merge conflicts present on this resource. Please
-     * note that the 'setProperties' or 'removeProperties' set my contain additional
-     * resource properties, that need to be changed. Those properties are left
-     * untouched, whereas the {@link #AUTO_MERGE_SET DAV:auto-merge-set}, is
-     * removed from the list upon successful resolution of a merge conflict.<br>
-     * If the removeProperties or setProperties set do not contain the mentioned
-     * merge conflict resource properties or if the value of those properties do
-     * not allow for a resolution of an existing merge conflict, this method
-     * returns silently.
-     *
-     * @param setProperties
-     * @param removePropertyNames
-     * @throws org.apache.jackrabbit.webdav.DavException
-     * @see Node#doneMerge(Version)
-     * @see Node#cancelMerge(Version)
-     */
-    private void resolveMergeConflict(DavPropertySet setProperties,
-                                     DavPropertyNameSet removePropertyNames)
-        throws DavException {
-
-        if (!exists()) {
-            throw new DavException(DavServletResponse.SC_NOT_FOUND);
-        }
-
-        try {
-            Node n = (Node)item;
-            if (removePropertyNames.contains(AUTO_MERGE_SET)) {
-                // retrieve the current jcr:mergeFailed property values
-                if (!n.hasProperty(JcrConstants.JCR_MERGEFAILED)) {
-                    throw new DavException(DavServletResponse.SC_CONFLICT, "Attempt to resolve non-existing merge conflicts.");
-                }
-                Value[] mergeFailed = n.getProperty(JcrConstants.JCR_MERGEFAILED).getValues();
-
-                // resolve all remaining merge conflicts with 'cancel'
-                for (int i = 0; i < mergeFailed.length; i++) {
-                    n.cancelMerge((Version)getRepositorySession().getNodeByUUID(mergeFailed[i].getString()));
-                }
-                // adjust removeProperty set
-                removePropertyNames.remove(AUTO_MERGE_SET);
-
-            } else if (setProperties.contains(AUTO_MERGE_SET) && setProperties.contains(PREDECESSOR_SET)){
-                // retrieve the current jcr:mergeFailed property values
-                if (!n.hasProperty(JcrConstants.JCR_MERGEFAILED)) {
-                    throw new DavException(DavServletResponse.SC_CONFLICT, "Attempt to resolve non-existing merge conflicts.");
-                }
-                Value[] mergeFailed = n.getProperty(JcrConstants.JCR_MERGEFAILED).getValues();
-
-
-                // check which mergeFailed entries have been removed from the
-                // auto-merge-set (cancelMerge) and have been moved over to the
-                // predecessor set (doneMerge)
-                List mergeset = new HrefProperty(setProperties.get(AUTO_MERGE_SET)).getHrefs();
-                List predecSet = new HrefProperty(setProperties.get(PREDECESSOR_SET)).getHrefs();
-
-                Session session = getRepositorySession();
-                for (int i = 0; i < mergeFailed.length; i++) {
-                    // build version-href from each entry in the jcr:mergeFailed property
-                    Version version = (Version) session.getNodeByUUID(mergeFailed[i].getString());
-                    String href = getLocatorFromItem(version).getHref(true);
-
-                    // Test if that version has been removed from the merge-set.
-                    // thus indicating that the merge-conflict needs to be resolved.
-                    if (!mergeset.contains(href)) {
-                        // Test if the 'href' has been moved over to the
-                        // predecessor-set (thus 'doneMerge' is appropriate) or
-                        // if it is not present in the predecessor set and the
-                        // the conflict is resolved by 'cancelMerge'.
-                        if (predecSet.contains(href)) {
-                            n.doneMerge(version);
-                        } else {
-                            n.cancelMerge(version);
-                        }
-                    }
-                }
-                // adjust setProperty set
-                setProperties.remove(AUTO_MERGE_SET);
-                setProperties.remove(PREDECESSOR_SET);
-            }
-            /* else: no (valid) attempt to resolve merge conflict > return silently */
-        } catch (RepositoryException e) {
-            throw new JcrDavException(e);
-        }
-    }
-
-    //--------------------------------< VersionControlledResource interface >---
-    /**
-     * Adds version control to this resource. If the resource is already under
-     * version control, this method has no effect.
-     *
-     * @throws org.apache.jackrabbit.webdav.DavException if this resource does not
-     * exist yet or if an error occurs while making the underlying node versionable.
-     * @see org.apache.jackrabbit.webdav.version.VersionableResource#addVersionControl()
-     */
-    public void addVersionControl() throws DavException {
-        if (!exists()) {
-            throw new DavException(DavServletResponse.SC_NOT_FOUND);
-        }
-        if (!isVersionControlled()) {
-            try {
-                ((Node)item).addMixin(JcrConstants.MIX_VERSIONABLE);
-                item.save();
-            } catch (RepositoryException e) {
-                throw new JcrDavException(e);
-            }
-        } // else: is already version controlled -> ignore
-    }
-
-    /**
-     * Calls {@link javax.jcr.Node#checkin()} on the underlying repository node.
-     *
-     * @throws org.apache.jackrabbit.webdav.DavException
-     * @see org.apache.jackrabbit.webdav.version.VersionControlledResource#checkin()
-     */
-    public String checkin() throws DavException {
-        if (!exists()) {
-            throw new DavException(DavServletResponse.SC_NOT_FOUND);
-        }
-        if (!isVersionControlled()) {
-            throw new DavException(DavServletResponse.SC_METHOD_NOT_ALLOWED);
-        }
-        try {
-            Version v = ((Node) item).checkin();
-            String versionHref = getLocatorFromItem(v).getHref(true);
-            return versionHref;
-        } catch (RepositoryException e) {
-            // UnsupportedRepositoryException should not occur
-            throw new JcrDavException(e);
-        }
-    }
-
-    /**
-     * Calls {@link javax.jcr.Node#checkout()} on the underlying repository node.
-     *
-     * @throws org.apache.jackrabbit.webdav.DavException
-     * @see org.apache.jackrabbit.webdav.version.VersionControlledResource#checkout()
-     */
-    public void checkout() throws DavException {
-        if (!exists()) {
-            throw new DavException(DavServletResponse.SC_NOT_FOUND);
-        }
-        if (!isVersionControlled()) {
-            throw new DavException(DavServletResponse.SC_METHOD_NOT_ALLOWED);
-        }
-        try {
-            ((Node) item).checkout();
-        } catch (RepositoryException e) {
-            // UnsupportedRepositoryException should not occur
-            throw new JcrDavException(e);
-        }
-    }
-
-    /**
-     * Not implemented. Always throws a <code>DavException</code> with error code
-     * {@link org.apache.jackrabbit.webdav.DavServletResponse#SC_NOT_IMPLEMENTED}.
-     *
-     * @throws org.apache.jackrabbit.webdav.DavException
-     * @see org.apache.jackrabbit.webdav.version.VersionControlledResource#uncheckout()
-     */
-    public void uncheckout() throws DavException {
-        throw new DavException(DavServletResponse.SC_NOT_IMPLEMENTED);
-    }
-
-    /**
-     * Perform an update on this resource. Depending on the format of the <code>updateInfo</code>
-     * this is translated to one of the following methods defined by the JCR API:
-     * <ul>
-     * <li>{@link Node#restore(javax.jcr.version.Version, boolean)}</li>
-     * <li>{@link Node#restore(javax.jcr.version.Version, String, boolean)}</li>
-     * <li>{@link Node#restoreByLabel(String, boolean)}</li>
-     * <li>{@link Workspace#restore(javax.jcr.version.Version[], boolean)}</li>
-     * <li>{@link Node#update(String)}</li>
-     * </ul>
-     * </p>
-     * Limitation: note that the <code>MultiStatus</code> returned by this method
-     * will not list any nodes that have been removed due to an Uuid conflict.
-     *
-     * @param updateInfo
-     * @return
-     * @throws org.apache.jackrabbit.webdav.DavException
-     * @see org.apache.jackrabbit.webdav.version.VersionControlledResource#update(org.apache.jackrabbit.webdav.version.UpdateInfo)
-     */
-    //TODO: with jcr the node must not be versionable in order to perform Node.update.
-    public MultiStatus update(UpdateInfo updateInfo) throws DavException {
-        if (updateInfo == null) {
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "Valid update request body required.");
-        }
-        if (!exists()) {
-            throw new DavException(DavServletResponse.SC_NOT_FOUND);
-        }
-
-        MultiStatus ms = new MultiStatus();
-        try {
-            Node node = (Node)item;
-            Element udElem = updateInfo.getUpdateElement();
-            boolean removeExisting = DomUtil.hasChildElement(udElem, XML_REMOVEEXISTING, NAMESPACE);
-
-            // register eventListener in order to be able to report the modified resources.
-            EventListener el = new EListener(updateInfo.getPropertyNameSet(), ms);
-            registerEventListener(el, node.getPath());
-
-            // perform the update/restore according to the update info
-            if (updateInfo.getVersionHref() != null) {
-                VersionHistory vh = node.getVersionHistory();
-                String[] hrefs = updateInfo.getVersionHref();
-                Version[] versions = new Version[hrefs.length];
-                for (int  i = 0; i < hrefs.length; i++) {
-                    String itemPath = getLocatorFromHref(hrefs[i]).getJcrPath();
-                    versions[i] = vh.getVersion(getItemName(itemPath));
-                }
-                if (versions.length == 1) {
-                    String relPath = DomUtil.getChildText(udElem, XML_RELPATH, NAMESPACE);
-                    if (relPath == null) {
-                        node.restore(versions[0], removeExisting);
-                    } else {
-                        node.restore(versions[0], relPath, removeExisting);
-                    }
-                } else {
-                    getRepositorySession().getWorkspace().restore(versions, removeExisting);
-                }
-            } else if (updateInfo.getLabelName() != null) {
-                String[] labels = updateInfo.getLabelName();
-                if (labels.length == 1) {
-                    node.restoreByLabel(labels[0], removeExisting);
-                } else {
-                    Version[] vs = new Version[labels.length];
-                    VersionHistory vh = node.getVersionHistory();
-                    for (int  i = 0; i < labels.length; i++) {
-                        vs[i] = vh.getVersionByLabel(labels[i]);
-                    }
-                    getRepositorySession().getWorkspace().restore(vs, removeExisting);
-                }
-            } else if (updateInfo.getWorkspaceHref() != null) {
-                String workspaceName = getLocatorFromHref(updateInfo.getWorkspaceHref()).getWorkspaceName();
-                node.update(workspaceName);
-            } else {
-                throw new DavException(DavServletResponse.SC_BAD_REQUEST, "Invalid update request body.");
-            }
-
-            // unregister the event listener again
-            unregisterEventListener(el);
-
-        } catch (RepositoryException e) {
-            throw new JcrDavException(e);
-        }
-        return ms;
-    }
-
-    /**
-     * Merge the repository node represented by this resource according to the
-     * information present in the given {@link MergeInfo} object.
-     *
-     * @param mergeInfo
-     * @return <code>MultiStatus</code> recording all repository items modified
-     * by this merge call as well as the resources that a client must modify to
-     * complete the merge (see <a href="http://www.webdav.org/specs/rfc3253.html#METHOD_MERGE">RFC 3253</a>)
-     * @throws org.apache.jackrabbit.webdav.DavException
-     * @see org.apache.jackrabbit.webdav.version.VersionControlledResource#merge(org.apache.jackrabbit.webdav.version.MergeInfo)
-     * @see Node#merge(String, boolean)
-     */
-    //TODO: with jcr the node must not be versionable in order to perform Node.merge
-    public MultiStatus merge(MergeInfo mergeInfo) throws DavException {
-        if (mergeInfo == null) {
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST);
-        }
-        if (!exists()) {
-            throw new DavException(DavServletResponse.SC_NOT_FOUND);
-        }
-
-        MultiStatus ms = new MultiStatus();
-        try {
-            Node node = (Node)item;
-
-            // register eventListener in order to be able to report all
-            // modified resources.
-            EventListener el = new EListener(mergeInfo.getPropertyNameSet(), ms);
-            registerEventListener(el, node.getPath());
-
-            // todo: RFC allows multiple href elements inside the DAV:source element
-            String workspaceName = getLocatorFromHref(mergeInfo.getSourceHrefs()[0]).getWorkspaceName();
-            NodeIterator failed = node.merge(workspaceName, !mergeInfo.isNoAutoMerge());
-
-            // unregister the event listener again
-            unregisterEventListener(el);
-
-            // add resources to the multistatus, that failed to be merged
-            while (failed.hasNext()) {
-                Node failedNode = failed.nextNode();
-                DavResourceLocator loc = getLocatorFromItem(failedNode);
-                DavResource res = createResourceFromLocator(loc);
-                ms.addResponse(new MultiStatusResponse(res, mergeInfo.getPropertyNameSet()));
-            }
-
-        } catch (RepositoryException e) {
-            throw new JcrDavException(e);
-        }
-
-        return ms;
-    }
-
-    /**
-     * Modify the labels present with the versions of this resource.
-     *
-     * @param labelInfo
-     * @throws DavException
-     * @see VersionHistory#addVersionLabel(String, String, boolean)
-     * @see VersionHistory#removeVersionLabel(String)
-     */
-    public void label(LabelInfo labelInfo) throws DavException {
-        if (labelInfo == null) {
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "Valid label request body required.");
-        }
-        if (!exists()) {
-            throw new DavException(DavServletResponse.SC_NOT_FOUND);
-        }
-
-        try {
-            if (!isVersionControlled() || ((Node)item).isCheckedOut()) {
-                throw new DavException(DavServletResponse.SC_PRECONDITION_FAILED, "A LABEL request may only be applied to a version-controlled, checked-in resource.");
-            }
-            DavResource[] resArr = this.getReferenceResources(CHECKED_IN);
-            if (resArr.length == 1 && resArr[0] instanceof VersionResource) {
-                ((VersionResource)resArr[0]).label(labelInfo);
-            } else {
-                throw new DavException(DavServletResponse.SC_INTERNAL_SERVER_ERROR, "DAV:checked-in property on '" + getHref() + "' did not point to a single VersionResource.");
-            }
-        } catch (RepositoryException e) {
-            throw new JcrDavException(e);
-        }
-    }
-
-    /**
-     * Returns the {@link VersionHistory} associated with the repository node.
-     * If the node is not versionable an exception is thrown.
-     *
-     * @return the {@link VersionHistoryResource} associated with this resource.
-     * @throws org.apache.jackrabbit.webdav.DavException
-     * @see org.apache.jackrabbit.webdav.version.VersionControlledResource#getVersionHistory()
-     * @see javax.jcr.Node#getVersionHistory()
-     */
-    public VersionHistoryResource getVersionHistory() throws DavException {
-        if (!exists()) {
-            throw new DavException(DavServletResponse.SC_NOT_FOUND);
-        }
-
-        try {
-            VersionHistory vh = ((Node)item).getVersionHistory();
-            DavResourceLocator loc = getLocatorFromItem(vh);
-            return (VersionHistoryResource) createResourceFromLocator(loc);
-        } catch (RepositoryException e) {
-            throw new JcrDavException(e);
-        }
-    }
-
-    //--------------------------------------------------------------------------
-    /**
-     * Define the set of reports supported by this resource.
-     *
-     * @see SupportedReportSetProperty
-     */
-    protected void initSupportedReports() {
-        super.initSupportedReports();
-        if (exists()) {
-	    supportedReports.addReportType(ReportType.LOCATE_BY_HISTORY);
-            if (this.isVersionControlled()) {
-            supportedReports.addReportType(ReportType.VERSION_TREE);
-	    }            
-        }
-    }
-
-    /**
-     * Fill the property set for this resource.
-     */
-    protected void initProperties() {
-        super.initProperties();
-        if (exists()) {
-            Node n = (Node)item;
-            // properties defined by RFC 3253 for version-controlled resources
-            if (isVersionControlled()) {
-                // workspace property already set in AbstractResource.initProperties()
-                try {
-                    // DAV:version-history (computed)
-                    String vhHref = getLocatorFromItem(n.getVersionHistory()).getHref(true);
-                    properties.add(new HrefProperty(VERSION_HISTORY, vhHref, true));
-
-                    // DAV:auto-version property: there is no auto version, explicit CHECKOUT is required.
-                    properties.add(new DefaultDavProperty(AUTO_VERSION, null, false));
-
-                    String baseVHref = getLocatorFromItem(n.getBaseVersion()).getHref(true);
-                    if (n.isCheckedOut()) {
-                        // DAV:checked-out property (protected)
-                        properties.add(new HrefProperty(CHECKED_OUT, baseVHref, true));
-
-                        // DAV:predecessors property
-                        if (n.hasProperty(JcrConstants.JCR_PREDECESSORS)) {
-                            Value[] predec = n.getProperty(JcrConstants.JCR_PREDECESSORS).getValues();
-                            addHrefProperty(PREDECESSOR_SET, predec, false);
-                        }
-                        // DAV:auto-merge-set property. NOTE: the DAV:merge-set
-                        // never occurs, because merging without bestEffort flag
-                        // being set results in an exception on failure.
-                        if (n.hasProperty(JcrConstants.JCR_MERGEFAILED)) {
-                            Value[] mergeFailed = n.getProperty(JcrConstants.JCR_MERGEFAILED).getValues();
-                            addHrefProperty(AUTO_MERGE_SET, mergeFailed, false);
-                        }
-                        // todo: checkout-fork, checkin-fork
-                    } else {
-                        // DAV:checked-in property (protected)
-                        properties.add(new HrefProperty(CHECKED_IN, baseVHref, true));
-                    }
-                } catch (RepositoryException e) {
-                    log.error(e.getMessage());
-                }
-            }
-        }
-    }
-
-    /**
-     * Add a {@link org.apache.jackrabbit.webdav.property.HrefProperty} with the
-     * specified property name and values.
-     *
-     * @param name
-     * @param values Array of {@link Value}s.
-     * @param isProtected
-     * @throws javax.jcr.ValueFormatException
-     * @throws IllegalStateException
-     * @throws javax.jcr.RepositoryException
-     */
-    private void addHrefProperty(DavPropertyName name, Value[] values,
-                                 boolean isProtected)
-            throws ValueFormatException, IllegalStateException, RepositoryException {
-        Node[] nodes = new Node[values.length];
-        for (int i = 0; i < values.length; i++) {
-            nodes[i] = getRepositorySession().getNodeByUUID(values[i].getString());
-        }
-        addHrefProperty(name, nodes, isProtected);
-    }
-
-    /**
-     * @return true, if this resource represents an existing repository node
-     * that has the mixin nodetype 'mix:versionable' set.
-     */
-    private boolean isVersionControlled() {
-        boolean vc = false;
-        if (exists()) {
-            try {
-                vc = ((Node) item).isNodeType(JcrConstants.MIX_VERSIONABLE);
-            } catch (RepositoryException e) {
-                log.warn(e.getMessage());
-            }
-        }
-        return vc;
-    }
-
-    /**
-     * Build a new locator for the given href.
-     * 
-     * @param href
-     * @return
-     */
-    private DavResourceLocator getLocatorFromHref(String href) {
-        DavLocatorFactory f = getLocator().getFactory();
-        String prefix = getLocator().getPrefix();
-        return f.createResourceLocator(prefix, href);
-    }
-
-    /**
-     * Register the specified event listener with the observation manager present
-     * the repository session.
-     *
-     * @param listener
-     * @param nodePath
-     * @throws javax.jcr.RepositoryException
-     */
-    private void registerEventListener(EventListener listener, String nodePath) throws RepositoryException {
-        getRepositorySession().getWorkspace().getObservationManager().addEventListener(listener, EListener.ALL_EVENTS, nodePath, true, null, null, false);
-    }
-
-    /**
-     * Unregister the specified event listener with the observation manager present
-     * the repository session.
-     *
-     * @param listener
-     * @throws javax.jcr.RepositoryException
-     */
-    private void unregisterEventListener(EventListener listener) throws RepositoryException {
-        getRepositorySession().getWorkspace().getObservationManager().removeEventListener(listener);
-    }
-
-    //------------------------------------------------------< inner classes >---
-    /**
-     * Simple EventListener that creates a new {@link org.apache.jackrabbit.webdav.MultiStatusResponse} object
-     * for each event and adds it to the specified {@link org.apache.jackrabbit.webdav.MultiStatus}.
-     */
-    private class EListener implements EventListener {
-
-        private static final int ALL_EVENTS = Event.NODE_ADDED | Event.NODE_REMOVED | Event.PROPERTY_ADDED | Event.PROPERTY_CHANGED | Event.PROPERTY_REMOVED;
-
-        private final DavPropertyNameSet propNameSet;
-        private MultiStatus ms;
-
-        private EListener(DavPropertyNameSet propNameSet, MultiStatus ms) {
-            this.propNameSet = propNameSet;
-            this.ms = ms;
-        }
-
-        /**
-         * @see EventListener#onEvent(javax.jcr.observation.EventIterator)
-         */
-        public void onEvent(EventIterator events) {
-            while (events.hasNext()) {
-                try {
-                    Event e = events.nextEvent();
-                    DavResourceLocator loc = getLocatorFromItemPath(e.getPath());
-                    DavResource res = createResourceFromLocator(loc);
-                    ms.addResponse(new MultiStatusResponse(res, propNameSet));
-
-                } catch (DavException e) {
-                    // should not occur
-                    log.error("Error while building MultiStatusResponse from Event: " + e.getMessage());
-                } catch (RepositoryException e) {
-                    // should not occur
-                    log.error("Error while building MultiStatusResponse from Event: " + e.getMessage());
-                }
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/lock/JcrActiveLock.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/lock/JcrActiveLock.java
deleted file mode 100644
index 773a383..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/lock/JcrActiveLock.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.jcr.lock;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.lock.AbstractActiveLock;
-import org.apache.jackrabbit.webdav.lock.ActiveLock;
-import org.apache.jackrabbit.webdav.lock.Type;
-import org.apache.jackrabbit.webdav.lock.Scope;
-import org.apache.jackrabbit.webdav.jcr.ItemResourceConstants;
-import org.apache.jackrabbit.JcrConstants;
-
-import javax.jcr.lock.Lock;
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-
-/**
- * <code>JcrActiveLock</code> wraps a {@link Lock JCR lock} object.
- */
-public class JcrActiveLock extends AbstractActiveLock implements ActiveLock, DavConstants {
-
-    private static Logger log = Logger.getLogger(JcrActiveLock.class);
-
-    private final Lock lock;
-    private final boolean sessionScoped;
-
-    /**
-     * Create a new <code>ActiveLock</code> object with type '{@link Type#WRITE write}'
-     * and scope '{@link Scope#EXCLUSIVE exclusive}'.
-     *
-     * @param lock
-     */
-    public JcrActiveLock(Lock lock) {
-        this (lock, false);
-    }
-
-    /**
-     * Create a new <code>ActiveLock</code> object with type '{@link Type#WRITE write}'
-     * and scope '{@link Scope#EXCLUSIVE exclusive}'.
-     *
-     * @param lock
-     */
-    public JcrActiveLock(Lock lock, boolean sessionScoped) {
-        if (lock == null) {
-            throw new IllegalArgumentException("Can not create a ActiveLock with a 'null' argument.");
-        }
-        this.lock = lock;
-        this.sessionScoped = sessionScoped;
-    }
-
-    /**
-     * Return true if the given lock token equals the token holding that lock.
-     *
-     * @param lockToken
-     * @return true if the given lock token equals this locks token.
-     * @see org.apache.jackrabbit.webdav.lock.ActiveLock#isLockedByToken(String)
-     */
-    public boolean isLockedByToken(String lockToken) {
-        if (lockToken != null && lockToken.equals(getToken())) {
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * @see ActiveLock#isExpired()
-     */
-    public boolean isExpired() {
-        try {
-            return !lock.isLive();
-        } catch (RepositoryException e) {
-            log.error("Unexpected error: " + e.getMessage());
-            return false;
-        }
-    }
-
-    /**
-     * Return the lock token if the {@link javax.jcr.Session} that optained the lock
-     * is the lock token holder, <code>null</code> otherwise.<br>
-     * NOTE: currently the token generated by the underlying JCR repository
-     * is not checked for compliance with RFC 2518 ("<cite>OpaqueLockToken-URI = "opaquelocktoken:"
-     * UUID [Extension] ; The UUID production is the string representation of a
-     * UUID, as defined in [ISO-11578]. Note that white space (LWS) is not allowed
-     * between elements of this production.</cite>").
-     *
-     * @see ActiveLock#getToken()
-     */
-    public String getToken() {
-        return lock.getLockToken();
-    }
-
-    /**
-     * @see ActiveLock#getOwner()
-     */
-    public String getOwner() {
-        return lock.getLockOwner();
-    }
-
-    /**
-     * @see ActiveLock#setOwner(String)
-     */
-    public void setOwner(String owner) {
-        throw new UnsupportedOperationException("setOwner is not implemented");
-    }
-
-    /**
-     * Since jcr locks do not reveal the time left until they expire, {@link #INFINITE_TIMEOUT}
-     * is returned. A missing timeout causes problems with Microsoft clients.
-     * 
-     * @return Always returns {@link #INFINITE_TIMEOUT}
-     * @see ActiveLock#getTimeout()
-     */
-    public long getTimeout() {
-        return INFINITE_TIMEOUT;
-    }
-
-    /**
-     * Throws <code>UnsupportedOperationException</code>
-     *
-     * @see ActiveLock#setTimeout(long)
-     */
-    public void setTimeout(long timeout) {
-        throw new UnsupportedOperationException("setTimeout is not implemented");
-    }
-
-    /**
-     * @see ActiveLock#isDeep()
-     */
-    public boolean isDeep() {
-        boolean isDeep = true;
-        Node n = lock.getNode();
-        try {
-            // find out about deepness. if node does not hold the lock its deep anyway
-            if (n.holdsLock() && n.hasProperty(JcrConstants.JCR_LOCKISDEEP)) {
-                isDeep = n.getProperty(JcrConstants.JCR_LOCKISDEEP).getBoolean();
-            }
-        } catch (RepositoryException e) {
-            // ignore and keep default depth settings
-        }
-        return isDeep;
-    }
-
-    /**
-     * @see ActiveLock#setIsDeep(boolean)
-     */
-    public void setIsDeep(boolean isDeep) {
-        throw new UnsupportedOperationException("setIsDeep is not implemented");
-    }
-
-    /**
-     * Always returns {@link Type#WRITE}.
-     *
-     * @return {@link Type#WRITE}
-     * @see ActiveLock#getType()
-     */
-    public Type getType() {
-        return Type.WRITE;
-    }
-
-    /**
-     * @return The scope of this lock, which may either by an {@link Scope#EXCLUSIVE exclusive}
-     * or {@link ItemResourceConstants#EXCLUSIVE_SESSION exlusive session scoped}
-     * lock.
-     * @see ActiveLock#getScope()
-     */
-    public Scope getScope() {
-        return (sessionScoped) ? ItemResourceConstants.EXCLUSIVE_SESSION : Scope.EXCLUSIVE;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/lock/SessionScopedLockEntry.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/lock/SessionScopedLockEntry.java
deleted file mode 100644
index 91be04b..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/lock/SessionScopedLockEntry.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.jcr.lock;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.lock.LockEntry;
-import org.apache.jackrabbit.webdav.lock.Scope;
-import org.apache.jackrabbit.webdav.lock.Type;
-import org.apache.jackrabbit.webdav.lock.AbstractLockEntry;
-import org.apache.jackrabbit.webdav.jcr.ItemResourceConstants;
-
-/**
- * <code>SessionScopedLockEntry</code> represents the 'session-scoped' write
- * lock as defined by JCR.
- */
-public class SessionScopedLockEntry extends AbstractLockEntry {
-
-    private static Logger log = Logger.getLogger(SessionScopedLockEntry.class);
-
-    /**
-     * @return always returns {@link Type#WRITE write}.
-     * @see LockEntry#getType()
-     */
-    public Type getType() {
-        return Type.WRITE;
-    }
-
-    /**
-     * @return returns {@link ItemResourceConstants#EXCLUSIVE_SESSION}.
-     * @see LockEntry#getScope()
-     */
-    public Scope getScope() {
-        return ItemResourceConstants.EXCLUSIVE_SESSION;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/nodetype/ItemDefinitionImpl.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/nodetype/ItemDefinitionImpl.java
deleted file mode 100644
index cf95c2c..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/nodetype/ItemDefinitionImpl.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.jcr.nodetype;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.xml.XmlSerializable;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-import javax.jcr.nodetype.NodeType;
-import javax.jcr.nodetype.ItemDefinition;
-import javax.jcr.version.OnParentVersionAction;
-
-/**
- * <code>ItemDefinitionImpl</code>...
- */
-abstract public class ItemDefinitionImpl implements ItemDefinition, NodeTypeConstants, XmlSerializable {
-
-    private static Logger log = Logger.getLogger(ItemDefinitionImpl.class);
-
-    private final String name;
-    private NodeType declaringNodeType;
-    private final boolean isAutoCreated;
-    private final boolean isMandatory;
-    private final boolean isProtected;
-    private final int onParentVersion;
-
-    ItemDefinitionImpl(ItemDefinition definition) {
-	if (definition == null) {
-            throw new IllegalArgumentException("PropDef argument can not be null");
-        }
-        name = definition.getName();
-	declaringNodeType = definition.getDeclaringNodeType();
-	isAutoCreated = definition.isAutoCreated();
-	isMandatory = definition.isMandatory();
-	isProtected = definition.isProtected();
-	onParentVersion = definition.getOnParentVersion();
-    }
-
-    /**
-     * @see ItemDefinition#getDeclaringNodeType()
-     */
-    public NodeType getDeclaringNodeType() {
-	return declaringNodeType;
-    }
-
-    /**
-     * @see ItemDefinition#getName()
-     */
-    public String getName() {
-	return name;
-    }
-
-    /**
-     * @see ItemDefinition#isAutoCreated()
-     */
-    public boolean isAutoCreated() {
-	return isAutoCreated;
-    }
-
-    /**
-     * @see ItemDefinition#isMandatory()
-     */
-    public boolean isMandatory() {
-	return isMandatory;
-    }
-
-    /**
-     * @see ItemDefinition#getOnParentVersion()
-     */
-    public int getOnParentVersion() {
-	return onParentVersion;
-    }
-
-    /**
-     * @see ItemDefinition#isProtected()
-     */
-    public boolean isProtected() {
-	return isProtected;
-    }
-
-    //------------------------------------------< XmlSerializable interface >---
-    /**
-     * Returns the Xml representation of a {@link ItemDefinition} object.
-     *
-     * @return Xml representation of the specified {@link ItemDefinition def}.
-     * @param document
-     */
-    public Element toXml(Document document) {
-	Element elem = document.createElement(getElementName());
-        elem.setAttribute(NAME_ATTRIBUTE, getName());
-        elem.setAttribute(AUTOCREATED_ATTRIBUTE, Boolean.toString(isAutoCreated()));
-        elem.setAttribute(MANDATORY_ATTRIBUTE, Boolean.toString(isMandatory()));
-        elem.setAttribute(ONPARENTVERSION_ATTRIBUTE, OnParentVersionAction.nameFromValue(getOnParentVersion()));
-        elem.setAttribute(PROTECTED_ATTRIBUTE, Boolean.toString(isProtected()));
-        return elem;
-    }
-
-    //-------------------------------------< implementation specific method >---
-    /**
-     * Returns the name of the root element
-     *
-     * @return the name of the root element
-     */
-    abstract String getElementName();
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/nodetype/NodeDefinitionImpl.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/nodetype/NodeDefinitionImpl.java
deleted file mode 100644
index 603498d..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/nodetype/NodeDefinitionImpl.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.jcr.nodetype;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-import javax.jcr.nodetype.NodeType;
-import javax.jcr.nodetype.NodeDefinition;
-
-/**
- * <code>NodeDefinitionImpl</code>...
- */
-public final class NodeDefinitionImpl extends ItemDefinitionImpl implements NodeDefinition {
-
-    private static Logger log = Logger.getLogger(NodeDefinitionImpl.class);
-
-    private final NodeType[] requiredPrimaryTypes;
-    private final NodeType defaultPrimaryType;
-    private final boolean allowsSameNameSiblings;
-
-    private NodeDefinitionImpl(NodeDefinition definition) {
-	super(definition);
-
-	requiredPrimaryTypes = definition.getRequiredPrimaryTypes();
-	defaultPrimaryType = definition.getDefaultPrimaryType();
-	allowsSameNameSiblings = definition.allowsSameNameSiblings();
-    }
-
-    public static NodeDefinitionImpl create(NodeDefinition definition) {
-	if (definition instanceof NodeDefinitionImpl) {
-	    return (NodeDefinitionImpl) definition;
-	} else {
-	    return new NodeDefinitionImpl(definition);
-	}
-    }
-
-    //--------------------------------------------------< NodeDef interface >---
-    /**
-     * @see javax.jcr.nodetype.NodeDefinition#getRequiredPrimaryTypes()
-     */
-    public NodeType[] getRequiredPrimaryTypes() {
-	return requiredPrimaryTypes;
-    }
-
-    /**
-     * @see javax.jcr.nodetype.NodeDefinition#getDefaultPrimaryType()
-     */
-    public NodeType getDefaultPrimaryType() {
-	return defaultPrimaryType;
-    }
-
-    /**
-     * @see javax.jcr.nodetype.NodeDefinition#allowsSameNameSiblings()
-     */
-    public boolean allowsSameNameSiblings() {
-        return allowsSameNameSiblings;
-    }
-
-    //-------------------------------------< implementation specific method >---
-    /**
-     * Returns xml representation
-     *
-     * @return xml representation
-     * @param document
-     */
-    public Element toXml(Document document) {
-        Element elem = super.toXml(document);
-        elem.setAttribute(SAMENAMESIBLINGS_ATTRIBUTE, Boolean.toString(allowsSameNameSiblings()));
-        // defaultPrimaryType can be 'null'
-        NodeType defaultPrimaryType = getDefaultPrimaryType();
-        if (defaultPrimaryType != null) {
-            elem.setAttribute(DEFAULTPRIMARYTYPE_ATTRIBUTE, defaultPrimaryType.getName());
-        }
-        // reqPrimaryTypes: minimal set is nt:base.
-        NodeType[] nts = getRequiredPrimaryTypes();
-        Element reqPrimaryTypes = document.createElement(REQUIREDPRIMARYTYPES_ELEMENT);
-	for (int i = 0; i < nts.length; i++) {
-            Element rptElem = document.createElement(REQUIREDPRIMARYTYPE_ELEMENT);
-            DomUtil.setText(rptElem, nts[i].getName());
-	    reqPrimaryTypes.appendChild(rptElem);
-
-	}
-        elem.appendChild(reqPrimaryTypes);
-        return elem;
-    }
-
-    /**
-     * Returns {@link #CHILDNODEDEFINITION_ELEMENT}
-     *
-     * @return always returns {@link #CHILDNODEDEFINITION_ELEMENT}.
-     */
-    String getElementName() {
-	return CHILDNODEDEFINITION_ELEMENT;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/nodetype/NodeTypeConstants.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/nodetype/NodeTypeConstants.java
deleted file mode 100644
index e9e66b3..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/nodetype/NodeTypeConstants.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.jcr.nodetype;
-
-import org.apache.jackrabbit.webdav.jcr.ItemResourceConstants;
-import org.apache.jackrabbit.webdav.xml.Namespace;
-
-/**
- * <code>NodeTypeConstants</code> used to represent nodetype definitions in
- * Xml.
- *
- * @see javax.jcr.nodetype.NodeType
- * @todo intercaps only for consistency with jackrabbit... webdav rfcs never use intercaps.
- */
-public interface NodeTypeConstants {
-
-    public static final Namespace NAMESPACE = ItemResourceConstants.NAMESPACE;
-
-    public static final String XML_NODETYPENAME = "nodetypename";
-
-    public static final String XML_REPORT_ALLNODETYPES = "all-nodetypes";
-    public static final String XML_REPORT_MIXINNODETYPES = "mixin-nodetypes";
-    public static final String XML_REPORT_PRIMARYNODETYPES = "primary-nodetypes";
-    public static final String XML_NODETYPES = "nodetypes";
-    public static final String XML_NODETYPE = "nodetype";
-
-    //------< copied from org.apache.jackrabbit.core.nodetype.xml.Constants >---
-
-    /** Name of the node type definition root element. */
-    String NODETYPES_ELEMENT = "nodeTypes";
-
-    /** Name of the node type definition element. */
-    String NODETYPE_ELEMENT = "nodeType";
-
-    /** Name of the child node definition element. */
-    String CHILDNODEDEFINITION_ELEMENT = "childNodeDefinition";
-
-    /** Name of the property definition element. */
-    String PROPERTYDEFINITION_ELEMENT = "propertyDefinition";
-
-    /** Name of the <code>isMixin</code> attribute. */
-    String ISMIXIN_ATTRIBUTE = "isMixin";
-
-    /** Name of the <code>hasOrderableChildNodes</code> attribute. */
-    String HASORDERABLECHILDNODES_ATTRIBUTE = "hasOrderableChildNodes";
-
-    /** Name of the primary item name attribute. */
-    String PRIMARYITEMNAME_ATTRIBUTE = "primaryItemName";
-
-    /** Name of the supertypes element. */
-    String SUPERTYPES_ELEMENT = "supertypes";
-
-    /** Name of the supertype element. */
-    String SUPERTYPE_ELEMENT = "supertype";
-
-    /** Name of the <code>name</code> attribute. */
-    String NAME_ATTRIBUTE = "name";
-
-    /** Name of the <code>autoCreated</code> attribute. */
-    String AUTOCREATED_ATTRIBUTE = "autoCreated";
-
-    /** Name of the <code>mandatory</code> attribute. */
-    String MANDATORY_ATTRIBUTE = "mandatory";
-
-    /** Name of the <code>onParentVersion</code> attribute. */
-    String ONPARENTVERSION_ATTRIBUTE = "onParentVersion";
-
-    /** Name of the <code>protected</code> attribute. */
-    String PROTECTED_ATTRIBUTE = "protected";
-
-    /** Name of the required type attribute. */
-    String REQUIREDTYPE_ATTRIBUTE = "requiredType";
-
-    /** Name of the value constraints element. */
-    String VALUECONSTRAINTS_ELEMENT = "valueConstraints";
-
-    /** Name of the value constraint element. */
-    String VALUECONSTRAINT_ELEMENT = "valueConstraint";
-
-    /** Name of the default values element. */
-    String DEFAULTVALUES_ELEMENT = "defaultValues";
-
-    /** Name of the default value element. */
-    String DEFAULTVALUE_ELEMENT = "defaultValue";
-
-    /** Name of the <code>multiple</code> attribute. */
-    String MULTIPLE_ATTRIBUTE = "multiple";
-
-    /** Name of the required primary types element. */
-    String REQUIREDPRIMARYTYPES_ELEMENT = "requiredPrimaryTypes";
-
-    /** Name of the required primary type element. */
-    String REQUIREDPRIMARYTYPE_ELEMENT = "requiredPrimaryType";
-
-    /** Name of the default primary type attribute. */
-    String DEFAULTPRIMARYTYPE_ATTRIBUTE = "defaultPrimaryType";
-
-    /** Name of the <code>sameNameSiblings</code> attribute. */
-    String SAMENAMESIBLINGS_ATTRIBUTE = "sameNameSiblings";
-
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/nodetype/NodeTypeProperty.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/nodetype/NodeTypeProperty.java
deleted file mode 100644
index a45e3ae..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/nodetype/NodeTypeProperty.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.jcr.nodetype;
-
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavServletResponse;
-import org.apache.jackrabbit.webdav.property.AbstractDavProperty;
-import org.apache.jackrabbit.webdav.property.DavProperty;
-import org.apache.jackrabbit.webdav.property.DavPropertyName;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.apache.log4j.Logger;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
-import javax.jcr.nodetype.NodeType;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-/**
- * <code>NodeTypeProperty</code>...
- */
-public class NodeTypeProperty extends AbstractDavProperty implements NodeTypeConstants {
-
-    private static Logger log = Logger.getLogger(NodeTypeProperty.class);
-
-    private final Set nodetypeNames = new HashSet();
-
-    public NodeTypeProperty(DavPropertyName name, NodeType nodeType, boolean isProtected) {
-        this(name, new NodeType[] {nodeType}, isProtected);
-    }
-
-    public NodeTypeProperty(DavPropertyName name, NodeType[] nodeTypes, boolean isProtected) {
-        super(name, isProtected);
-        for (int i = 0; i < nodeTypes.length; i++) {
-            NodeType nt = nodeTypes[i];
-            if (nt != null) {
-                nodetypeNames.add(nodeTypes[i].getName());
-            }
-        }
-    }
-
-    /**
-     * Create a new <code>NodeTypeProperty</code> from the specified general
-     * DavProperty object.
-     *
-     * @param property
-     * @throws IllegalArgumentException if the content of the specified property
-     * contains elements other than {@link NodeTypeConstants#XML_NODETYPE}.
-     */
-    public NodeTypeProperty(DavProperty property) throws DavException {
-        super(property.getName(), property.isProtected());
-        Object propValue = property.getValue();
-        Iterator it;
-        if (propValue instanceof List) {
-            it = ((List)propValue).iterator();
-        } else if (propValue instanceof Element) {
-            List l = new ArrayList();
-            l.add(propValue);
-            it = l.iterator();
-        } else {
-            log.warn("Cannot build NodeTypeProperty from the given property.");
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "Cannot build NodeTypeProperty from the given property.");
-        }
-
-            while (it.hasNext()) {
-                Object content = it.next();
-            if (!(content instanceof Element)) {
-                continue;
-                }
-            Element el = (Element)content;
-            if (XML_NODETYPE.equals(el.getLocalName()) && NodeTypeConstants.NAMESPACE.isSame(el.getNamespaceURI())) {
-                String nodetypeName = DomUtil.getText(el);
-                if (nodetypeName != null && !"".equals(nodetypeName)) {
-                    nodetypeNames.add(nodetypeName);
-            }
-	} else {
-                log.debug("'dcr:nodetype' element expected -> ignoring element '" + ((Element)content).getNodeName() + "'");
-            }
-        }
-    }
-
-    /**
-     * Return a set of nodetype names present in this property.
-     *
-     * @return set of nodetype names
-     */
-    public Set getNodeTypeNames() {
-        return nodetypeNames;
-    }
-
-    /**
-     * Returns the value of this property which is a Set of nodetype names.
-     *
-     * @return a Set of nodetype names (String).
-     */
-    public Object getValue() {
-        return nodetypeNames;
-    }
-
-    /**
-     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
-     */
-    public Element toXml(Document document) {
-        Element elem = getName().toXml(document);
-        Iterator it = getNodeTypeNames().iterator();
-        while (it.hasNext()) {
-            String name = it.next().toString();
-            Element ntElem = DomUtil.addChildElement(elem, XML_NODETYPE, NodeTypeConstants.NAMESPACE);
-            DomUtil.addChildElement(ntElem, XML_NODETYPENAME, NodeTypeConstants.NAMESPACE, name);
-        }
-        return elem;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/nodetype/PropertyDefinitionImpl.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/nodetype/PropertyDefinitionImpl.java
deleted file mode 100644
index d7ad597..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/nodetype/PropertyDefinitionImpl.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.jcr.nodetype;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-import javax.jcr.nodetype.PropertyDefinition;
-import javax.jcr.Value;
-import javax.jcr.PropertyType;
-import javax.jcr.RepositoryException;
-
-/**
- * <code>PropertyDefinitionImpl</code>...
- */
-public final class PropertyDefinitionImpl extends ItemDefinitionImpl implements PropertyDefinition {
-
-    private static Logger log = Logger.getLogger(PropertyDefinitionImpl.class);
-
-    private final int type;
-    private final String[] valueConstraints;
-    private final Value[] defaultValues;
-    private final boolean isMultiple;
-
-    private PropertyDefinitionImpl(PropertyDefinition definition) {
-	super(definition);
-
-	type = definition.getRequiredType();
-	valueConstraints = definition.getValueConstraints();
-	defaultValues = definition.getDefaultValues();
-	isMultiple = definition.isMultiple();
-    }
-
-    public static PropertyDefinitionImpl create(PropertyDefinition definition) {
-	if (definition instanceof PropertyDefinitionImpl) {
-	    return (PropertyDefinitionImpl)definition;
-	} else {
-	    return new PropertyDefinitionImpl(definition);
-	}
-    }
-
-    //----------------------------------------< PropertyDefintion interface >---
-    /**
-     * @see PropertyDefinition#getRequiredType()
-     */
-    public int getRequiredType() {
-	return type;
-    }
-
-    /**
-     * @see PropertyDefinition#getValueConstraints()
-     */
-    public String[] getValueConstraints() {
-	return valueConstraints;
-    }
-
-    /**
-     * @see PropertyDefinition#getDefaultValues()
-     */
-    public Value[] getDefaultValues() {
-	return defaultValues;
-    }
-
-    /**
-     * @see PropertyDefinition#isMultiple()
-     */
-    public boolean isMultiple() {
-	return isMultiple;
-    }
-
-    //-------------------------------------< implementation specific method >---
-    /**
-     * Return xml representation
-     *
-     * @return xml representation
-     * @param document
-     */
-    public Element toXml(Document document) {
-	Element elem = super.toXml(document);
-
-        elem.setAttribute(MULTIPLE_ATTRIBUTE, Boolean.toString(isMultiple()));
-        elem.setAttribute(REQUIREDTYPE_ATTRIBUTE, PropertyType.nameFromValue(getRequiredType()));
-
-        // default values may be 'null'
-        Value[] values = getDefaultValues();
-        if (values != null) {
-            Element dvElement = document.createElement(DEFAULTVALUES_ELEMENT);
-            for (int i = 0; i < values.length; i++) {
-                try {
-                    Element valElem = document.createElement(DEFAULTVALUE_ELEMENT);
-                    DomUtil.setText(valElem, values[i].getString());
-                    dvElement.appendChild(valElem);
-                } catch (RepositoryException e) {
-                    // should not occur
-                    log.error(e.getMessage());
-                }
-            }
-            elem.appendChild(dvElement);
-        }
-        // value constraints array is never null.
-        Element constrElem = document.createElement(VALUECONSTRAINTS_ELEMENT);
-        String[] constraints = getValueConstraints();
-        for (int i = 0; i < constraints.length; i++) {
-            Element vcElem = document.createElement(VALUECONSTRAINT_ELEMENT);
-            DomUtil.setText(vcElem, constraints[i]);
-            constrElem.appendChild(vcElem);
-        }
-        elem.appendChild(constrElem);
-
-        return elem;
-    }
-
-    /**
-     * Returns {@link #PROPERTYDEFINITION_ELEMENT}.
-     * 
-     * @return always returns {@link #PROPERTYDEFINITION_ELEMENT}
-     */
-    String getElementName() {
-	return PROPERTYDEFINITION_ELEMENT;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/observation/SubscriptionImpl.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/observation/SubscriptionImpl.java
deleted file mode 100644
index 22a9ca5..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/observation/SubscriptionImpl.java
+++ /dev/null
@@ -1,343 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.jcr.observation;
-
-import org.apache.jackrabbit.uuid.UUID;
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavResourceLocator;
-import org.apache.jackrabbit.webdav.DavServletResponse;
-import org.apache.jackrabbit.webdav.observation.EventBundle;
-import org.apache.jackrabbit.webdav.observation.EventDiscovery;
-import org.apache.jackrabbit.webdav.observation.EventType;
-import org.apache.jackrabbit.webdav.observation.Filter;
-import org.apache.jackrabbit.webdav.observation.ObservationConstants;
-import org.apache.jackrabbit.webdav.observation.ObservationResource;
-import org.apache.jackrabbit.webdav.observation.Subscription;
-import org.apache.jackrabbit.webdav.observation.SubscriptionInfo;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.apache.log4j.Logger;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
-import javax.jcr.RepositoryException;
-import javax.jcr.observation.Event;
-import javax.jcr.observation.EventIterator;
-import javax.jcr.observation.EventListener;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * The <code>Subscription</code> class encapsulates a single subscription with
- * the following responsibilities:<ul>
- * <li>Providing access to the subscription info,</li>
- * <li>Recording events this subscription is interested in,</li>
- * <li>Providing access to the events.</li>
- * </ul>
- */
-public class SubscriptionImpl implements Subscription, ObservationConstants, EventListener {
-
-    private static Logger log = Logger.getLogger(SubscriptionImpl.class);
-    private static final long DEFAULT_TIMEOUT = 300000; // 5 minutes
-
-    private SubscriptionInfo info;
-    private long expirationTime;
-
-    private final DavResourceLocator locator;
-    private final String subscriptionId = UUID.randomUUID().toString();
-    private final List eventBundles = new ArrayList();
-
-    /**
-     * Create a new <code>Subscription</code> with the given {@link SubscriptionInfo}
-     * and {@link org.apache.jackrabbit.webdav.observation.ObservationResource resource}.
-     *
-     * @param info
-     * @param resource
-     */
-    public SubscriptionImpl(SubscriptionInfo info, ObservationResource resource) {
-        setInfo(info);
-        locator = resource.getLocator();
-    }
-
-    /**
-     * Returns the id of this subscription.
-     *
-     * @return subscriptionId
-     */
-    public String getSubscriptionId() {
-        return subscriptionId;
-    }
-
-    /**
-     * Return the Xml representation of this <code>Subscription</code> as required
-     * for the {@link org.apache.jackrabbit.webdav.observation.SubscriptionDiscovery}
-     * webdav property that in included in the response body of a sucessful SUBSCRIBE
-     * request or as part of a PROPFIND response.
-     *
-     * @return Xml representation
-     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
-     * @param document
-     */
-    public Element toXml(Document document) {
-        Element subscr = DomUtil.createElement(document, XML_SUBSCRIPTION, NAMESPACE);
-
-        subscr.appendChild(info.toXml(document));
-        subscr.appendChild(DomUtil.depthToXml(info.isDeep(), document));
-        subscr.appendChild(DomUtil.timeoutToXml(info.getTimeOut(), document));
-
-        Element id = DomUtil.addChildElement(subscr, XML_SUBSCRIPTIONID, NAMESPACE);
-        id.appendChild(DomUtil.hrefToXml(subscriptionId, document));
-        return subscr;
-    }
-
-    //--------------------------------------------< implementation specific >---
-    /**
-     * Modify the {@link SubscriptionInfo} for this subscription.
-     *
-     * @param info
-     */
-    void setInfo(SubscriptionInfo info) {
-        this.info = info;
-        // validate the timeout and adjust value, if it is invalid or missing
-        long timeout = info.getTimeOut();
-        if (timeout <= 0) {
-            timeout = DEFAULT_TIMEOUT;
-        }
-        expirationTime = System.currentTimeMillis() + timeout;
-    }
-
-    /**
-     * @return JCR compliant integer representation of the event types defined
-     * for this {@link SubscriptionInfo}.
-     */
-    int getEventTypes() throws DavException {
-        EventType[] eventTypes = info.getEventTypes();
-        int events = 0;
-        for (int i = 0; i < eventTypes.length; i++) {
-            events |= getEventType(eventTypes[i].getName());
-        }
-        return events;
-    }
-
-    /**
-     * @return a String array with size > 0 or <code>null</code>
-     */
-    String[] getUuidFilters() {
-        return getFilterValues(XML_UUID);
-    }
-
-    /**
-     * @return a String array with size > 0 or <code>null</code>
-     */
-    String[] getNodetypeNameFilters() {
-        return getFilterValues(XML_NODETYPE_NAME);
-    }
-
-    private String[] getFilterValues(String filterLocalName) {
-        Filter[] filters = info.getFilters(filterLocalName, NAMESPACE);
-        List values = new ArrayList();
-        for (int i = 0; i < filters.length; i++) {
-            String val = filters[i].getValue();
-            if (val != null) {
-                values.add(val);
-            }
-        }
-        return (values.size() > 0) ? (String[])values.toArray(new String[values.size()]) : null;
-    }
-
-    /**
-     *
-     * @return true if a {@link ObservationConstants#XML_NOLOCAL} element
-     * is present in the {@link SubscriptionInfo}.
-     */
-    boolean isNoLocal() {
-        return info.isNoLocal();
-    }
-
-    /**
-     * @return true if this subscription is intended to be deep.
-     */
-    boolean isDeep() {
-        return info.isDeep();
-    }
-
-    /**
-     * @return the locator of the {@link ObservationResource resource} this
-     * <code>Subscription</code> was requested for.
-     */
-    DavResourceLocator getLocator() {
-        return locator;
-    }
-
-    /**
-     * Returns true if this <code>Subscription</code> matches the given
-     * resource.
-     *
-     * @param resource
-     * @return true if this <code>Subscription</code> matches the given
-     * resource.
-     */
-    boolean isSubscribedToResource(ObservationResource resource) {
-        return locator.equals(resource.getLocator());
-    }
-
-    /**
-     * Returns true if this <code>Subscription</code> is expired and therefore
-     * stopped recording events.
-     *
-     * @return true if this <code>Subscription</code> is expired
-     */
-    boolean isExpired() {
-        return System.currentTimeMillis() > expirationTime;
-    }
-
-    /**
-     * Returns a {@link org.apache.jackrabbit.webdav.observation.EventDiscovery} object listing all events that were
-     * recorded since the last call to this method and clears the list of event
-     * bundles.
-     *
-     * @return object listing all events that were recorded.
-     * @see #onEvent(EventIterator)
-     */
-    synchronized EventDiscovery discoverEvents() {
-        EventDiscovery ed = new EventDiscovery();
-        Iterator it = eventBundles.iterator();
-        while (it.hasNext()) {
-            EventBundle eb = (EventBundle) it.next();
-            ed.addEventBundle(eb);
-        }
-        // clear list
-        eventBundles.clear();
-        return ed;
-    }
-
-    //--------------------------------------------< EventListener interface >---
-    /**
-     * Records the events passed as a new event bundle in order to make them
-     * available with the next {@link #discoverEvents()} request.
-     *
-     * @param events to be recorded.
-     * @see EventListener#onEvent(EventIterator)
-     * @see #discoverEvents()
-     */
-    public synchronized void onEvent(EventIterator events) {
-        // TODO: correct not to accept events after expiration? without unsubscribing?
-        if (!isExpired()) {
-            eventBundles.add(new EventBundleImpl(events));
-        }
-    }
-
-    //--------------------------------------------------------------------------
-    /**
-     * Static utility method in order to convert the types defined by
-     * {@link javax.jcr.observation.Event} into their Xml representation.
-     *
-     * @param eventType The jcr event type
-     * @return Xml representation of the event type.
-     */
-    private static String getEventName(int eventType) {
-        String eventName;
-        switch (eventType) {
-            case Event.NODE_ADDED:
-                eventName = EVENT_NODEADDED;
-                break;
-            case Event.NODE_REMOVED:
-                eventName = EVENT_NODEREMOVED;
-                break;
-            case Event.PROPERTY_ADDED:
-                eventName = EVENT_PROPERTYADDED;
-                break;
-            case Event.PROPERTY_CHANGED:
-                eventName = EVENT_PROPERTYCHANGED;
-                break;
-            default:
-                //Event.PROPERTY_REMOVED:
-                eventName = EVENT_PROPERTYREMOVED;
-                break;
-        }
-        return eventName;
-    }
-
-    /**
-     * Static utility method to convert an event type name as present in the
-     * Xml request body into the corresponding constant defined by
-     * {@link javax.jcr.observation.Event}.
-     *
-     * @param eventName
-     * @return event type as defined by {@link javax.jcr.observation.Event}.
-     * @throws DavException if the given element cannot be translated
-     * to any of the events defined by {@link javax.jcr.observation.Event}.
-     */
-    private static int getEventType(String eventName) throws DavException {
-        int eType;
-        if (EVENT_NODEADDED.equals(eventName)) {
-            eType = Event.NODE_ADDED;
-        } else if (EVENT_NODEREMOVED.equals(eventName)) {
-            eType = Event.NODE_REMOVED;
-        } else if (EVENT_PROPERTYADDED.equals(eventName)) {
-            eType = Event.PROPERTY_ADDED;
-        } else if (EVENT_PROPERTYCHANGED.equals(eventName)) {
-            eType = Event.PROPERTY_CHANGED;
-        } else if (EVENT_PROPERTYREMOVED.equals(eventName)) {
-            eType = Event.PROPERTY_REMOVED;
-        } else {
-            throw new DavException(DavServletResponse.SC_UNPROCESSABLE_ENTITY, "Invalid event type: "+eventName);
-        }
-        return eType;
-    }
-
-    /**
-     * Inner class <code>EventBundle</code> encapsulats an event bundle as
-     * recorded {@link SubscriptionImpl#onEvent(EventIterator) on event} and
-     * provides the possibility to retrieve the Xml representation of the
-     * bundle and the events included in order to respond to a POLL request.
-     *
-     * @see SubscriptionImpl#discoverEvents()
-     */
-    private class EventBundleImpl implements EventBundle {
-
-        private final EventIterator events;
-
-        private EventBundleImpl(EventIterator events) {
-            this.events = events;
-        }
-
-        public Element toXml(Document document) {
-            Element bundle = DomUtil.createElement(document, XML_EVENTBUNDLE, NAMESPACE);
-            while (events.hasNext()) {
-                Event event = events.nextEvent();
-                Element eventElem = DomUtil.addChildElement(bundle, XML_EVENT, NAMESPACE);
-                // href
-                String eHref = "";
-                try {
-                    boolean isCollection = (event.getType() == Event.NODE_ADDED || event.getType() == Event.NODE_REMOVED);
-                    eHref = locator.getFactory().createResourceLocator(locator.getPrefix(), locator.getWorkspacePath(), event.getPath(), false).getHref(isCollection);
-                } catch (RepositoryException e) {
-                    // should not occur....
-                    log.error(e.getMessage());
-                }
-                eventElem.appendChild(DomUtil.hrefToXml(eHref, document));
-                // eventtype
-                Element eType = DomUtil.addChildElement(eventElem, XML_EVENTTYPE, NAMESPACE);
-                DomUtil.addChildElement(eType, getEventName(event.getType()), NAMESPACE);
-                // user id
-                DomUtil.addChildElement(eventElem, XML_EVENTUSERID, NAMESPACE, event.getUserID());
-            }
-            return bundle;
-        }
-
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/observation/SubscriptionManagerImpl.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/observation/SubscriptionManagerImpl.java
deleted file mode 100644
index e279b9c..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/observation/SubscriptionManagerImpl.java
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.jcr.observation;
-
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavResourceLocator;
-import org.apache.jackrabbit.webdav.DavServletResponse;
-import org.apache.jackrabbit.webdav.DavSession;
-import org.apache.jackrabbit.webdav.jcr.JcrDavException;
-import org.apache.jackrabbit.webdav.observation.EventDiscovery;
-import org.apache.jackrabbit.webdav.observation.ObservationResource;
-import org.apache.jackrabbit.webdav.observation.Subscription;
-import org.apache.jackrabbit.webdav.observation.SubscriptionDiscovery;
-import org.apache.jackrabbit.webdav.observation.SubscriptionInfo;
-import org.apache.jackrabbit.webdav.observation.SubscriptionManager;
-import org.apache.log4j.Logger;
-
-import javax.jcr.RepositoryException;
-import javax.jcr.observation.ObservationManager;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-/**
- * <code>SubscriptionManager</code> collects all subscriptions requested, handles
- * the subscription timeout and provides METHODS to discover subscriptions
- * present on a given resource as well as events for an specific subscription.
- *
- * @todo make sure all expired subscriptions are removed!
- */
-public class SubscriptionManagerImpl implements SubscriptionManager {
-
-    private static Logger log = Logger.getLogger(SubscriptionManager.class);
-
-    /**
-     * Map containing all {@link org.apache.jackrabbit.webdav.observation.Subscription subscriptions}.
-     */
-    private final SubscriptionMap subscriptions = new SubscriptionMap();
-
-    /**
-     * Retrieve the {@link org.apache.jackrabbit.webdav.observation.SubscriptionDiscovery} object for the given
-     * resource. Note, that the discovery object will be empty if there are
-     * no subscriptions present.
-     *
-     * @param resource
-     * @todo is it correct to return subscriptions made by another session?
-     */
-    public SubscriptionDiscovery getSubscriptionDiscovery(ObservationResource resource) {
-        Subscription[] subsForResource = subscriptions.getByPath(resource.getLocator());
-        return new SubscriptionDiscovery(subsForResource);
-    }
-
-    /**
-     * Create a new <code>Subscription</code> or update an existing <code>Subscription</code>
-     * and add it as eventlistener to the {@link javax.jcr.observation.ObservationManager}.
-     *
-     * @param info
-     * @param subscriptionId
-     * @param resource
-     * @return <code>Subscription</code> that has been added to the {@link javax.jcr.observation.ObservationManager}
-     * @throws DavException if the subscription fails
-     */
-    public Subscription subscribe(SubscriptionInfo info, String subscriptionId,
-                                  ObservationResource resource)
-            throws DavException {
-
-        SubscriptionImpl subscription;
-        DavSession session = resource.getSession();
-        if (subscriptionId == null) {
-            // new subscription
-            subscription = new SubscriptionImpl(info, resource);
-            registerSubscription(subscription, session);
-
-            // ajust references to this subscription
-            subscriptions.put(subscription.getSubscriptionId(), subscription);
-            session.addReference(subscription.getSubscriptionId());
-        } else {
-            // refresh/modify existing one
-            subscription = validate(subscriptionId, resource);
-            subscription.setInfo(info);
-            registerSubscription(subscription, session);
-        }
-        return subscription;
-    }
-
-    /**
-     * Register the event listener defined by the given subscription to the
-     * repository's observation manager.
-     *
-     * @param subscription
-     * @param session
-     * @throws DavException
-     */
-    private void registerSubscription(SubscriptionImpl subscription, DavSession session)
-            throws DavException {
-        try {
-            ObservationManager oMgr = session.getRepositorySession().getWorkspace().getObservationManager();
-            String itemPath = subscription.getLocator().getJcrPath();
-            oMgr.addEventListener(subscription, subscription.getEventTypes(),
-                    itemPath, subscription.isDeep(),
-                    subscription.getUuidFilters(),
-                    subscription.getNodetypeNameFilters(),
-                    subscription.isNoLocal());
-        } catch (RepositoryException e) {
-            log.error("Unable to register eventlistener: "+e.getMessage());
-            throw new JcrDavException(e);
-        }
-    }
-
-    /**
-     * Unsubscribe the <code>Subscription</code> with the given id and remove it
-     * from the {@link javax.jcr.observation.ObservationManager} as well as
-     * from the internal map.
-     *
-     * @param subscriptionId
-     * @param resource
-     * @throws DavException
-     */
-    public void unsubscribe(String subscriptionId, ObservationResource resource)
-            throws DavException {
-
-        SubscriptionImpl subs = validate(subscriptionId, resource);
-        unregisterSubscription(subs, resource.getSession());
-    }
-
-    /**
-     * Remove the event listener defined by the specified subscription from
-     * the repository's observation manager.
-     *
-     * @param subscription
-     * @param session
-     * @throws DavException
-     */
-    private void unregisterSubscription(SubscriptionImpl subscription,
-                                        DavSession session) throws DavException {
-        try {
-            session.getRepositorySession().getWorkspace().getObservationManager().removeEventListener(subscription);
-            String sId = subscription.getSubscriptionId();
-
-            // clean up any references
-            subscriptions.remove(sId);
-            session.removeReference(sId);
-
-        } catch (RepositoryException e) {
-            log.error("Unable to remove eventlistener: "+e.getMessage());
-            throw new JcrDavException(e);
-        }
-    }
-
-    /**
-     * Retrieve all event bundles accumulated since for the subscription specified
-     * by the given id.
-     *
-     * @param subscriptionId
-     * @param resource
-     * @return object encapsulating the events.
-     */
-    public EventDiscovery poll(String subscriptionId, ObservationResource resource)
-            throws DavException {
-
-        SubscriptionImpl subs = validate(subscriptionId, resource);
-        return subs.discoverEvents();
-    }
-
-    /**
-     * Validate the given subscription id. The validation will fail under the following
-     * conditions:<ul>
-     * <li>The subscription with the given id does not exist,</li>
-     * <li>DavResource path does not match the subscription id,</li>
-     * <li>The subscription with the given id is already expired.</li>
-     * </ul>
-     *
-     * @param subscriptionId
-     * @param resource
-     * @return <code>Subscription</code> with the given id.
-     * @throws DavException if an error occured while retrieving the <code>Subscription</code>
-     */
-    private SubscriptionImpl validate(String subscriptionId, ObservationResource resource)
-            throws DavException {
-
-        SubscriptionImpl subs;
-        if (subscriptions.contains(subscriptionId)) {
-            subs = (SubscriptionImpl) subscriptions.get(subscriptionId);
-            if (!subs.isSubscribedToResource(resource)) {
-                throw new DavException(DavServletResponse.SC_PRECONDITION_FAILED, "Attempt to operate on subscription with invalid resource path.");
-            }
-            if (subs.isExpired()) {
-                unregisterSubscription(subs, resource.getSession());
-                throw new DavException(DavServletResponse.SC_PRECONDITION_FAILED, "Attempt to  operate on expired subscription.");
-            }
-            return subs;
-        } else {
-            throw new DavException(DavServletResponse.SC_PRECONDITION_FAILED, "Attempt to modify or to poll for non-existing subscription.");
-        }
-    }
-
-    /**
-     * Private inner class <code>SubscriptionMap</code> that allows for quick
-     * access by resource path as well as by subscription id.
-     */
-    private class SubscriptionMap {
-
-        private HashMap subscriptions = new HashMap();
-        private HashMap ids = new HashMap();
-
-        private boolean contains(String subscriptionId) {
-            return subscriptions.containsKey(subscriptionId);
-        }
-
-        private Subscription get(String subscriptionId) {
-            return (Subscription) subscriptions.get(subscriptionId);
-        }
-
-        private void put(String subscriptionId, SubscriptionImpl subscription) {
-            subscriptions.put(subscriptionId, subscription);
-            DavResourceLocator key = subscription.getLocator();
-            Set idSet;
-            if (ids.containsKey(key)) {
-                idSet = (Set) ids.get(key);
-            } else {
-                idSet = new HashSet();
-                ids.put(key, idSet);
-            }
-            if (!idSet.contains(subscriptionId)) {
-                idSet.add(subscriptionId);
-            }
-        }
-
-        private void remove(String subscriptionId) {
-            SubscriptionImpl sub = (SubscriptionImpl) subscriptions.remove(subscriptionId);
-            ((Set)ids.get(sub.getLocator())).remove(subscriptionId);
-        }
-
-        private Subscription[] getByPath(DavResourceLocator locator) {
-            Set idSet = (Set) ids.get(locator);
-            if (idSet != null && !idSet.isEmpty()) {
-                Iterator idIterator = idSet.iterator();
-                Subscription[] subsForResource = new Subscription[idSet.size()];
-                int i = 0;
-                while (idIterator.hasNext()) {
-                    subsForResource[i] = (Subscription) subscriptions.get(idIterator.next());
-                }
-                return subsForResource;
-            } else {
-                return new Subscription[0];
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/package.html b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/package.html
deleted file mode 100644
index 17e97ed..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/package.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<body>
-Contains JCR specific implementations.
-</body>
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/property/LengthsProperty.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/property/LengthsProperty.java
deleted file mode 100644
index 929e83f..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/property/LengthsProperty.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.jcr.property;
-
-import org.apache.jackrabbit.webdav.property.AbstractDavProperty;
-import org.apache.jackrabbit.webdav.jcr.ItemResourceConstants;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-/**
- * <code>LengthsProperty</code> extends {@link org.apache.jackrabbit.webdav.property.DavProperty} providing
- * utilities to handle the multiple lengths of the property item represented
- * by this resource.
- */
-public class LengthsProperty extends AbstractDavProperty implements ItemResourceConstants {
-
-    private final long[] value;
-
-    /**
-     * Create a new <code>LengthsProperty</code> from the given long array.
-     *
-     * @param lengths as retrieved from the JCR property
-     */
-    public LengthsProperty(long[] lengths) {
-	super(JCR_LENGTHS, true);
-	this.value = lengths;
-    }
-
-    /**
-     * Returns an array of {@link long}s representing the value of this
-     * property.
-     *
-     * @return an array of {@link long}s
-     */
-    public Object getValue() {
-	return value;
-    }
-
-    /**
-     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
-     */
-    public Element toXml(Document document) {
-        Element elem = getName().toXml(document);
-        for (int i = 0; i < value.length; i++) {
-            String txtContent = String.valueOf(value[i]);
-	    DomUtil.addChildElement(elem, XML_LENGTH, ItemResourceConstants.NAMESPACE, txtContent);
-	}
-        return elem;
-    }
-
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/property/NamespacesProperty.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/property/NamespacesProperty.java
deleted file mode 100644
index 09184b6..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/property/NamespacesProperty.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.jcr.property;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.property.AbstractDavProperty;
-import org.apache.jackrabbit.webdav.property.DavProperty;
-import org.apache.jackrabbit.webdav.jcr.ItemResourceConstants;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavServletResponse;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-import javax.jcr.NamespaceRegistry;
-import javax.jcr.RepositoryException;
-import java.util.Properties;
-import java.util.List;
-import java.util.Iterator;
-import java.util.Enumeration;
-
-/**
- * <code>NamespacesProperty</code>...
- */
-public class NamespacesProperty extends AbstractDavProperty implements ItemResourceConstants {
-
-    private static Logger log = Logger.getLogger(NamespacesProperty.class);
-
-    private final Properties value;
-
-    public NamespacesProperty(NamespaceRegistry nsReg) throws RepositoryException {
-        super(JCR_NAMESPACES, false);
-        String[] prefixes = nsReg.getPrefixes();
-        value = new Properties();
-        for (int i = 0; i < prefixes.length; i++) {
-            value.setProperty(prefixes[i], nsReg.getURI(prefixes[i]));
-        }
-    }
-
-    public NamespacesProperty(DavProperty property) throws DavException {
-        super(JCR_NAMESPACES, false);
-        Object v = property.getValue();
-        if (!(v instanceof List)) {
-            log.warn("Unexpected structure of dcr:namespace property.");
-            throw new DavException(DavServletResponse.SC_INTERNAL_SERVER_ERROR);
-        }
-        value = new Properties();
-        // retrieve list of prefix/uri pairs that build the new values of
-        // the ns-registry
-        Iterator it = ((List)v).iterator();
-        while (it.hasNext()) {
-            Object listEntry = it.next();
-            if (listEntry instanceof Element) {
-                Element e = (Element)listEntry;
-                if (XML_NAMESPACE.equals(e.getLocalName())) {
-                    String prefix = DomUtil.getChildText(e, XML_PREFIX, ItemResourceConstants.NAMESPACE);
-                    String uri = DomUtil.getChildText(e, XML_URI, ItemResourceConstants.NAMESPACE);
-                    value.setProperty(prefix, uri);
-                }
-            }
-        }
-    }
-
-    public Properties getNamespaces() {
-        return value;
-    }
-
-    public Object getValue() {
-        return value;
-    }
-
-    /**
-     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
-     */
-    public Element toXml(Document document) {
-        Element elem = getName().toXml(document);
-        Enumeration prefixes = value.propertyNames();
-        while (prefixes.hasMoreElements()) {
-            String prefix = (String)prefixes.nextElement();
-            String uri = value.getProperty(prefix);
-            Element nsElem = DomUtil.addChildElement(elem, XML_NAMESPACE, ItemResourceConstants.NAMESPACE);
-            DomUtil.addChildElement(nsElem, XML_PREFIX, ItemResourceConstants.NAMESPACE, prefix);
-            DomUtil.addChildElement(nsElem, XML_URI, ItemResourceConstants.NAMESPACE, uri);
-        }
-        return elem;
-    }
-
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/property/ValuesProperty.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/property/ValuesProperty.java
deleted file mode 100644
index 9a6ed98..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/property/ValuesProperty.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.jcr.property;
-
-import org.apache.jackrabbit.webdav.property.AbstractDavProperty;
-import org.apache.jackrabbit.webdav.property.DavProperty;
-import org.apache.jackrabbit.webdav.jcr.ItemResourceConstants;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.apache.jackrabbit.value.ValueHelper;
-import org.apache.log4j.Logger;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-import javax.jcr.Value;
-import javax.jcr.ValueFormatException;
-import javax.jcr.RepositoryException;
-import javax.jcr.PropertyType;
-import java.util.List;
-import java.util.Iterator;
-import java.util.ArrayList;
-
-/**
- * <code>ValuesProperty</code> extends {@link org.apache.jackrabbit.webdav.property.DavProperty} providing
- * utilities to handle the multiple values of the property item represented
- * by this resource.
- */
-public class ValuesProperty extends AbstractDavProperty implements ItemResourceConstants {
-
-    private static Logger log = Logger.getLogger(ValuesProperty.class);
-
-    private final Value[] jcrValues;
-
-    /**
-     * Create a new <code>ValuesProperty</code> from the given {@link javax.jcr.Value Value
-     * array}.
-     *
-     * @param values Array of Value objects as obtained from the JCR property.
-     */
-    public ValuesProperty(Value[] values) throws ValueFormatException, RepositoryException {
-	super(JCR_VALUES, false);
-	// finally set the value to the DavProperty
-	jcrValues = values;
-    }
-    
-    /**
-     * Wrap the specified <code>DavProperty</code> in a new <code>ValuesProperty</code>.
-     *
-     * @param property
-     */
-    public ValuesProperty(DavProperty property) throws RepositoryException {
-	super(JCR_VALUES, false);
-
-	if (!JCR_VALUES.equals(property.getName())) {
-	    throw new IllegalArgumentException("ValuesProperty may only be created with a property that has name="+JCR_VALUES.getName());
-	}
-
-	List valueElements = new ArrayList();
-        Object propValue = property.getValue();
-        if (propValue != null) {
-            if (isValueElement(propValue)) {
-                valueElements.add(propValue);
-            } else if (propValue instanceof List) {
-	    Iterator elemIt = ((List)property.getValue()).iterator();
-	    while (elemIt.hasNext()) {
-		Object el = elemIt.next();
-		/* make sure, only Elements with name 'value' are used for
-		* the 'value' field. any other content (other elements, text,
-		* comment etc.) is ignored. NO bad-request/conflict error is
-		* thrown.
-		*/
-                    if (isValueElement(propValue)) {
-		    valueElements.add(el);
-		}
-	    }
-            }
-        }
-	    /* fill the 'value' with the valid 'value' elements found before */
-        Element[] elems = (Element[])valueElements.toArray(new Element[valueElements.size()]);
-	jcrValues = new Value[elems.length];
-	for (int i = 0; i < elems.length; i++) {
-            String value = DomUtil.getText(elems[i]);
-	    jcrValues[i] = ValueHelper.deserialize(value, PropertyType.STRING, false);
-	}
-	}
-
-    private static boolean isValueElement(Object obj) {
-        return obj instanceof Element && XML_VALUE.equals(((Element)obj).getLocalName());
-    }
-
-    /**
-     * Converts the value of this property to a {@link javax.jcr.Value value array}.
-     *
-     * @return Array of Value objects
-     * @throws ValueFormatException if convertion of the internal jcr values to
-     * the specified value type fails.
-     */
-    public Value[] getValues(int propertyType) throws ValueFormatException {
-        Value[] vs = new Value[jcrValues.length];
-        for (int i = 0; i < jcrValues.length; i++) {
-            vs[i] = ValueHelper.convert(jcrValues[i], propertyType);
-	}
-	return jcrValues;
-    }
-
-    /**
-     * Returns an array of {@link Value}s representing the value of this
-     * property.
-     *
-     * @return an array of {@link Value}s
-     * @see #getValues(int)
-     */
-    public Object getValue() {
-	return jcrValues;
-    }
-
-    public Element toXml(Document document) {
-        Element elem = getName().toXml(document);
-        for (int i = 0; i < jcrValues.length; i++) {
-            try {
-                DomUtil.addChildElement(elem, XML_VALUE, ItemResourceConstants.NAMESPACE, jcrValues[i].getString());
-            } catch (RepositoryException e) {
-                log.error("Unexpected Error while converting jcr value to String: " + e.getMessage());
-    }
-        }
-        return elem;
-    }
-
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/search/SearchResourceImpl.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/search/SearchResourceImpl.java
deleted file mode 100644
index 214a4e8..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/search/SearchResourceImpl.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.jcr.search;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.xml.Namespace;
-import org.apache.jackrabbit.webdav.search.SearchResource;
-import org.apache.jackrabbit.webdav.search.QueryGrammerSet;
-import org.apache.jackrabbit.webdav.search.SearchInfo;
-import org.apache.jackrabbit.webdav.jcr.JcrDavException;
-import org.apache.jackrabbit.webdav.DavSession;
-import org.apache.jackrabbit.webdav.DavResourceLocator;
-import org.apache.jackrabbit.webdav.MultiStatus;
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavServletResponse;
-import org.apache.jackrabbit.webdav.MultiStatusResponse;
-import org.apache.jackrabbit.JcrConstants;
-
-import javax.jcr.query.QueryManager;
-import javax.jcr.query.Query;
-import javax.jcr.query.QueryResult;
-import javax.jcr.query.InvalidQueryException;
-import javax.jcr.query.RowIterator;
-import javax.jcr.query.Row;
-import javax.jcr.RepositoryException;
-import javax.jcr.Node;
-import javax.jcr.Value;
-
-/**
- * <code>SearchResourceImpl</code>...
- */
-public class SearchResourceImpl implements SearchResource {
-
-    private static Logger log = Logger.getLogger(SearchResourceImpl.class);
-
-    private final DavSession session;
-    private final DavResourceLocator locator;
-
-    public SearchResourceImpl(DavResourceLocator locator, DavSession session) {
-        this.session = session;
-        this.locator = locator;
-    }
-
-    //-------------------------------------------< SearchResource interface >---
-    /**
-     * @see SearchResource#getQueryGrammerSet()
-     */
-    public QueryGrammerSet getQueryGrammerSet()  {
-        QueryGrammerSet qgs = new QueryGrammerSet();
-        try {
-            QueryManager qMgr = session.getRepositorySession().getWorkspace().getQueryManager();
-            String[] langs = qMgr.getSupportedQueryLanguages();
-            for (int i = 0; i < langs.length; i++) {
-                // todo: define proper namespace
-                qgs.addQueryLanguage(langs[i], Namespace.EMPTY_NAMESPACE);
-            }
-        } catch (RepositoryException e) {
-            log.debug(e.getMessage());
-        }
-        return qgs;
-    }
-
-    /**
-     * Execute the query defined by the given <code>sInfo</code>.
-     *
-     * @see SearchResource#search(org.apache.jackrabbit.webdav.search.SearchInfo)
-     */
-    public MultiStatus search(SearchInfo sInfo) throws DavException {
-        try {
-            Query q = getQuery(sInfo);
-            QueryResult qR = q.execute();
-            return queryResultToMultiStatus(qR);
-
-        } catch (RepositoryException e) {
-            throw new JcrDavException(e);
-        }
-    }
-
-    /**
-     * Create a query from the information present in the <code>sInfo</code>
-     * object.<br>The following JCR specific logic is applied:
-     * <ul>
-     * <li>If the requested resource represents a node with nodetype nt:query, the
-     * request body is ignored and the query defined with the node is executed
-     * instead.</li>
-     * <li>If the requested resource does not represent an existing item, the
-     * specified query is persisted by calling {@link Query#storeAsNode(String)}.</li>
-     * </ul>
-     * @param sInfo defining the query to be executed
-     * @return <code>Query</code> object.
-     * @throws javax.jcr.query.InvalidQueryException if the query defined by <code>sInfo</code> is invalid
-     * @throws RepositoryException the query manager cannot be accessed or if
-     * another error occurs.
-     * @throws DavException if <code>sInfo</code> is <code>null</code> and
-     * the underlying repository item is not an nt:query node or if an error
-     * occurs when calling {@link Query#storeAsNode(String)}/
-     */
-    private Query getQuery(SearchInfo sInfo)
-            throws InvalidQueryException, RepositoryException, DavException {
-
-        Node rootNode = session.getRepositorySession().getRootNode();
-        QueryManager qMgr = session.getRepositorySession().getWorkspace().getQueryManager();
-
-        // test if query is defined by requested repository node
-        String itemPath = locator.getJcrPath();
-        if (!rootNode.getPath().equals(itemPath)) {
-            String qNodeRelPath = itemPath.substring(1);
-            if (rootNode.hasNode(qNodeRelPath)) {
-                Node qNode = rootNode.getNode(qNodeRelPath);
-                if (qNode.isNodeType(JcrConstants.NT_QUERY)) {
-                    return qMgr.getQuery(qNode);
-                }
-            }
-        }
-
-        Query q;
-        if (sInfo != null) {
-            q = qMgr.createQuery(sInfo.getQuery(), sInfo.getLanguageName());
-        } else {
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST, locator.getResourcePath() + " is not a nt:query node -> searchRequest body required.");
-        }
-
-        /* test if resource path does not exist -> thus indicating that
-        the query must be made persistent by calling Query.save(String) */
-        if (!session.getRepositorySession().itemExists(itemPath)) {
-            try {
-                q.storeAsNode(itemPath);
-            } catch (RepositoryException e) {
-                // ItemExistsException should never occur.
-                new JcrDavException(e);
-            }
-        }
-        return q;
-    }
-
-    /**
-     * Build a <code>MultiStatus</code> object from the specified query result.
-     *
-     * @param qResult <code>QueryResult</code> as obtained from {@link javax.jcr.query.Query#execute()}.
-     * @return <code>MultiStatus</code> object listing the query result in
-     * Webdav compatible form.
-     * @throws RepositoryException
-     */
-    private MultiStatus queryResultToMultiStatus(QueryResult qResult)
-            throws RepositoryException {
-        MultiStatus ms = new MultiStatus();
-
-        String[] columnNames = qResult.getColumnNames();
-        RowIterator rowIter = qResult.getRows();
-        while (rowIter.hasNext()) {
-            Row row = rowIter.nextRow();
-            Value[] values = row.getValues();
-
-            // get the jcr:path column indicating the node path and build
-            // a webdav compliant resource path of it.
-            String itemPath = row.getValue(JcrConstants.JCR_PATH).getString();
-            // create a new ms-response for this row of the result set
-            DavResourceLocator loc = locator.getFactory().createResourceLocator(locator.getPrefix(), locator.getWorkspacePath(), itemPath, false);
-            String href = loc.getHref(true);
-            MultiStatusResponse resp = new MultiStatusResponse(href, null);
-            // build the s-r-property
-            SearchResultProperty srp = new SearchResultProperty(columnNames, values);
-            resp.add(srp);
-            ms.addResponse(resp);
-        }
-        return ms;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/search/SearchResultProperty.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/search/SearchResultProperty.java
deleted file mode 100644
index db8da60..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/search/SearchResultProperty.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.jcr.search;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.property.DavPropertyName;
-import org.apache.jackrabbit.webdav.property.AbstractDavProperty;
-import org.apache.jackrabbit.webdav.property.DavProperty;
-import org.apache.jackrabbit.webdav.jcr.ItemResourceConstants;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.apache.jackrabbit.value.ValueHelper;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-import javax.jcr.Value;
-import javax.jcr.RepositoryException;
-import javax.jcr.PropertyType;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Iterator;
-
-/**
- * <code>SearchResultProperty</code>...
- */
-// todo: find proper solution for transporting search results...
-public class SearchResultProperty extends AbstractDavProperty implements ItemResourceConstants {
-
-    private static Logger log = Logger.getLogger(SearchResultProperty.class);
-
-    public static final DavPropertyName SEARCH_RESULT_PROPERTY = DavPropertyName.create("search-result-property", ItemResourceConstants.NAMESPACE);
-
-    private final String[] columnNames;
-    private final Value[] values;
-
-    /**
-     * Creates a new <code>SearchResultProperty</code>.
-     *
-     * @param columnNames the column names of the search row represented by this
-     * dav property.
-     * @param values the values present in the columns
-     */
-    public SearchResultProperty(String[] columnNames, Value[] values) {
-        super(SEARCH_RESULT_PROPERTY, true);
-        this.columnNames = columnNames;
-        this.values = values;
-    }
-
-    /**
-     * Wrap the specified <code>DavProperty</code> in a new <code>SearchResultProperty</code>.
-     *
-     * @param property
-     * @throws RepositoryException if an error occurs while build the property value
-     * @throws IllegalArgumentException if the specified property does have the
-     * required form.
-     */
-    public SearchResultProperty(DavProperty property) throws RepositoryException {
-        super(SEARCH_RESULT_PROPERTY, true);
-        if (!SEARCH_RESULT_PROPERTY.equals(property.getName())) {
-	    throw new IllegalArgumentException("SearchResultProperty may only be created with a property that has name="+SEARCH_RESULT_PROPERTY.getName());
-	}
-
-        List colList = new ArrayList();
-        List valList = new ArrayList();
-
-        if (property.getValue() instanceof List) {
-            List l = (List) property.getValue();
-
-            String name = null;
-            String value = null;
-            int i = 0;
-            Iterator elemIt = l.iterator();
-            while (elemIt.hasNext()) {
-                Object el = elemIt.next();
-                if (el instanceof Element) {
-                    String txt = DomUtil.getText((Element)el);
-                    if (JCR_NAME.getName().equals(((Element)el).getLocalName())) {
-                        name = txt;
-                    } else if (JCR_VALUE.getName().equals(((Element)el).getLocalName())) {
-                        value = txt;
-                    } else if (JCR_TYPE.getName().equals(((Element)el).getLocalName())) {
-                        int type = PropertyType.valueFromName(txt);
-                        if (name == null) {
-                            throw new IllegalArgumentException("SearchResultProperty requires a set of 'dcr:name','dcr:value' and 'dcr:type' xml elements.");
-                        }
-                        colList.add(name);
-                        valList.add((value == null) ? null : ValueHelper.deserialize(value, type, false));
-                        // reset...
-                        name = null;
-                        value = null;
-                        i++;
-                    }
-                }
-            }
-        } else {
-            new IllegalArgumentException("SearchResultProperty requires a list of 'dcr:name','dcr:value' and 'dcr:type' xml elements.");
-        }
-
-        columnNames = (String[]) colList.toArray(new String[colList.size()]);
-        values = (Value[]) valList.toArray(new Value[valList.size()]);
-    }
-
-    /**
-     * Return the column names representing the names of the properties present
-     * in the {@link #getValues() values}.
-     *
-     * @return columnNames
-     */
-    public String[] getColumnNames() {
-        return columnNames;
-    }
-
-    /**
-     * Return the values representing the values of that row in the search
-     * result table.
-     *
-     * @return values
-     * @see javax.jcr.query.Row#getValues()
-     */
-    public Value[] getValues() {
-        return values;
-    }
-
-
-    /**
-     * Same as {@link #getValues()}
-     *
-     * @return Array of JCR Value object
-     */
-    public Object getValue() {
-        return values;
-    }
-
-    /**
-     * Return the xml representation of this webdav property. For every value in
-     * the query result row a dcr:name, dcr:value and dcr:type element is created.
-     * Example:
-     * <pre>
-     * -----------------------------------------------------------
-     *   col-name  |   bla   |   bli   |  dcr:path  |  dcr:score
-     * -----------------------------------------------------------
-     *   value     |   xxx   |   111   |  /aNode    |    1
-     *   type      |    1    |    3    |     8      |    3
-     * -----------------------------------------------------------
-     * </pre>
-     * results in:
-     * <pre>
-     * &lt;dcr:name&gt;bla&lt;dcr:name/&gt;
-     * &lt;dcr:value&gt;xxx&lt;dcr:value/&gt;
-     * &lt;dcr:type&gt;String&lt;dcr:value/&gt;
-     * &lt;dcr:name&gt;bli&lt;dcr:name/&gt;
-     * &lt;dcr:value&gt;111&lt;dcr:value/&gt;
-     * &lt;dcr:type&gt;Long&lt;dcr:value/&gt;
-     * &lt;dcr:name&gt;jcr:path&lt;dcr:name/&gt;
-     * &lt;dcr:value&gt;/aNode&lt;dcr:value/&gt;
-     * &lt;dcr:type&gt;Path&lt;dcr:value/&gt;
-     * &lt;dcr:name&gt;jcr:score&lt;dcr:name/&gt;
-     * &lt;dcr:value&gt;1&lt;dcr:value/&gt;
-     * &lt;dcr:type&gt;Long&lt;dcr:value/&gt;
-     * </pre>
-     *
-     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(org.w3c.dom.Document)
-     */
-    public Element toXml(Document document) {
-        Element elem = getName().toXml(document);
-        for (int i = 0; i < columnNames.length; i++) {
-            String propertyName = columnNames[i];
-            Value propertyValue = values[i];
-            String valueStr = null;
-            if (propertyValue != null) {
-                try {
-                    valueStr = propertyValue.getString();
-                } catch (RepositoryException e) {
-                    log.error(e.getMessage());
-                }
-            }
-            String type = (propertyValue == null) ? PropertyType.TYPENAME_STRING : PropertyType.nameFromValue(propertyValue.getType());
-
-            Element child = JCR_NAME.toXml(document);
-            DomUtil.setText(child, propertyName);
-            elem.appendChild(child);
-
-            child = JCR_VALUE.toXml(document);
-            DomUtil.setText(child, valueStr);
-            elem.appendChild(child);
-
-            child = JCR_TYPE.toXml(document);
-            DomUtil.setText(child, type);
-            elem.appendChild(child);
-        }
-        return elem;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/transaction/TxLockManagerImpl.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/transaction/TxLockManagerImpl.java
deleted file mode 100644
index fe27110..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/transaction/TxLockManagerImpl.java
+++ /dev/null
@@ -1,698 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.jcr.transaction;
-
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavResource;
-import org.apache.jackrabbit.webdav.DavResourceLocator;
-import org.apache.jackrabbit.webdav.DavServletResponse;
-import org.apache.jackrabbit.webdav.DavSession;
-import org.apache.jackrabbit.webdav.WebdavResponse;
-import org.apache.jackrabbit.webdav.jcr.JcrDavException;
-import org.apache.jackrabbit.webdav.lock.ActiveLock;
-import org.apache.jackrabbit.webdav.lock.LockInfo;
-import org.apache.jackrabbit.webdav.lock.LockManager;
-import org.apache.jackrabbit.webdav.lock.Scope;
-import org.apache.jackrabbit.webdav.lock.Type;
-import org.apache.jackrabbit.webdav.transaction.TransactionConstants;
-import org.apache.jackrabbit.webdav.transaction.TransactionInfo;
-import org.apache.jackrabbit.webdav.transaction.TransactionResource;
-import org.apache.jackrabbit.webdav.transaction.TxActiveLock;
-import org.apache.jackrabbit.webdav.transaction.TxLockManager;
-import org.apache.jackrabbit.util.Text;
-import org.apache.log4j.Logger;
-
-import javax.jcr.RepositoryException;
-import javax.jcr.Item;
-import javax.jcr.PathNotFoundException;
-import javax.transaction.xa.XAException;
-import javax.transaction.xa.XAResource;
-import javax.transaction.xa.Xid;
-import java.util.HashMap;
-import java.util.Iterator;
-
-/**
- * <code>TxLockManagerImpl</code> manages locks with locktype
- * '{@link TransactionConstants#TRANSACTION dcr:transaction}'.
- * <p/>
- * todo: removing all expired locks
- * todo: 'local' and 'global' are not accurate terms in the given context > replace
- * todo: the usage of the 'global' transaction is not according to the JTA specification,
- * which explicitely requires any transaction present on a servlet to be completed before
- * the service method returns. Starting/completing transactions on the session object,
- * which is possible with the jackrabbit implementation is a hack.
- * todo: review of this transaction part is therefore required. Is there a use-case
- * for those 'global' transactions at all...
- */
-public class TxLockManagerImpl implements TxLockManager {
-
-    private static Logger log = Logger.getLogger(TxLockManagerImpl.class);
-
-    private TransactionMap map = new TransactionMap();
-
-    /**
-     * Create a new lock.
-     *
-     * @param lockInfo as present in the request body.
-     * @param resource
-     * @return the lock
-     * @throws DavException             if the lock could not be obtained.
-     * @throws IllegalArgumentException if the resource is <code>null</code> or
-     *                                  does not implement {@link TransactionResource} interface.
-     * @see LockManager#createLock(org.apache.jackrabbit.webdav.lock.LockInfo, org.apache.jackrabbit.webdav.DavResource)
-     */
-    public ActiveLock createLock(LockInfo lockInfo, DavResource resource)
-            throws DavException {
-        if (resource == null || !(resource instanceof TransactionResource)) {
-            throw new IllegalArgumentException("Invalid resource");
-        }
-        return createLock(lockInfo, (TransactionResource) resource);
-    }
-
-    /**
-     * Create a new lock.
-     *
-     * @param lockInfo
-     * @param resource
-     * @return the lock
-     * @throws DavException if the request lock has the wrong lock type or if
-     *                      the lock could not be obtained for any reason.
-     */
-    private synchronized ActiveLock createLock(LockInfo lockInfo, TransactionResource resource)
-            throws DavException {
-        if (!lockInfo.isDeep() || !TransactionConstants.TRANSACTION.equals(lockInfo.getType())) {
-            throw new DavException(DavServletResponse.SC_PRECONDITION_FAILED);
-        }
-
-        ActiveLock existing = getLock(lockInfo.getType(), lockInfo.getScope(), resource);
-        if (existing != null) {
-            throw new DavException(DavServletResponse.SC_LOCKED);
-        }
-        // TODO: check for locks on member resources is required as well for lock is always deep!
-
-        Transaction tx = createTransaction(resource.getLocator(), lockInfo);
-        tx.start(resource);
-
-        // keep references to this lock
-        addReferences(tx, getMap(resource), resource);
-
-        return tx.getLock();
-    }
-
-    /**
-     * Build the transaction object associated by the lock.
-     *
-     * @param locator
-     * @param lockInfo
-     * @return
-     */
-    private Transaction createTransaction(DavResourceLocator locator, LockInfo lockInfo) {
-        if (TransactionConstants.GLOBAL.equals(lockInfo.getScope())) {
-            return new GlobalTransaction(locator, new TxActiveLock(lockInfo));
-        } else {
-            return new LocalTransaction(locator, new TxActiveLock(lockInfo));
-        }
-    }
-
-    /**
-     * Refresh the lock indentified by the given lock token.
-     *
-     * @param lockInfo
-     * @param lockToken
-     * @param resource
-     * @return the lock
-     * @throws DavException
-     * @throws IllegalArgumentException if the resource is <code>null</code> or
-     *                                  does not implement {@link TransactionResource} interface.
-     * @see LockManager#refreshLock(org.apache.jackrabbit.webdav.lock.LockInfo, String, org.apache.jackrabbit.webdav.DavResource)
-     */
-    public ActiveLock refreshLock(LockInfo lockInfo, String lockToken,
-                                  DavResource resource) throws DavException {
-        if (resource == null || !(resource instanceof TransactionResource)) {
-            throw new IllegalArgumentException("Invalid resource");
-        }
-        return refreshLock(lockInfo, lockToken, (TransactionResource) resource);
-    }
-
-    /**
-     * Reset the timeout of the lock identified by the given lock token.
-     *
-     * @param lockInfo
-     * @param lockToken
-     * @param resource
-     * @return
-     * @throws DavException if the lockdid not exist or is expired.
-     */
-    private synchronized ActiveLock refreshLock(LockInfo lockInfo, String lockToken,
-                                                TransactionResource resource) throws DavException {
-
-        TransactionMap responsibleMap = getMap(resource);
-        Transaction tx = responsibleMap.get(lockToken);
-        if (tx == null) {
-            throw new DavException(DavServletResponse.SC_PRECONDITION_FAILED, "No valid transaction lock found for resource '" + resource.getResourcePath() + "'");
-        } else if (tx.getLock().isExpired()) {
-            removeExpired(tx, responsibleMap, resource);
-            throw new DavException(DavServletResponse.SC_PRECONDITION_FAILED, "Transaction lock for resource '" + resource.getResourcePath() + "' was already expired.");
-        } else {
-            tx.getLock().setTimeout(lockInfo.getTimeout());
-        }
-        return tx.getLock();
-    }
-
-    /**
-     * Throws UnsupportedOperationException.
-     *
-     * @param lockToken
-     * @param resource
-     * @throws DavException
-     * @see LockManager#releaseLock(String, org.apache.jackrabbit.webdav.DavResource)
-     */
-    public void releaseLock(String lockToken, DavResource resource)
-            throws DavException {
-        throw new UnsupportedOperationException("A transaction lock can only be release with a TransactionInfo object and a lock token.");
-    }
-
-    /**
-     * Release the lock identified by the given lock token.
-     *
-     * @param lockInfo
-     * @param lockToken
-     * @param resource
-     * @throws DavException
-     */
-    public synchronized void releaseLock(TransactionInfo lockInfo, String lockToken,
-                                         TransactionResource resource) throws DavException {
-        if (resource == null) {
-            throw new IllegalArgumentException("Resource must not be null.");
-        }
-        TransactionMap responsibleMap = getMap(resource);
-        Transaction tx = responsibleMap.get(lockToken);
-
-        if (tx == null) {
-            throw new DavException(DavServletResponse.SC_PRECONDITION_FAILED, "No transaction lock found for resource '" + resource.getResourcePath() + "'");
-        } else if (tx.getLock().isExpired()) {
-            removeExpired(tx, responsibleMap, resource);
-            throw new DavException(DavServletResponse.SC_PRECONDITION_FAILED, "Transaction lock for resource '" + resource.getResourcePath() + "' was already expired.");
-        } else {
-            if (lockInfo.isCommit()) {
-                tx.commit(resource);
-            } else {
-                tx.rollback(resource);
-            }
-            removeReferences(tx, responsibleMap, resource);
-        }
-    }
-
-    /**
-     * Always returns null
-     *
-     * @param type
-     * @param scope
-     * @param resource
-     * @return null
-     * @see #getLock(Type, Scope, TransactionResource)
-     * @see LockManager#getLock(org.apache.jackrabbit.webdav.lock.Type, org.apache.jackrabbit.webdav.lock.Scope, org.apache.jackrabbit.webdav.DavResource)
-     */
-    public ActiveLock getLock(Type type, Scope scope, DavResource resource) {
-        return null;
-    }
-
-    /**
-     * Return the lock applied to the given resource or <code>null</code>
-     *
-     * @param type
-     * @param scope
-     * @param resource
-     * @return lock applied to the given resource or <code>null</code>
-     * @see LockManager#getLock(Type, Scope, DavResource)
-     *      todo: is it correct to return one that specific lock, the current session is token-holder of?
-     */
-    public ActiveLock getLock(Type type, Scope scope, TransactionResource resource) {
-        ActiveLock lock = null;
-        if (TransactionConstants.TRANSACTION.equals(type)) {
-            String[] sessionTokens = resource.getSession().getRepositorySession().getLockTokens();
-            int i = 0;
-            while (lock == null && i < sessionTokens.length) {
-                String lockToken = sessionTokens[i];
-                lock = getLock(lockToken, scope, resource);
-                i++;
-            }
-        }
-        return lock;
-    }
-
-    /**
-     * @param lockToken
-     * @param resource
-     * @return
-     */
-    private ActiveLock getLock(String lockToken, Scope scope, DavResource resource) {
-        if (!(resource instanceof TransactionResource)) {
-            log.info("");
-            return null;
-        }
-
-        ActiveLock lock = null;
-        Transaction tx = null;
-        TransactionMap m = map;
-        // check if main-map contains that txId
-        if (m.containsKey(lockToken)) {
-            tx = m.get(lockToken);
-        } else {
-            // look through all the nested tx-maps (i.e. global txs) for the given txId
-            Iterator it = m.values().iterator();
-            while (it.hasNext() && tx == null) {
-                Transaction txMap = (Transaction) it.next();
-                if (!txMap.isLocal()) {
-                    m = ((TransactionMap) txMap);
-                    if (m.containsKey(lockToken)) {
-                        tx = ((TransactionMap) txMap).get(lockToken);
-                    }
-                }
-            }
-        }
-
-        if (tx != null) {
-            if (tx.getLock().isExpired()) {
-                removeExpired(tx, m, (TransactionResource) resource);
-            } else if (tx.appliesToResource(resource) && (scope == null || tx.getLock().getScope().equals(scope))) {
-                lock = tx.getLock();
-            }
-        }
-        return lock;
-    }
-
-    /**
-     * Returns true if the given lock token belongs to a lock that applies to
-     * the given resource, false otherwise. The token may either be retrieved
-     * from the {@link DavConstants#HEADER_LOCK_TOKEN Lock-Token header} or
-     * from the {@link TransactionConstants#HEADER_TRANSACTIONID TransactionId header}.
-     *
-     * @param token
-     * @param resource
-     * @return
-     * @see LockManager#hasLock(String token, DavResource resource)
-     */
-    public boolean hasLock(String token, DavResource resource) {
-        return getLock(token, null, resource) != null;
-    }
-
-    /**
-     * Return the map that may contain a transaction lock for the given resource.
-     * In case the resource provides a transactionId, the map must be a
-     * repository transaction that is identified by the given id and which in
-     * turn can act as map.
-     *
-     * @param resource
-     * @return responsible map.
-     * @throws DavException if no map could be retrieved.
-     */
-    private TransactionMap getMap(TransactionResource resource)
-            throws DavException {
-
-        String txKey = resource.getTransactionId();
-        if (txKey == null) {
-            return map;
-        } else {
-            if (!map.containsKey(txKey)) {
-                throw new DavException(DavServletResponse.SC_PRECONDITION_FAILED, "Transaction map '" + map + " does not contain a transaction with TransactionId '" + txKey + "'.");
-            }
-            Transaction tx = map.get(txKey);
-            if (tx.isLocal()) {
-                throw new DavException(DavServletResponse.SC_PRECONDITION_FAILED, "TransactionId '" + txKey + "' points to a local transaction, that cannot act as transaction map");
-            } else if (tx.getLock() != null && tx.getLock().isExpired()) {
-                removeExpired(tx, map, resource);
-                throw new DavException(DavServletResponse.SC_PRECONDITION_FAILED, "Attempt to retrieve an expired global transaction.");
-            }
-            // tx is a global transaction that acts as map as well.
-            return (TransactionMap) tx;
-        }
-    }
-
-    /**
-     * Rollbacks the specified transaction and releases the lock. This includes
-     * the removal of all references.
-     *
-     * @param tx
-     * @param responsibleMap
-     * @param resource
-     */
-    private static void removeExpired(Transaction tx, TransactionMap responsibleMap,
-                                      TransactionResource resource) {
-        log.info("Removing expired transaction lock " + tx);
-        try {
-            tx.rollback(resource);
-            removeReferences(tx, responsibleMap, resource);
-        } catch (DavException e) {
-            log.error("Error while removing expired transaction lock: " + e.getMessage());
-        }
-    }
-
-    /**
-     * Create the required references to the new transaction specified by tx.
-     *
-     * @param tx
-     * @param responsibleMap
-     * @param resource
-     * @throws DavException
-     */
-    private static void addReferences(Transaction tx, TransactionMap responsibleMap,
-                                      TransactionResource resource) throws DavException {
-        log.info("Adding transactionId '" + tx.getId() + "' as session lock token.");
-        resource.getSession().getRepositorySession().addLockToken(tx.getId());
-
-        responsibleMap.put(tx.getId(), tx);
-        resource.getSession().addReference(tx.getId());
-    }
-
-    /**
-     * Remove all references to the specified transaction.
-     *
-     * @param tx
-     * @param responsibleMap
-     * @param resource
-     */
-    private static void removeReferences(Transaction tx, TransactionMap responsibleMap,
-                                         TransactionResource resource) {
-        log.info("Removing transactionId '" + tx.getId() + "' from session lock tokens.");
-        resource.getSession().getRepositorySession().removeLockToken(tx.getId());
-
-        responsibleMap.remove(tx.getId());
-        resource.getSession().removeReference(tx.getId());
-    }
-    //------------------------------------------< inner classes, interfaces >---
-    /**
-     * Internal <code>Transaction</code> interface
-     */
-    private interface Transaction {
-
-        TxActiveLock getLock();
-
-        /**
-         * @return the id of this transaction.
-         */
-        String getId();
-
-        /**
-         * @return path of the lock holding resource
-         */
-        String getResourcePath();
-
-        /**
-         * @param resource
-         * @return true if the lock defined by this transaction applies to the
-         *         given resource, either due to the resource holding that lock or due
-         *         to a deep lock hold by any ancestor resource.
-         */
-        boolean appliesToResource(DavResource resource);
-
-        /**
-         * @return true if this transaction is used to allow for transient changes
-         *         on the underlying repository, that may be persisted with the final
-         *         UNLOCK request only.
-         */
-        boolean isLocal();
-
-        /**
-         * Start this transaction.
-         *
-         * @param resource
-         * @throws DavException if an error occurs.
-         */
-        void start(TransactionResource resource) throws DavException;
-
-        /**
-         * Commit this transaction
-         *
-         * @param resource
-         * @throws DavException if an error occurs.
-         */
-        void commit(TransactionResource resource) throws DavException;
-
-        /**
-         * Rollback this transaction.
-         *
-         * @param resource
-         * @throws DavException if an error occurs.
-         */
-        void rollback(TransactionResource resource) throws DavException;
-    }
-
-    /**
-     * Abstract transaction covering functionally to both implementations.
-     */
-    private abstract static class AbstractTransaction extends TransactionMap implements Transaction {
-
-        private final DavResourceLocator locator;
-        private final TxActiveLock lock;
-
-        private AbstractTransaction(DavResourceLocator locator, TxActiveLock lock) {
-            this.locator = locator;
-            this.lock = lock;
-        }
-
-        /**
-         * @see #getLock()
-         */
-        public TxActiveLock getLock() {
-            return lock;
-        }
-
-        /**
-         * @see #getId()
-         */
-        public String getId() {
-            return lock.getToken();
-        }
-
-        /**
-         * @see #getResourcePath()
-         */
-        public String getResourcePath() {
-            return locator.getResourcePath();
-        }
-
-        /**
-         * @see #appliesToResource(DavResource)
-         */
-        public boolean appliesToResource(DavResource resource) {
-            if (locator.isSameWorkspace(resource.getLocator())) {
-                String lockResourcePath = getResourcePath();
-                String resPath = resource.getResourcePath();
-
-                while (!"".equals(resPath)) {
-                    if (lockResourcePath.equals(resPath)) {
-                        return true;
-                    }
-                    resPath = Text.getRelativeParent(resPath, 1);
-                }
-            }
-            return false;
-        }
-    }
-
-    /**
-     *
-     */
-    private final static class LocalTransaction extends AbstractTransaction {
-
-        private LocalTransaction(DavResourceLocator locator, TxActiveLock lock) {
-            super(locator, lock);
-        }
-
-        public boolean isLocal() {
-            return true;
-        }
-
-        public void start(TransactionResource resource) throws DavException {
-            try {
-                // make sure, the given resource represents an existing repository item
-                if (!resource.getSession().getRepositorySession().itemExists(getResourcePath())) {
-                    throw new DavException(DavServletResponse.SC_CONFLICT, "Unable to start local transaction: no repository item present at " + getResourcePath());
-                }
-            } catch (RepositoryException e) {
-                log.error("Unexpected error: " + e.getMessage());
-                throw new JcrDavException(e);
-            }
-        }
-
-        public void commit(TransactionResource resource) throws DavException {
-            try {
-                getItem(resource).save();
-            } catch (RepositoryException e) {
-                throw new JcrDavException(e);
-            }
-        }
-
-        public void rollback(TransactionResource resource) throws DavException {
-            try {
-                getItem(resource).refresh(false);
-            } catch (RepositoryException e) {
-                throw new JcrDavException(e);
-            }
-        }
-
-        private Item getItem(TransactionResource resource) throws PathNotFoundException, RepositoryException {
-            DavSession session = resource.getSession();
-            String itemPath = resource.getLocator().getJcrPath();
-            return session.getRepositorySession().getItem(itemPath);
-        }
-
-        public Transaction put(String key, Transaction value) throws DavException {
-            throw new DavException(WebdavResponse.SC_PRECONDITION_FAILED, "Attempt to nest a new transaction into a local one.");
-        }
-    }
-
-    /**
-     *
-     */
-    private static class GlobalTransaction extends AbstractTransaction {
-
-        private Xid xid;
-
-        private GlobalTransaction(DavResourceLocator locator, TxActiveLock lock) {
-            super(locator, lock);
-            xid = new XidImpl(lock.getToken());
-        }
-
-        public boolean isLocal() {
-            return false;
-        }
-
-        public void start(TransactionResource resource) throws DavException {
-            XAResource xaRes = getXAResource(resource);
-            try {
-                xaRes.setTransactionTimeout((int) getLock().getTimeout() / 1000);
-                xaRes.start(xid, XAResource.TMNOFLAGS);
-            } catch (XAException e) {
-                throw new DavException(DavServletResponse.SC_FORBIDDEN, e.getMessage());
-            }
-        }
-
-        public void commit(TransactionResource resource) throws DavException {
-            XAResource xaRes = getXAResource(resource);
-            try {
-                xaRes.commit(xid, false);
-                removeLocalTxReferences(resource);
-            } catch (XAException e) {
-                throw new DavException(DavServletResponse.SC_FORBIDDEN, e.getMessage());
-            }
-        }
-
-        public void rollback(TransactionResource resource) throws DavException {
-            XAResource xaRes = getXAResource(resource);
-            try {
-                xaRes.rollback(xid);
-                removeLocalTxReferences(resource);
-            } catch (XAException e) {
-                throw new DavException(DavServletResponse.SC_FORBIDDEN, e.getMessage());
-            }
-        }
-
-        private XAResource getXAResource(TransactionResource resource) throws DavException {
-/*
-
-            currently commented, since server should be jackrabbit independant
-
-	    Session session = resource.getSession().getRepositorySession();
-	    if (session instanceof XASession) {
-		return ((XASession)session).getXAResource();
-	    } else {
-		throw new DavException(DavServletResponse.SC_FORBIDDEN);
-	    }
-            */
-            throw new DavException(DavServletResponse.SC_FORBIDDEN);
-        }
-
-        private void removeLocalTxReferences(TransactionResource resource) {
-            Iterator it = values().iterator();
-            while (it.hasNext()) {
-                Transaction tx = (Transaction) it.next();
-                removeReferences(tx, this, resource);
-            }
-        }
-
-        public Transaction put(String key, Transaction value) throws DavException {
-            if (!(value instanceof LocalTransaction)) {
-                throw new DavException(WebdavResponse.SC_PRECONDITION_FAILED, "Attempt to nest global transaction into a global one.");
-            }
-            return (Transaction) super.put(key, value);
-        }
-    }
-
-    /**
-     *
-     */
-    private static class TransactionMap extends HashMap {
-
-        public Transaction get(String key) {
-            Transaction tx = null;
-            if (containsKey(key)) {
-                tx = (Transaction) super.get(key);
-            }
-            return tx;
-        }
-
-        public Transaction put(String key, Transaction value) throws DavException {
-            // any global an local transactions allowed.
-            return (Transaction) super.put(key, value);
-        }
-    }
-
-    /**
-     * Private class implementing Xid interface.
-     */
-    private static class XidImpl implements Xid {
-
-        private final String id;
-
-        /**
-         * Create a new Xid
-         *
-         * @param id
-         */
-        private XidImpl(String id) {
-            this.id = id;
-        }
-
-        /**
-         * @return 1
-         * @see javax.transaction.xa.Xid#getFormatId()
-         */
-        public int getFormatId() {
-            // todo: define reasonable format id
-            return 1;
-        }
-
-        /**
-         * @return an empty byte array.
-         * @see javax.transaction.xa.Xid#getBranchQualifier()
-         */
-        public byte[] getBranchQualifier() {
-            return new byte[0];
-        }
-
-        /**
-         * @return id as byte array
-         * @see javax.transaction.xa.Xid#getGlobalTransactionId()
-         */
-        public byte[] getGlobalTransactionId() {
-            return id.getBytes();
-        }
-    }
-}
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/version/VersionHistoryItemCollection.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/version/VersionHistoryItemCollection.java
deleted file mode 100644
index 5e02878..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/version/VersionHistoryItemCollection.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.jcr.version;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.property.HrefProperty;
-import org.apache.jackrabbit.webdav.property.DefaultDavProperty;
-import org.apache.jackrabbit.webdav.property.ResourceType;
-import org.apache.jackrabbit.webdav.jcr.ItemResourceConstants;
-import org.apache.jackrabbit.webdav.jcr.JcrDavException;
-import org.apache.jackrabbit.webdav.jcr.DefaultItemCollection;
-import org.apache.jackrabbit.webdav.version.VersionHistoryResource;
-import org.apache.jackrabbit.webdav.version.VersionResource;
-import org.apache.jackrabbit.webdav.DavResourceLocator;
-import org.apache.jackrabbit.webdav.DavSession;
-import org.apache.jackrabbit.webdav.DavResourceFactory;
-import org.apache.jackrabbit.webdav.DavResource;
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavServletResponse;
-
-import javax.jcr.RepositoryException;
-import javax.jcr.Item;
-import javax.jcr.version.VersionHistory;
-import javax.jcr.version.VersionIterator;
-import java.util.ArrayList;
-
-/**
- * <code>VersionHistoryItemCollection</code> represents a JCR version history.
- *
- * @see VersionHistory
- */
-public class VersionHistoryItemCollection extends DefaultItemCollection
-        implements VersionHistoryResource {
-
-    private static Logger log = Logger.getLogger(VersionHistoryItemCollection.class);
-
-    /**
-     * Create a new <code>VersionHistoryItemCollection</code> resource.
-     *
-     * @param resourcePath
-     * @param session
-     * @param factory
-     */
-    public VersionHistoryItemCollection(DavResourceLocator resourcePath,
-                                        DavSession session, DavResourceFactory factory,
-                                        Item item) {
-        super(resourcePath, session, factory, item);
-        if (item == null || !(item instanceof VersionHistory)) {
-            throw new IllegalArgumentException("VersionHistory item expected.");
-        }
-    }
-
-    //----------------------------------------------< DavResource interface >---
-    /**
-     * @see org.apache.jackrabbit.webdav.DavResource#getSupportedMethods()
-     */
-    public String getSupportedMethods() {
-        StringBuffer sb = new StringBuffer(ItemResourceConstants.METHODS);
-        sb.append(", ").append(VersionHistoryResource.METHODS);
-        return sb.toString();
-    }
-
-    /**
-     * Removing a version resource is achieved by calling <code>removeVersion</code>
-     * on the versionhistory item this version belongs to.
-     *
-     * @throws DavException if the version does not exist or if an error occurs
-     * while deleting.
-     * @see DavResource#removeMember(org.apache.jackrabbit.webdav.DavResource)
-     */
-    public void removeMember(DavResource member) throws DavException {
-        if (exists()) {
-            VersionHistory versionHistory = (VersionHistory) item;
-            try {
-                versionHistory.removeVersion(getItemName(member.getLocator().getJcrPath()));
-            } catch (RepositoryException e) {
-                throw new JcrDavException(e);
-            }
-        } else {
-            throw new DavException(DavServletResponse.SC_NOT_FOUND);
-        }
-    }
-    //-----------------------------------< VersionHistoryResource interface >---
-    /**
-     * Return an array of {@link VersionResource}s representing all versions
-     * present in the underlying JCR version history.
-     *
-     * @return array of {@link VersionResource}s representing all versions
-     * present in the underlying JCR version history.
-     * @throws DavException
-     * @see org.apache.jackrabbit.webdav.version.VersionHistoryResource#getVersions()
-     */
-    public VersionResource[] getVersions() throws DavException {
-        try {
-            VersionIterator vIter = ((VersionHistory)item).getAllVersions();
-            ArrayList l = new ArrayList();
-            while (vIter.hasNext()) {
-                DavResourceLocator versionLoc = getLocatorFromItem(vIter.nextVersion());
-                DavResource vr = createResourceFromLocator(versionLoc);
-                l.add(vr);
-            }
-            return (VersionResource[]) l.toArray(new VersionResource[l.size()]);
-        } catch (RepositoryException e) {
-            throw new JcrDavException(e);
-        }
-    }
-    
-    //--------------------------------------------------------------------------
-    /**
-     * Fill the property set for this resource.
-     */
-    protected void initProperties() {
-        super.initProperties();
-
-        // change resourcetype defined by default item collection
-        properties.add(new ResourceType(ResourceType.VERSION_HISTORY));
-        
-        // jcr specific property pointing to the node this history belongs to
-        try {
-            properties.add(new DefaultDavProperty(JCR_VERSIONABLEUUID, ((VersionHistory)item).getVersionableUUID()));
-        } catch (RepositoryException e) {
-            log.error(e.getMessage());
-        }
-
-        // required root-version property for version-history resource
-        try {
-            String rootVersionHref = getLocatorFromItem(((VersionHistory)item).getRootVersion()).getHref(true);
-            properties.add(new HrefProperty(VersionHistoryResource.ROOT_VERSION, rootVersionHref, true));
-        } catch (RepositoryException e) {
-            log.error(e.getMessage());
-        }
-
-        // required, protected version-set property for version-history resource
-        try {
-            VersionIterator vIter = ((VersionHistory)item).getAllVersions();
-            addHrefProperty(VersionHistoryResource.VERSION_SET, vIter, true);
-        } catch (RepositoryException e) {
-            log.error(e.getMessage());
-        }
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/version/VersionItemCollection.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/version/VersionItemCollection.java
deleted file mode 100644
index 85f58b7..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/version/VersionItemCollection.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.jcr.version;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.jcr.JcrDavException;
-import org.apache.jackrabbit.webdav.jcr.ItemResourceConstants;
-import org.apache.jackrabbit.webdav.jcr.DefaultItemCollection;
-import org.apache.jackrabbit.webdav.version.report.ReportType;
-import org.apache.jackrabbit.webdav.version.VersionResource;
-import org.apache.jackrabbit.webdav.version.LabelInfo;
-import org.apache.jackrabbit.webdav.version.VersionHistoryResource;
-import org.apache.jackrabbit.webdav.version.LabelSetProperty;
-import org.apache.jackrabbit.webdav.DavResourceLocator;
-import org.apache.jackrabbit.webdav.DavSession;
-import org.apache.jackrabbit.webdav.DavResourceFactory;
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavServletResponse;
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.property.DefaultDavProperty;
-import org.apache.jackrabbit.webdav.property.DavPropertyName;
-import org.apache.jackrabbit.webdav.property.HrefProperty;
-import org.apache.jackrabbit.JcrConstants;
-
-import javax.jcr.version.Version;
-import javax.jcr.version.VersionHistory;
-import javax.jcr.Item;
-import javax.jcr.RepositoryException;
-import javax.jcr.PropertyIterator;
-import javax.jcr.Property;
-import javax.jcr.Node;
-import java.util.List;
-import java.util.ArrayList;
-
-/**
- * <code>VersionItemCollection</code> represents a JCR version.
- *
- * @see Version
- */
-public class VersionItemCollection extends DefaultItemCollection
-        implements VersionResource {
-
-    private static Logger log = Logger.getLogger(VersionItemCollection.class);
-
-    /**
-     * Create a new <code>VersionItemCollection</code>.
-     *
-     * @param locator
-     * @param session
-     * @param factory
-     */
-    public VersionItemCollection(DavResourceLocator locator, DavSession session, DavResourceFactory factory, Item item) {
-        super(locator, session, factory, item);
-        if (item == null || !(item instanceof Version)) {
-            throw new IllegalArgumentException("Version item expected.");
-        }
-    }
-
-    //----------------------------------------------< DavResource interface >---
-    /**
-     * @see org.apache.jackrabbit.webdav.DavResource#getSupportedMethods()
-     */
-    public String getSupportedMethods() {
-        StringBuffer sb = new StringBuffer(ItemResourceConstants.METHODS);
-        sb.append(", ").append(VersionResource.METHODS);
-        return sb.toString();
-    }
-
-    //------------------------------------------< VersionResource interface >---
-    /**
-     * Modify the labels defined for the underlying repository version.
-     *
-     * @param labelInfo
-     * @throws org.apache.jackrabbit.webdav.DavException
-     * @see VersionResource#label(org.apache.jackrabbit.webdav.version.LabelInfo)
-     * @see VersionHistory#addVersionLabel(String, String, boolean)
-     * @see VersionHistory#removeVersionLabel(String)
-     */
-    public void label(LabelInfo labelInfo) throws DavException {
-        if (labelInfo == null) {
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "Valid label request body required.");
-        }
-        if (!exists()) {
-            throw new DavException(DavServletResponse.SC_NOT_FOUND);
-        }
-        try {
-            VersionHistory vh = getVersionHistoryItem();
-            if (labelInfo.getType() == LabelInfo.TYPE_REMOVE) {
-                vh.removeVersionLabel(labelInfo.getLabelName());
-            } else if (labelInfo.getType() == LabelInfo.TYPE_ADD) {
-                // ADD: only add if not yet existing
-                vh.addVersionLabel(item.getName(), labelInfo.getLabelName(), false);
-            } else {
-                // SET: move label if already existing
-                vh.addVersionLabel(item.getName(), labelInfo.getLabelName(), true);
-            }
-        } catch (RepositoryException e) {
-            throw new JcrDavException(e);
-        }
-    }
-
-    /**
-     * Returns the {@link VersionHistory} associated with the repository version.
-     * Note: in contrast to a versionable node, the version history of a version
-     * item is always represented by its nearest ancestor.
-     *
-     * @return the {@link VersionHistoryResource} associated with this resource.
-     * @throws org.apache.jackrabbit.webdav.DavException
-     * @see org.apache.jackrabbit.webdav.version.VersionResource#getVersionHistory()
-     * @see javax.jcr.Item#getParent()
-     */
-    public VersionHistoryResource getVersionHistory() throws DavException {
-        if (!exists()) {
-            throw new DavException(DavServletResponse.SC_NOT_FOUND);
-        }
-
-        try {
-            VersionHistory vh = getVersionHistoryItem();
-            DavResourceLocator loc = getLocatorFromItem(vh);
-            return (VersionHistoryResource) createResourceFromLocator(loc);
-        } catch (RepositoryException e) {
-            throw new JcrDavException(e);
-        }
-    }
-
-    /**
-     * Return versionhistory that contains this version item
-     *
-     * @return versionhistory that contains this version item
-     * @throws RepositoryException
-     * @see javax.jcr.version.Version#getContainingHistory() 
-     */
-    private VersionHistory getVersionHistoryItem() throws RepositoryException {
-        return ((Version)item).getContainingHistory();
-    }
-
-    //--------------------------------------------------------------------------
-    /**
-     * Define the set of reports supported by this resource.
-     *
-     * @see org.apache.jackrabbit.webdav.version.report.SupportedReportSetProperty
-     */
-    protected void initSupportedReports() {
-        super.initSupportedReports();
-        if (exists()) {
-            supportedReports.addReportType(ReportType.VERSION_TREE);
-        }
-    }
-
-    /**
-     * Fill the property set for this resource.
-     */
-    protected void initProperties() {
-        super.initProperties();
-
-        if (exists()) {
-            Version v = (Version)item;
-            // created and creationDate properties
-            try {
-                String creationDate = DavConstants.creationDateFormat.format(v.getCreated().getTime());
-                // replace dummy creation date from default collection
-                properties.add(new DefaultDavProperty(DavPropertyName.CREATIONDATE, creationDate));
-
-                // required, protected DAV:version-name property
-                properties.add(new DefaultDavProperty(VERSION_NAME, v.getName(), true));
-
-                // required, protected DAV:label-name-set property
-                String[] labels = getVersionHistoryItem().getVersionLabels(v);
-                properties.add(new LabelSetProperty(labels));
-
-                // required DAV:predecessor-set (protected) and DAV:successor-set (computed) properties
-                addHrefProperty(VersionResource.PREDECESSOR_SET, v.getPredecessors(), true);
-                addHrefProperty(SUCCESSOR_SET, v.getSuccessors(), true);
-
-                // required DAV:version-history (computed) property
-                String vhHref = getLocatorFromItem(getVersionHistoryItem()).getHref(true);
-                properties.add(new HrefProperty(VersionResource.VERSION_HISTORY, vhHref, true));
-
-                // required DAV:checkout-set (computed) property
-                PropertyIterator it = v.getReferences();
-                List nodeList = new ArrayList();
-                while (it.hasNext()) {
-                    Property p = it.nextProperty();
-                    if (JcrConstants.JCR_BASEVERSION.equals(p.getName())) {
-                        Node n = p.getParent();
-                        if (n.isCheckedOut()) {
-                           nodeList.add(n);
-                        }
-                    }
-                }
-                addHrefProperty(CHECKOUT_SET, (Node[]) nodeList.toArray(new Node[nodeList.size()]), true);
-
-            } catch (RepositoryException e) {
-                log.error(e.getMessage());
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/version/package.html b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/version/package.html
deleted file mode 100644
index aeea3f6..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/version/package.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<body>
-Contains JCR specific implementations for the following interfaces:
-<ul>
-<li>VersionableResource</li>
-<li>VersionControlledResource</li>
-<li>VersionResource</li>
-<li>VersionHistoryResource</li>
-</ul>
-</body>
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/version/report/ExportViewReport.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/version/report/ExportViewReport.java
deleted file mode 100644
index 647899d..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/version/report/ExportViewReport.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.jcr.version.report;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.jcr.ItemResourceConstants;
-import org.apache.jackrabbit.webdav.jcr.JcrDavException;
-import org.apache.jackrabbit.webdav.version.DeltaVResource;
-import org.apache.jackrabbit.webdav.version.report.Report;
-import org.apache.jackrabbit.webdav.version.report.ReportType;
-import org.apache.jackrabbit.webdav.version.report.ReportInfo;
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavSession;
-import org.apache.jackrabbit.webdav.DavServletResponse;
-import org.apache.jackrabbit.util.Text;
-import org.xml.sax.SAXException;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-import javax.jcr.Session;
-import javax.jcr.RepositoryException;
-import javax.jcr.PathNotFoundException;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.InputStream;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-/**
- * <code>ExportViewReport</code> handles REPORT requests for the 'exportview'
- * report. The 'exportview' report is used to export
- * {@link Session#exportDocumentView(String, java.io.OutputStream, boolean, boolean) DocView}
- * and {@link Session#exportSystemView(String, java.io.OutputStream, boolean, boolean) SysView}
- * of the {@link javax.jcr.Item item} represented by the requested resource.
- * <p/>
- * The request body must contain a {@link ItemResourceConstants#NAMESPACE dcr}:exportview
- * element:
- * <pre>
- * &lt;!ELEMENT exportview  ( (sysview | docview)?, skipbinary?, norecurse ) &gt;
- * &lt;!ELEMENT sysview EMPTY &gt;
- * &lt;!ELEMENT docview EMPTY &gt;
- * &lt;!ELEMENT skipbinary EMPTY &gt;
- * &lt;!ELEMENT norecurse EMPTY &gt;
- * </pre>
- * If no view type is specified the DocView is generated.
- */
-public class ExportViewReport implements Report {
-
-    private static Logger log = Logger.getLogger(ExportViewReport.class);
-
-    private static final String REPORT_NAME = "exportview";
-
-    /**
-     * The exportview report type
-     */
-    public static final ReportType EXPORTVIEW_REPORT = ReportType.register(REPORT_NAME, ItemResourceConstants.NAMESPACE, ExportViewReport.class);
-
-    private String absItemPath;
-    private Session session;
-    private ReportInfo info;
-
-    /**
-     * Returns {@link #EXPORTVIEW_REPORT} report type.
-     *
-     * @return {@link #EXPORTVIEW_REPORT}
-     * @see org.apache.jackrabbit.webdav.version.report.Report#getType()
-     */
-    public ReportType getType() {
-        return EXPORTVIEW_REPORT;
-    }
-
-    /**
-     * Always returns <code>false</code>.
-     *
-     * @return false
-     */
-    public boolean isMultiStatusReport() {
-        return false;
-    }
-
-    /**
-     * @see Report#init(org.apache.jackrabbit.webdav.version.DeltaVResource, org.apache.jackrabbit.webdav.version.report.ReportInfo)
-     */
-    public void init(DeltaVResource resource, ReportInfo info) throws DavException {
-        if (!getType().isRequestedReportType(info)) {
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "dcr:exportview element expected.");
-        }
-        if (resource == null) {
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "Resource must not be null.");
-        }
-
-        this.info = info;
-
-        DavSession davSession = resource.getSession();
-        if (davSession == null || davSession.getRepositorySession() == null) {
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "The resource must provide a non-null session object in order to create the exportview report.");
-        }
-        session = davSession.getRepositorySession();
-        absItemPath = resource.getLocator().getJcrPath();
-        try {
-            if (!session.itemExists(absItemPath)) {
-                throw new JcrDavException(new PathNotFoundException(absItemPath + " does not exist."));
-    }
-        } catch (RepositoryException e) {
-            throw new JcrDavException(e);
-        }
-    }
-
-    /**
-     * Creates a Xml document from the generated view.
-     *
-     * @param document
-     * @return Xml element representing the output of the specified view.
-     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
-     */
-    public Element toXml(Document document) {
-        boolean skipBinary = info.containsContentElement("skipbinary", ItemResourceConstants.NAMESPACE);
-        boolean noRecurse = info.containsContentElement("norecurse", ItemResourceConstants.NAMESPACE);
-
-        // todo improve...
-        try {
-            // create tmpFile in default system-tmp directory
-            String prefix = "_tmp_" + Text.getName(absItemPath);
-            File tmpfile = File.createTempFile(prefix, null, null);
-            tmpfile.deleteOnExit();
-
-            FileOutputStream out = new FileOutputStream(tmpfile);
-            if (info.containsContentElement("sysview", ItemResourceConstants.NAMESPACE)) {
-                session.exportSystemView(absItemPath, out, skipBinary, noRecurse);
-            } else {
-                // default is docview
-                session.exportDocumentView(absItemPath, out, skipBinary, noRecurse);
-            }
-            out.close();
-
-            InputStream in = new FileInputStream(tmpfile);
-            Document tmpDoc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(in);
-
-            // import the root node of the generated xml to the given document.
-            Element rootElem = (Element)document.importNode(tmpDoc.getDocumentElement(), true);
-            return rootElem;
-
-        } catch (RepositoryException e) {
-            log.error(e.getMessage());
-        } catch (FileNotFoundException e) {
-            log.error(e.getMessage());
-        } catch (IOException e) {
-            log.error(e.getMessage());
-        } catch (ParserConfigurationException e) {
-            log.error(e.getMessage());
-        } catch (SAXException e) {
-            log.error(e.getMessage());
-        }
-        return null;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/version/report/LocateByUuidReport.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/version/report/LocateByUuidReport.java
deleted file mode 100644
index 8d8456c..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/version/report/LocateByUuidReport.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.jcr.version.report;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.version.DeltaVResource;
-import org.apache.jackrabbit.webdav.version.report.Report;
-import org.apache.jackrabbit.webdav.version.report.ReportType;
-import org.apache.jackrabbit.webdav.version.report.ReportInfo;
-import org.apache.jackrabbit.webdav.jcr.ItemResourceConstants;
-import org.apache.jackrabbit.webdav.jcr.JcrDavException;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.apache.jackrabbit.webdav.MultiStatus;
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavServletResponse;
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.DavSession;
-import org.apache.jackrabbit.webdav.DavResourceLocator;
-import org.apache.jackrabbit.webdav.DavResource;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-
-/**
- * <code>LocateByUuidReport</code> handles REPORT requests for the 'locate-by-uuid'
- * report.
- * <p/>
- * The request body must be a 'dcr:locate-by-uuid' XML element:
- * <pre>
- * &lt;!ELEMENT locate-by-uuid ( href , prop? ) &gt;
- * </pre>
- * The response to a successful report request will be a Multi-Status response.
- */
-public class LocateByUuidReport implements Report {
-
-    private static Logger log = Logger.getLogger(LocateByUuidReport.class);
-
-    private static final String REPORT_NAME = "locate-by-uuid";
-
-    /**
-     * The exportview report type
-     */
-    public static final ReportType LOCATE_BY_UUID_REPORT = ReportType.register(REPORT_NAME, ItemResourceConstants.NAMESPACE, LocateByUuidReport.class);
-
-    private MultiStatus ms;
-
-    /**
-     * Returns {@link #LOCATE_BY_UUID_REPORT} report type.
-     *
-     * @return {@link #LOCATE_BY_UUID_REPORT}
-     * @see org.apache.jackrabbit.webdav.version.report.Report#getType()
-     */
-    public ReportType getType() {
-        return LOCATE_BY_UUID_REPORT;
-    }
-
-    /**
-     * Always returns <code>true</code>.
-     *
-     * @return true
-     * @see org.apache.jackrabbit.webdav.version.report.Report#isMultiStatusReport()
-     */
-    public boolean isMultiStatusReport() {
-        return true;
-    }
-
-    /**
-     * @see Report#init(org.apache.jackrabbit.webdav.version.DeltaVResource, org.apache.jackrabbit.webdav.version.report.ReportInfo)
-     */
-    public void init(DeltaVResource resource, ReportInfo info) throws DavException {
-        if (!getType().isRequestedReportType(info)) {
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "dcr:locate-by-uuid element expected.");
-        }
-        if (!info.containsContentElement(DavConstants.XML_HREF, DavConstants.NAMESPACE)) {
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "dcr:locate-by-uuid element must at least contain a single DAV:href child.");
-        }
-        if (resource == null) {
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "Resource must not be null.");
-        }
-        DavSession davSession = resource.getSession();
-        if (davSession == null || davSession.getRepositorySession() == null) {
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "The resource must provide a non-null session object in order to create the locate-by-uuid report.");
-    }
-
-        try {
-            Element hrefElem = info.getContentElement(DavConstants.XML_HREF, DavConstants.NAMESPACE);
-            String uuid = DomUtil.getTextTrim(hrefElem);
-            DavResourceLocator resourceLoc = resource.getLocator();
-            Node n = davSession.getRepositorySession().getNodeByUUID(uuid);
-            DavResourceLocator loc = resourceLoc.getFactory().createResourceLocator(resourceLoc.getPrefix(), resourceLoc.getWorkspacePath(), n.getPath(), false);
-            DavResource locatedResource = resource.getFactory().createResource(loc, davSession);
-            ms = new MultiStatus();
-            ms.addResourceProperties(locatedResource, info.getPropertyNameSet(), info.getDepth());
-        } catch (RepositoryException e) {
-            throw new JcrDavException(e);
-        }
-    }
-
-    /**
-     * Creates a Xml document from the generated view.
-     *
-     * @param document
-     * @return Xml element representing the output of the specified view.
-     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
-     */
-    public Element toXml(Document document) {
-        return ms.toXml(document);
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/version/report/LocateCorrespondingNodeReport.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/version/report/LocateCorrespondingNodeReport.java
deleted file mode 100644
index 6ba63f2..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/version/report/LocateCorrespondingNodeReport.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.jcr.version.report;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.version.report.Report;
-import org.apache.jackrabbit.webdav.version.report.ReportType;
-import org.apache.jackrabbit.webdav.version.report.ReportInfo;
-import org.apache.jackrabbit.webdav.version.DeltaVResource;
-import org.apache.jackrabbit.webdav.version.DeltaVConstants;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.apache.jackrabbit.webdav.jcr.ItemResourceConstants;
-import org.apache.jackrabbit.webdav.jcr.JcrDavException;
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavServletResponse;
-import org.apache.jackrabbit.webdav.DavSession;
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.DavResourceLocator;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.Item;
-import javax.jcr.Node;
-import javax.jcr.PathNotFoundException;
-
-/**
- * <code>LocateCorrespondingNodeReport</code> is used to identify the resource that
- * represents the corresponding node in another workspace.
- *
- * <p/>
- * The request body must be a 'dcr:locate-corresponding-node' XML element, that
- * contains the href of the source workspace, where the corresponding node should
- * be searched:
- * <pre>
- * &lt;!ELEMENT locate-corresponding-node ( workspace ) &gt;
- * &lt;!ELEMENT workspace ( href ) &gt;  (as defined by <a href="http://www.webdav.org/specs/rfc3253.html#PROPERTY_workspace">RFC 3253</a>)
- * </pre>
- * The response to a successful report request must be a 'dcr:locate-corresponding-node-report'
- * element that contains the href of the corresponding node in the given source
- * workspace:
- *
- * <pre>
- * &lt;!ELEMENT locate-corresponding-node-report ( href ) &gt;
- * </pre>
- *
- * @see javax.jcr.Node#getCorrespondingNodePath(String)
- */
-public class LocateCorrespondingNodeReport implements Report {
-
-    private static Logger log = Logger.getLogger(LocateCorrespondingNodeReport.class);
-
-    private static final String REPORT_NAME = "locate-corresponding-node";
-
-    private String correspHref;
-
-    /**
-     * The corresponding-node report type
-     */
-    public static final ReportType LOCATE_CORRESPONDING_NODE_REPORT = ReportType.register(REPORT_NAME, ItemResourceConstants.NAMESPACE, LocateByUuidReport.class);
-
-    /**
-     * Returns {@link #LOCATE_CORRESPONDING_NODE_REPORT}
-     *
-     * @return always returns {@link #LOCATE_CORRESPONDING_NODE_REPORT}
-     * @see org.apache.jackrabbit.webdav.version.report.Report#getType() 
-     */
-    public ReportType getType() {
-        return LOCATE_CORRESPONDING_NODE_REPORT;
-    }
-
-    /**
-     * Always returns <code>false</code>.
-     *
-     * @return false
-     * @see org.apache.jackrabbit.webdav.version.report.Report#isMultiStatusReport()
-     */
-    public boolean isMultiStatusReport() {
-        return false;
-    }
-
-    /**
-     * @see Report#init(org.apache.jackrabbit.webdav.version.DeltaVResource, org.apache.jackrabbit.webdav.version.report.ReportInfo)
-     */
-    public void init(DeltaVResource resource, ReportInfo info) throws DavException {
-        if (resource == null) {
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "Resource must not be null.");
-        }
-        DavSession davSession = resource.getSession();
-        if (davSession == null || davSession.getRepositorySession() == null) {
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "The resource must provide a non-null session object in order to create the dcr:locate-corresponding-node report.");
-        }
-        if (!getType().isRequestedReportType(info)) {
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "dcr:locate-corresponding-node expected.");
-    }
-
-        Element workspace = info.getContentElement(DeltaVConstants.WORKSPACE.getName(), DeltaVConstants.WORKSPACE.getNamespace());
-        String workspaceHref = DomUtil.getChildTextTrim(workspace, DavConstants.XML_HREF, DavConstants.NAMESPACE);
-        if (workspaceHref == null || "".equals(workspaceHref)) {
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "Request body must define the href of a source workspace");
-        }
-        try {
-            this.correspHref = getCorrespondingResourceHref(resource, workspaceHref);
-        } catch (RepositoryException e) {
-            throw new JcrDavException(e);
-        }
-    }
-
-    /**
-     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
-     */
-    public Element toXml(Document document) {
-        Element elem = DomUtil.createElement(document, "locate-corresponding-node-report", ItemResourceConstants.NAMESPACE);
-        if (correspHref != null) {
-            elem.appendChild(DomUtil.hrefToXml(correspHref, document));
-        }
-        return elem;
-        }
-
-    private static String getCorrespondingResourceHref(DeltaVResource resource, String workspaceHref) throws RepositoryException {
-            DavResourceLocator rLoc = resource.getLocator();
-            String itemPath = rLoc.getJcrPath();
-            Session s = resource.getSession().getRepositorySession();
-            Item item = s.getItem(itemPath);
-            if (item.isNode()) {
-                String workspaceName = rLoc.getFactory().createResourceLocator(rLoc.getPrefix(), workspaceHref).getWorkspaceName();
-                String corrPath = ((Node)item).getCorrespondingNodePath(workspaceName);
-                DavResourceLocator corrLoc = rLoc.getFactory().createResourceLocator(rLoc.getPrefix(), "/" + workspaceName, corrPath, false);
-            return corrLoc.getHref(true);
-            } else {
-            throw new PathNotFoundException("Node with path " + itemPath + " does not exist.");
-        }
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/version/report/NodeTypesReport.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/version/report/NodeTypesReport.java
deleted file mode 100644
index 7be5282..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/version/report/NodeTypesReport.java
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.jcr.version.report;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.version.DeltaVResource;
-import org.apache.jackrabbit.webdav.version.report.Report;
-import org.apache.jackrabbit.webdav.version.report.ReportType;
-import org.apache.jackrabbit.webdav.version.report.ReportInfo;
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavServletResponse;
-import org.apache.jackrabbit.webdav.DavSession;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.apache.jackrabbit.webdav.jcr.nodetype.NodeTypeConstants;
-import org.apache.jackrabbit.webdav.jcr.nodetype.PropertyDefinitionImpl;
-import org.apache.jackrabbit.webdav.jcr.nodetype.NodeDefinitionImpl;
-import org.apache.jackrabbit.webdav.jcr.JcrDavException;
-import org.apache.jackrabbit.util.IteratorHelper;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-import javax.jcr.Session;
-import javax.jcr.RepositoryException;
-import javax.jcr.nodetype.NodeTypeIterator;
-import javax.jcr.nodetype.NodeType;
-import javax.jcr.nodetype.NodeDefinition;
-import javax.jcr.nodetype.PropertyDefinition;
-import javax.jcr.nodetype.NodeTypeManager;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-
-/**
- * <code>NodeTypesReport</code> allows to retrieve the definition of a single
- * or multiple node types. The request body must be a 'dcr:nodetypes' element:
- * <pre>
- * &lt;!ELEMENT nodetypes ( nodetype+ | all-nodetypes | mixin-nodetypes | primary-nodetypes ) &gt;
- *
- * &lt;!ELEMENT nodetype ( nodetypename ) &gt;
- * &lt;!ELEMENT nodetypename (#PCDATA) &gt;
- *
- * &lt;!ELEMENT all-nodetypes EMPTY &gt;
- * &lt;!ELEMENT mixin-nodetypes EMPTY &gt;
- * &lt;!ELEMENT primary-nodetypes EMPTY &gt;
- * </pre>
- *
- * @see NodeTypeConstants#NAMESPACE
- *
- * @todo currently the nodetype report is not consistent with the general way of representing nodetype names (with NodetypeElement) in order to be compatible with the jackrabbit nodetype registry...
- * @todo for the same reason, not the complete nodetype-definition, but only the nodetype def as stored is represented.
- * @todo no namespace definition with response (> jackrabbit)... and nodetype element has same name as the one used with dav-properties
- */
-public class NodeTypesReport implements Report, NodeTypeConstants {
-
-    private static Logger log = Logger.getLogger(NodeTypesReport.class);
-
-    /**
-     * The registered type of this report.
-     */
-    public static final ReportType NODETYPES_REPORT = ReportType.register("nodetypes", NodeTypeConstants.NAMESPACE, NodeTypesReport.class);
-
-    private Session session;
-    private NodeTypeIterator ntIter;
-
-    /**
-     * Returns {@link #NODETYPES_REPORT} type.
-     * @return {@link #NODETYPES_REPORT}
-     * @see org.apache.jackrabbit.webdav.version.report.Report#getType()
-     */
-    public ReportType getType() {
-        return NODETYPES_REPORT;
-    }
-
-    /**
-     * Always returns <code>false</code>.
-     *
-     * @return false
-     * @see org.apache.jackrabbit.webdav.version.report.Report#isMultiStatusReport()
-     */
-    public boolean isMultiStatusReport() {
-        return false;
-    }
-
-    /**
-     * @see Report#init(org.apache.jackrabbit.webdav.version.DeltaVResource, org.apache.jackrabbit.webdav.version.report.ReportInfo)
-     */
-    public void init(DeltaVResource resource, ReportInfo info) throws DavException {
-        if (resource == null) {
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "Resource must not be null.");
-        }
-        if (!getType().isRequestedReportType(info)) {
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "dcr:nodetypes element expected.");
-        }
-        DavSession davSession = resource.getSession();
-        if (davSession == null || davSession.getRepositorySession() == null) {
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "The resource must provide a non-null session object in order to create the nodetypes report.");
-    }
-        session = davSession.getRepositorySession();
-        try {
-            ntIter = getNodeTypes(session, info);
-        } catch (RepositoryException e) {
-            throw new JcrDavException(e);
-        }
-        if (session == null || ntIter == null) {
-            throw new DavException(DavServletResponse.SC_INTERNAL_SERVER_ERROR);
-        }
-    }
-
-    /**
-     * Returns a Xml representation of the node type definition(s) according
-     * to the info object.
-     *
-     * @param document
-     * @return Xml representation of the node type definition(s)
-     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
-     */
-    public Element toXml(Document document) {
-        Element report = document.createElement(NODETYPES_ELEMENT);
-        // loop over the nodetypes to be returned in the report
-            while (ntIter.hasNext()) {
-                NodeType nt = ntIter.nextNodeType();
-            Element ntDef = document.createElement(NODETYPE_ELEMENT);
-                ntDef.setAttribute(NAME_ATTRIBUTE, nt.getName());
-                ntDef.setAttribute(ISMIXIN_ATTRIBUTE, Boolean.toString(nt.isMixin()));
-                ntDef.setAttribute(HASORDERABLECHILDNODES_ATTRIBUTE, Boolean.toString(nt.hasOrderableChildNodes()));
-
-		// declared supertypes
-		NodeType[] snts = nt.getDeclaredSupertypes();
-            Element supertypes = DomUtil.addChildElement(ntDef, SUPERTYPES_ELEMENT, null);
-		for (int i = 0; i < snts.length; i++) {
-                DomUtil.addChildElement(supertypes, SUPERTYPE_ELEMENT, null, snts[i].getName());
-		}
-
-		// declared childnode defs
-		NodeDefinition[] cnd = nt.getChildNodeDefinitions();
-		for (int i = 0; i < cnd.length; i++) {
-		    if (cnd[i].getDeclaringNodeType().getName().equals(nt.getName())) {
-                    ntDef.appendChild(NodeDefinitionImpl.create(cnd[i]).toXml(document));
-		    }
-		}
-
-		// declared propertyDefs
-		PropertyDefinition[] pd = nt.getPropertyDefinitions();
-		for (int i = 0; i < pd.length; i++) {
-		    if (pd[i].getDeclaringNodeType().getName().equals(nt.getName())) {
-                    ntDef.appendChild(PropertyDefinitionImpl.create(pd[i]).toXml(document));
-		    }
-		}
-
-                String primaryItemName = nt.getPrimaryItemName();
-                if (primaryItemName != null) {
-                    ntDef.setAttribute(PRIMARYITEMNAME_ATTRIBUTE, primaryItemName);
-                }
-            report.appendChild(ntDef);
-        }
-        return report;
-    }
-
-    /**
-     * Parse the Xml element in the info object an return an interator over
-     * the specified node types.
-     *
-     * @return
-     * @throws RepositoryException
-     * @throws DavException
-     */
-    private static NodeTypeIterator getNodeTypes(Session session, ReportInfo info) throws RepositoryException, DavException {
-        NodeTypeIterator ntIter = null;
-        NodeTypeManager ntMgr = session.getWorkspace().getNodeTypeManager();
-
-        // check the simple types first...
-        if (info.containsContentElement(XML_REPORT_ALLNODETYPES, NAMESPACE)) {
-                    ntIter = ntMgr.getAllNodeTypes();
-        } else if (info.containsContentElement(XML_REPORT_MIXINNODETYPES, NAMESPACE)) {
-                    ntIter = ntMgr.getMixinNodeTypes();
-        } else if (info.containsContentElement(XML_REPORT_PRIMARYNODETYPES, NAMESPACE)) {
-                    ntIter = ntMgr.getPrimaryNodeTypes();
-                }
-        // None of the simple types. test if a report for individual nodetypes
-        // was request. If not, the request body is not valid.
-        if (ntIter == null) {
-            List ntList = new ArrayList();
-            List elemList = info.getContentElements(XML_NODETYPE, NAMESPACE);
-            if (elemList.isEmpty()) {
-                // throw exception if the request body does not contain a single nodetype element
-                throw new DavException(DavServletResponse.SC_BAD_REQUEST, "NodeTypes report: request body has invalid format.");
-            }
-
-            // todo: find better solution...
-            Iterator elemIter = elemList.iterator();
-            while (elemIter.hasNext()) {
-                Element el = ((Element)elemIter.next());
-                String nodetypeName = DomUtil.getChildTextTrim(el, XML_NODETYPENAME, NAMESPACE);
-                if (nodetypeName != null) {
-                    ntList.add(ntMgr.getNodeType(nodetypeName));
-                }
-            }
-            ntIter = new IteratorHelper(Collections.unmodifiableCollection(ntList));
-        }
-
-        return ntIter;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/version/report/RegisteredNamespacesReport.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/version/report/RegisteredNamespacesReport.java
deleted file mode 100644
index c1504bd..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/version/report/RegisteredNamespacesReport.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.jcr.version.report;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.version.DeltaVResource;
-import org.apache.jackrabbit.webdav.version.report.Report;
-import org.apache.jackrabbit.webdav.version.report.ReportType;
-import org.apache.jackrabbit.webdav.version.report.ReportInfo;
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavServletResponse;
-import org.apache.jackrabbit.webdav.DavSession;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.apache.jackrabbit.webdav.jcr.ItemResourceConstants;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-import javax.jcr.NamespaceRegistry;
-import javax.jcr.RepositoryException;
-
-/**
- * <code>RegisteredNamespacesReport</code> let the client retrieve the namespaces
- * registered on the repository.<p/>
- *
- * Request body:
- * <pre>
- * &lt;!ELEMENT registerednamespaces EMPTY &gt;
- * </pre>
- *
- * Response body:
- * <pre>
- * &lt;!ELEMENT registerednamespaces-report (namespace)* &gt;
- * &lt;!ELEMENT namespace (prefix, uri) &gt;
- * &lt;!ELEMENT prefix (#PCDATA) &gt;
- * &lt;!ELEMENT uri (#PCDATA) &gt;
- * </pre>
- *
- * @see javax.jcr.Workspace#getNamespaceRegistry() 
- */
-public class RegisteredNamespacesReport implements Report, ItemResourceConstants {
-
-    private static Logger log = Logger.getLogger(RegisteredNamespacesReport.class);
-
-    /**
-     * The registered type of this report.
-     */
-    public static final ReportType REGISTERED_NAMESPACES_REPORT = ReportType.register("registerednamespaces", ItemResourceConstants.NAMESPACE, RegisteredNamespacesReport.class);
-
-    private NamespaceRegistry nsReg;
-
-    /**
-     * Returns {@link #REGISTERED_NAMESPACES_REPORT} type.
-     * @return {@link #REGISTERED_NAMESPACES_REPORT}
-     * @see org.apache.jackrabbit.webdav.version.report.Report#getType()
-     */
-    public ReportType getType() {
-        return REGISTERED_NAMESPACES_REPORT;
-    }
-
-    /**
-     * Always returns <code>false</code>.
-     *
-     * @return false
-     * @see org.apache.jackrabbit.webdav.version.report.Report#isMultiStatusReport()
-     */
-    public boolean isMultiStatusReport() {
-        return false;
-    }
-
-    /**
-     * @see Report#init(org.apache.jackrabbit.webdav.version.DeltaVResource, org.apache.jackrabbit.webdav.version.report.ReportInfo)
-     */
-    public void init(DeltaVResource resource, ReportInfo info) throws DavException {
-        if (info == null) {
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "ReportInfo must not be null.");
-        }
-        if (resource == null) {
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "Resource must not be null.");
-        }
-        if (!getType().isRequestedReportType(info)) {
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "registerednamespaces element expected.");
-        }
-        try {
-            DavSession session = resource.getSession();
-            if (session == null || session.getRepositorySession() == null) {
-                throw new DavException(DavServletResponse.SC_BAD_REQUEST, "The resource must provide a non-null session object in order to create the registerednamespaces report.");
-            }
-            nsReg = session.getRepositorySession().getWorkspace().getNamespaceRegistry();
-        } catch (RepositoryException e) {
-            throw new DavException(DavServletResponse.SC_INTERNAL_SERVER_ERROR);
-        }
-    }
-
-    /**
-     * Returns a Xml representation of the registered namespace(s).
-     *
-     * @return Xml representation of the registered namespace(s)
-     * error occurs while retrieving the namespaces.
-     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
-     * @param document
-     */
-    public Element toXml(Document document)  {
-        Element report = DomUtil.createElement(document, "registerednamespaces-report", NAMESPACE);
-        try {
-	    String[] prefixes = nsReg.getPrefixes();
-	    for (int i = 0; i < prefixes.length; i++) {
-                Element elem = DomUtil.addChildElement(report, XML_NAMESPACE, NAMESPACE);
-                DomUtil.addChildElement(elem, XML_PREFIX, NAMESPACE, prefixes[i]);
-                DomUtil.addChildElement(elem, XML_URI, NAMESPACE, nsReg.getURI(prefixes[i]));
-            }
-        } catch (RepositoryException e) {
-            // should not occur.
-            log.error(e.getMessage());
-        }
-        return report;
-    }
-
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/version/report/RepositoryDescriptorsReport.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/version/report/RepositoryDescriptorsReport.java
deleted file mode 100644
index 4f4f442..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/version/report/RepositoryDescriptorsReport.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.jcr.version.report;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.version.DeltaVResource;
-import org.apache.jackrabbit.webdav.version.report.Report;
-import org.apache.jackrabbit.webdav.version.report.ReportType;
-import org.apache.jackrabbit.webdav.version.report.ReportInfo;
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavSession;
-import org.apache.jackrabbit.webdav.DavServletResponse;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.apache.jackrabbit.webdav.jcr.ItemResourceConstants;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-import javax.jcr.Repository;
-
-/**
- * <code>RepositoryDescriptorsReport</code> allows to retrieve the repository
- * descriptors. The request body must be an empty 'dcr:repositorydescriptors' element:
- * <pre>
- * &lt;!ELEMENT repositorydescriptors EMPTY &gt;
- * </pre>
- * <br>
- * The response body must match the following format
- *
- * <pre>
- * &lt;!ELEMENT repositorydescriptors-report ( descriptor )* &gt;
- * &lt;!ELEMENT descriptor ( descriptorkey, descriptorvalue ) &gt;
- * &lt;!ELEMENT descriptorkey (#PCDATA) &gt;
- * &lt;!ELEMENT descriptorvalue (#PCDATA) &gt;
- * </pre>
- *
- * @see javax.jcr.Repository#getDescriptorKeys()
- * @see javax.jcr.Repository#getDescriptor(String)
- */
-public class RepositoryDescriptorsReport implements Report, ItemResourceConstants {
-
-    private static Logger log = Logger.getLogger(RepositoryDescriptorsReport.class);
-
-    /**
-     * The registered type of this report.
-     */
-    public static final ReportType REPOSITORY_DESCRIPTORS_REPORT = ReportType.register("repositorydescriptors", ItemResourceConstants.NAMESPACE, RepositoryDescriptorsReport.class);
-
-    private Repository repository;
-
-    /**
-     * Returns {@link #REPOSITORY_DESCRIPTORS_REPORT} type.
-     * @return {@link #REPOSITORY_DESCRIPTORS_REPORT}
-     * @see org.apache.jackrabbit.webdav.version.report.Report#getType()
-     */
-    public ReportType getType() {
-        return REPOSITORY_DESCRIPTORS_REPORT;
-    }
-
-    /**
-     * Always returns <code>false</code>.
-     *
-     * @return false
-     * @see org.apache.jackrabbit.webdav.version.report.Report#isMultiStatusReport()
-     */
-    public boolean isMultiStatusReport() {
-        return false;
-    }
-
-    /**
-     * @see Report#init(org.apache.jackrabbit.webdav.version.DeltaVResource, org.apache.jackrabbit.webdav.version.report.ReportInfo) 
-     */
-    public void init(DeltaVResource resource, ReportInfo info) throws DavException {
-        if (resource == null) {
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "Resource must not be null.");
-        }
-        if (!getType().isRequestedReportType(info)) {
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "repositorydescriptors element expected.");
-        }
-        DavSession session = resource.getSession();
-        if (session == null || session.getRepositorySession() == null) {
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "The resource must provide a non-null session object in order to create the repositorydescriptors report.");
-        }
-        repository = session.getRepositorySession().getRepository();
-    }
-
-    /**
-     * Returns a Xml representation of the repository descriptors according
-     * to the info object.
-     *
-     * @return Xml representation of the repository descriptors
-     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
-     * @param document
-     */
-    public Element toXml(Document document) {
-        Element report = DomUtil.createElement(document, "repositorydescriptors-report", NAMESPACE);
-        String[] keys = repository.getDescriptorKeys();
-        for (int i = 0; i < keys.length; i++) {
-            Element elem = DomUtil.addChildElement(report, XML_DESCRIPTOR, NAMESPACE);
-            DomUtil.addChildElement(elem, XML_DESCRIPTORKEY, NAMESPACE, keys[i]);
-            DomUtil.addChildElement(elem, XML_DESCRIPTORVALUE, NAMESPACE, repository.getDescriptor(keys[i]));
-        }
-        return report;
-    }
-
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/version/report/package.html b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/version/report/package.html
deleted file mode 100644
index 92f1428..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/jcr/version/report/package.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<body>
-Contains JCR specific reports.
-</body>
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/DavResourceImpl.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/DavResourceImpl.java
deleted file mode 100644
index 0177d36..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/DavResourceImpl.java
+++ /dev/null
@@ -1,1011 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.simple;
-
-import org.apache.jackrabbit.JcrConstants;
-import org.apache.jackrabbit.server.io.AbstractExportContext;
-import org.apache.jackrabbit.server.io.ExportContext;
-import org.apache.jackrabbit.server.io.ExportContextImpl;
-import org.apache.jackrabbit.server.io.IOManager;
-import org.apache.jackrabbit.server.io.IOUtil;
-import org.apache.jackrabbit.server.io.ImportContext;
-import org.apache.jackrabbit.server.io.ImportContextImpl;
-import org.apache.jackrabbit.util.ISO9075;
-import org.apache.jackrabbit.util.Text;
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavResource;
-import org.apache.jackrabbit.webdav.DavResourceFactory;
-import org.apache.jackrabbit.webdav.DavResourceIterator;
-import org.apache.jackrabbit.webdav.DavResourceIteratorImpl;
-import org.apache.jackrabbit.webdav.DavResourceLocator;
-import org.apache.jackrabbit.webdav.DavServletResponse;
-import org.apache.jackrabbit.webdav.DavSession;
-import org.apache.jackrabbit.webdav.MultiStatusResponse;
-import org.apache.jackrabbit.webdav.observation.ObservationConstants;
-import org.apache.jackrabbit.webdav.io.InputContext;
-import org.apache.jackrabbit.webdav.io.OutputContext;
-import org.apache.jackrabbit.webdav.jcr.JcrDavException;
-import org.apache.jackrabbit.webdav.jcr.lock.JcrActiveLock;
-import org.apache.jackrabbit.webdav.lock.ActiveLock;
-import org.apache.jackrabbit.webdav.lock.LockDiscovery;
-import org.apache.jackrabbit.webdav.lock.LockInfo;
-import org.apache.jackrabbit.webdav.lock.LockManager;
-import org.apache.jackrabbit.webdav.lock.Scope;
-import org.apache.jackrabbit.webdav.lock.SupportedLock;
-import org.apache.jackrabbit.webdav.lock.Type;
-import org.apache.jackrabbit.webdav.property.DavProperty;
-import org.apache.jackrabbit.webdav.property.DavPropertyIterator;
-import org.apache.jackrabbit.webdav.property.DavPropertyName;
-import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
-import org.apache.jackrabbit.webdav.property.DavPropertySet;
-import org.apache.jackrabbit.webdav.property.DefaultDavProperty;
-import org.apache.jackrabbit.webdav.property.ResourceType;
-import org.apache.jackrabbit.webdav.xml.Namespace;
-import org.apache.log4j.Logger;
-
-import javax.jcr.Item;
-import javax.jcr.NamespaceException;
-import javax.jcr.NamespaceRegistry;
-import javax.jcr.Node;
-import javax.jcr.NodeIterator;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.Property;
-import javax.jcr.PropertyIterator;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.lock.Lock;
-import javax.jcr.nodetype.PropertyDefinition;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * DavResourceImpl implements a DavResource.
- */
-public class DavResourceImpl implements DavResource, JcrConstants {
-
-    /**
-     * the default logger
-     */
-    private static final Logger log = Logger.getLogger(DavResourceImpl.class);
-
-    private static final HashMap reservedNamespaces = new HashMap();
-
-    static {
-        reservedNamespaces.put(DavConstants.NAMESPACE.getPrefix(), DavConstants.NAMESPACE.getURI());
-        reservedNamespaces.put(ObservationConstants.NAMESPACE.getPrefix(), ObservationConstants.NAMESPACE.getURI());
-    }
-
-    private DavResourceFactory factory;
-    private LockManager lockManager;
-    private DavSession session;
-    private Node node;
-    private DavResourceLocator locator;
-
-    private DavPropertySet properties = new DavPropertySet();
-    private boolean inited = false;
-    private boolean isCollection = true;
-
-    private ItemFilter filter;
-    private IOManager ioManager;
-
-    private long modificationTime = IOUtil.UNDEFINED_TIME;
-
-    /**
-     * Create a new {@link DavResource}.
-     *
-     * @param locator
-     * @param factory
-     * @param session
-     */
-    public DavResourceImpl(DavResourceLocator locator, DavResourceFactory factory,
-                           DavSession session, ResourceConfig config) throws RepositoryException, DavException {
-        this.session = session;
-        this.factory = factory;
-        this.locator = locator;
-        this.filter = config.getItemFilter();
-        this.ioManager = config.getIOManager();
-
-        if (locator != null && locator.getResourcePath() != null) {
-            try {
-                Item item = session.getRepositorySession().getItem(locator.getJcrPath());
-                if (item != null && item.isNode()) {
-                    node = (Node) item;
-                    // define what is a collection in webdav
-                    isCollection = config.isCollectionResource(node);
-                }
-            } catch (PathNotFoundException e) {
-                // ignore: exists field evaluates to false
-            }
-        } else {
-            throw new DavException(DavServletResponse.SC_NOT_FOUND);
-        }
-    }
-
-    /**
-     * @return DavResource#COMPLIANCE_CLASS
-     * @see org.apache.jackrabbit.webdav.DavResource#getComplianceClass()
-     */
-    public String getComplianceClass() {
-        return DavResource.COMPLIANCE_CLASS;
-    }
-
-    /**
-     * @return DavResource#METHODS
-     * @see org.apache.jackrabbit.webdav.DavResource#getSupportedMethods()
-     */
-    public String getSupportedMethods() {
-        return DavResource.METHODS;
-    }
-
-    /**
-     * @see DavResource#exists() )
-     */
-    public boolean exists() {
-        return node != null;
-    }
-
-    /**
-     * @see DavResource#isCollection()
-     */
-    public boolean isCollection() {
-        return isCollection;
-    }
-
-    /**
-     * Package protected method that allows to define whether this resource
-     * represents a collection or not.
-     *
-     * @param isCollection
-     */
-    void setIsCollection(boolean isCollection) {
-        this.isCollection = isCollection;
-    }
-
-    /**
-     * @see org.apache.jackrabbit.webdav.DavResource#getLocator()
-     */
-    public DavResourceLocator getLocator() {
-        return locator;
-    }
-
-    /**
-     * @see DavResource#getResourcePath()
-     */
-    public String getResourcePath() {
-        return locator.getResourcePath();
-    }
-
-    /**
-     * @see DavResource#getHref()
-     */
-    public String getHref() {
-        return locator.getHref(isCollection());
-    }
-
-    /**
-     * Returns the the last segment of the resource path.<p>
-     * Note that this must not correspond to the name of the underlying
-     * repository item for two reasons:<ul>
-     * <li>SameNameSiblings have an index appended to their item name.</li>
-     * <li>the resource path may differ from the item path.</li>
-     * </ul>
-     * Using the item name as DAV:displayname caused problems with XP built-in
-     * client in case of resources representing SameNameSibling nodes.
-     *
-     * @see DavResource#getDisplayName()
-     */
-    public String getDisplayName() {
-        String resPath = getResourcePath();
-        return (resPath != null) ? Text.getName(resPath) : resPath;
-    }
-
-    /**
-     * @see org.apache.jackrabbit.webdav.DavResource#getModificationTime()
-     */
-    public long getModificationTime() {
-        initProperties();
-        return modificationTime;
-    }
-
-    /**
-     * If this resource exists and the specified context is not <code>null</code>
-     * this implementation build a new {@link ExportContext} based on the specified
-     * context and forwards the export to its <code>IOManager</code>. If the
-     * {@link IOManager#exportContent(ExportContext, DavResource)} fails,
-     * an <code>IOException</code> is thrown.
-     *
-     * @see DavResource#spool(OutputContext)
-     * @see ResourceConfig#getIOManager()
-     * @throws IOException if the export fails.
-     */
-    public void spool(OutputContext outputContext) throws IOException {
-        if (exists() && outputContext != null) {
-            ExportContext exportCtx = getExportContext(outputContext);
-            if (!ioManager.exportContent(exportCtx, this)) {
-                throw new IOException("Unexpected Error while spooling resource.");
-            }
-        }
-    }
-
-    /**
-     * @see DavResource#getProperty(org.apache.jackrabbit.webdav.property.DavPropertyName)
-     */
-    public DavProperty getProperty(DavPropertyName name) {
-        initProperties();
-        return properties.get(name);
-    }
-
-    /**
-     * @see DavResource#getProperties()
-     */
-    public DavPropertySet getProperties() {
-        initProperties();
-        return properties;
-    }
-
-    /**
-     * @see DavResource#getPropertyNames()
-     */
-    public DavPropertyName[] getPropertyNames() {
-        return getProperties().getPropertyNames();
-    }
-
-    /**
-     * Fill the set of properties
-     */
-    protected void initProperties() {
-        if (!exists() || inited) {
-            return;
-        }
-
-        try {
-            ioManager.exportContent(new PropertyExportCtx(), this);
-        } catch (IOException e) {
-            // should not occure....
-        }
-
-        if (getDisplayName() != null) {
-            properties.add(new DefaultDavProperty(DavPropertyName.DISPLAYNAME, getDisplayName()));
-        }
-        if (isCollection()) {
-            properties.add(new ResourceType(ResourceType.COLLECTION));
-            // Windows XP support
-            properties.add(new DefaultDavProperty(DavPropertyName.ISCOLLECTION, "1"));
-        } else {
-            properties.add(new ResourceType(ResourceType.DEFAULT_RESOURCE));
-            // Windows XP support
-            properties.add(new DefaultDavProperty(DavPropertyName.ISCOLLECTION, "0"));
-        }
-
-        /* set current lock information. If no lock is set to this resource,
-        an empty lockdiscovery will be returned in the response. */
-        properties.add(new LockDiscovery(getLock(Type.WRITE, Scope.EXCLUSIVE)));
-
-        /* lock support information: all locks are lockable. */
-        SupportedLock supportedLock = new SupportedLock();
-        supportedLock.addEntry(Type.WRITE, Scope.EXCLUSIVE);
-        properties.add(supportedLock);
-
-        // non-protected JCR properties defined on the underlying jcr node
-        try {
-            PropertyIterator it = node.getProperties();
-            while (it.hasNext()) {
-                Property p = it.nextProperty();
-                String pName = p.getName();
-                PropertyDefinition def = p.getDefinition();
-                if (def.isMultiple() || isFilteredItem(p)) {
-                    log.debug("Property '" + pName + "' not added to webdav property set (either multivalue or filtered).");
-                    continue;
-                }
-                DavPropertyName name = getDavName(pName, node.getSession());
-                String value = p.getValue().getString();
-                properties.add(new DefaultDavProperty(name, value, def.isProtected()));
-            }
-        } catch (RepositoryException e) {
-            log.error("Unexpected error while retrieving properties: " + e.getMessage());
-        }
-        inited = true;
-    }
-
-    /**
-     * @param property
-     * @throws DavException
-     * @see DavResource#setProperty(org.apache.jackrabbit.webdav.property.DavProperty)
-     */
-    public void setProperty(DavProperty property) throws DavException {
-        if (isLocked(this)) {
-            throw new DavException(DavServletResponse.SC_LOCKED);
-        }
-        if (!exists()) {
-            throw new DavException(DavServletResponse.SC_NOT_FOUND);
-        }
-        try {
-            setJcrProperty(property);
-            node.save();
-        } catch (RepositoryException e) {
-            // revert any changes made so far an throw exception
-            JcrDavException je = new JcrDavException(e);
-            try {
-                node.refresh(false);
-            } catch (RepositoryException re) {
-                // should not happen...
-            }
-            throw je;
-        }
-    }
-
-    /**
-     * @param propertyName
-     * @throws DavException
-     * @see DavResource#removeProperty(org.apache.jackrabbit.webdav.property.DavPropertyName)
-     */
-    public void removeProperty(DavPropertyName propertyName) throws DavException {
-        if (isLocked(this)) {
-            throw new DavException(DavServletResponse.SC_LOCKED);
-        }
-        if (!exists()) {
-            throw new DavException(DavServletResponse.SC_NOT_FOUND);
-        }
-        try {
-            removeJcrProperty(propertyName);
-            node.save();
-        } catch (RepositoryException e) {
-            JcrDavException je = new JcrDavException(e);
-            try {
-                node.refresh(false);
-            } catch (RepositoryException re) {
-                // should not happen...
-            }
-            throw je;
-        }
-    }
-
-    /**
-     * @see DavResource#alterProperties(org.apache.jackrabbit.webdav.property.DavPropertySet, org.apache.jackrabbit.webdav.property.DavPropertyNameSet)
-     */
-    public MultiStatusResponse alterProperties(DavPropertySet setProperties,
-                                               DavPropertyNameSet removePropertyNames)
-            throws DavException {
-        if (isLocked(this)) {
-            throw new DavException(DavServletResponse.SC_LOCKED);
-        }
-        if (!exists()) {
-            throw new DavException(DavServletResponse.SC_NOT_FOUND);
-        }
-
-        MultiStatusResponse msr = new MultiStatusResponse(getHref(), null);
-        boolean success = true;
-
-        // loop over set and remove Sets and remember all properties and propertyNames
-        // that have successfully been altered
-        List successList = new ArrayList();
-        DavPropertyIterator setIter = setProperties.iterator();
-        while (setIter.hasNext()) {
-            DavProperty prop = setIter.nextProperty();
-            try {
-                setJcrProperty(prop);
-                successList.add(prop);
-            } catch (RepositoryException e) {
-                msr.add(prop.getName(), new JcrDavException(e).getErrorCode());
-                success = false;
-            }
-        }
-
-        Iterator remNameIter = removePropertyNames.iterator();
-        while (remNameIter.hasNext()) {
-            DavPropertyName propName = (DavPropertyName) remNameIter.next();
-            try {
-                removeJcrProperty(propName);
-                successList.add(propName);
-            } catch (RepositoryException e) {
-                msr.add(propName, new JcrDavException(e).getErrorCode());
-                success = false;
-            }
-        }
-
-        try {
-            if (success) {
-                // save all changes together (reverted in case this fails)
-                node.save();
-            } else {
-                // set/remove of at least a single prop failed: undo modifications.
-                node.refresh(false);
-            }
-            /* loop over list of properties/names that were successfully altered
-               and them to the multistatus response respecting the resulte of the
-               complete action. in case of failure set the status to 'failed-dependency'
-               in order to indicate, that altering those names/properties would
-               have succeeded, if no other error occured.*/
-            Iterator it = successList.iterator();
-            while (it.hasNext()) {
-                Object o = it.next();
-                int status = (success) ? DavServletResponse.SC_OK : DavServletResponse.SC_FAILED_DEPENDENCY;
-                if (o instanceof DavProperty) {
-                    msr.add(((DavProperty) o).getName(), status);
-                } else {
-                    msr.add((DavPropertyName) o, status);
-                }
-            }
-            return msr;
-        } catch (RepositoryException e) {
-            // revert any changes made so far an throw exception
-            try {
-                node.refresh(false);
-            } catch (RepositoryException re) {
-                // should not happen
-            }
-            throw new JcrDavException(e);
-        }
-    }
-
-    /**
-     * @see DavResource#getCollection()
-     */
-    public DavResource getCollection() {
-        DavResource parent = null;
-        if (getResourcePath() != null && !getResourcePath().equals("/")) {
-            String parentPath = Text.getRelativeParent(getResourcePath(), 1);
-            if (parentPath.equals("")) {
-                parentPath = "/";
-            }
-            DavResourceLocator parentloc = locator.getFactory().createResourceLocator(locator.getPrefix(), locator.getWorkspacePath(), parentPath);
-            try {
-                parent = factory.createResource(parentloc, session);
-            } catch (DavException e) {
-                // should not occur
-            }
-        }
-        return parent;
-    }
-
-    /**
-     * @see DavResource#getMembers()
-     */
-    public DavResourceIterator getMembers() {
-        ArrayList list = new ArrayList();
-        if (exists() && isCollection()) {
-            try {
-                NodeIterator it = node.getNodes();
-                while (it.hasNext()) {
-                    Node n = it.nextNode();
-                    if (!isFilteredItem(n)) {
-                        DavResourceLocator resourceLocator = locator.getFactory().createResourceLocator(locator.getPrefix(), locator.getWorkspacePath(), n.getPath(), false);
-                        DavResource childRes = factory.createResource(resourceLocator, session);
-                        list.add(childRes);
-                    } else {
-                        log.debug("Filtered resource '" + n.getName() + "'.");
-                    }
-                }
-            } catch (RepositoryException e) {
-                // should not occure
-            } catch (DavException e) {
-                // should not occure
-            }
-        }
-        return new DavResourceIteratorImpl(list);
-    }
-
-    /**
-     * Adds a new member to this resource.
-     *
-     * @see DavResource#addMember(DavResource, org.apache.jackrabbit.webdav.io.InputContext)
-     */
-    public void addMember(DavResource member, InputContext inputContext) throws DavException {
-        if (!exists()) {
-            throw new DavException(DavServletResponse.SC_CONFLICT);
-        }
-        if (isLocked(this) || isLocked(member)) {
-            throw new DavException(DavServletResponse.SC_LOCKED);
-        }
-        // don't allow creation of nodes, that would be filtered out
-        if (isFilteredResource(member)) {
-            log.debug("Avoid creation of filtered resource: " + member.getDisplayName());
-            throw new DavException(DavServletResponse.SC_FORBIDDEN);
-        }
-        try {
-            String memberName = Text.getName(member.getLocator().getJcrPath());
-            ImportContext ctx = getImportContext(inputContext, memberName);
-            if (!ioManager.importContent(ctx, member)) {
-                // any changes should have been reverted in the importer
-                throw new DavException(DavServletResponse.SC_UNSUPPORTED_MEDIA_TYPE);
-            }
-            // persist changes after successful import
-            node.save();
-        } catch (RepositoryException e) {
-            log.error("Error while importing resource: " + e.toString());
-            throw new JcrDavException(e);
-        } catch (IOException e) {
-            log.error("Error while importing resource: " + e.toString());
-            throw new DavException(DavServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage());
-        }
-    }
-
-    /**
-     * @see DavResource#removeMember(DavResource)
-     */
-    public void removeMember(DavResource member) throws DavException {
-        if (!exists() || !member.exists()) {
-            throw new DavException(DavServletResponse.SC_NOT_FOUND);
-        }
-        if (isLocked(this) || isLocked(member)) {
-            throw new DavException(DavServletResponse.SC_LOCKED);
-        }
-
-        // don't allow removal of nodes, that would be filtered out
-        if (isFilteredResource(member)) {
-            log.debug("Avoid removal of filtered resource: " + member.getDisplayName());
-            throw new DavException(DavServletResponse.SC_FORBIDDEN);
-        }
-
-        try {
-            // make sure, non-jcr locks are removed.
-            if (!isJsrLockable()) {
-                ActiveLock lock = getLock(Type.WRITE, Scope.EXCLUSIVE);
-                if (lock != null) {
-                    lockManager.releaseLock(lock.getToken(), member);
-                }
-            }
-            ActiveLock lock = getLock(Type.WRITE, Scope.EXCLUSIVE);
-            if (lock != null && lockManager.hasLock(lock.getToken(), member)) {
-                lockManager.releaseLock(lock.getToken(), member);
-            }
-
-            String itemPath = member.getLocator().getJcrPath();
-            Item memItem = session.getRepositorySession().getItem(itemPath);
-            memItem.remove();
-            session.getRepositorySession().save();
-        } catch (RepositoryException e) {
-            throw new JcrDavException(e);
-        }
-    }
-
-    /**
-     * @see DavResource#move(DavResource)
-     */
-    public void move(DavResource destination) throws DavException {
-        if (!exists()) {
-            throw new DavException(DavServletResponse.SC_NOT_FOUND);
-        }
-        if (isLocked(this)) {
-            throw new DavException(DavServletResponse.SC_LOCKED);
-        }
-        if (isFilteredResource(destination)) {
-            throw new DavException(DavServletResponse.SC_FORBIDDEN);
-        }
-        try {
-            String destItemPath = destination.getLocator().getJcrPath();
-            session.getRepositorySession().getWorkspace().move(locator.getJcrPath(), destItemPath);
-        } catch (RepositoryException e) {
-            throw new JcrDavException(e);
-        }
-    }
-
-    /**
-     * @see DavResource#copy(DavResource, boolean)
-     */
-    public void copy(DavResource destination, boolean shallow) throws DavException {
-        if (!exists()) {
-            throw new DavException(DavServletResponse.SC_NOT_FOUND);
-        }
-        if (isLocked(destination)) {
-            throw new DavException(DavServletResponse.SC_LOCKED);
-        }
-        if (isFilteredResource(destination)) {
-            throw new DavException(DavServletResponse.SC_FORBIDDEN);
-        }
-        // TODO: support shallow and deep copy
-        if (shallow) {
-            throw new DavException(DavServletResponse.SC_FORBIDDEN, "Unable to perform shallow copy.");
-        }
-        try {
-            String destItemPath = destination.getLocator().getJcrPath();
-            session.getRepositorySession().getWorkspace().copy(locator.getJcrPath(), destItemPath);
-        } catch (PathNotFoundException e) {
-            // according to rfc 2518: missing parent
-            throw new DavException(DavServletResponse.SC_CONFLICT, e.getMessage());
-        } catch (RepositoryException e) {
-            throw new JcrDavException(e);
-        }
-    }
-
-    /**
-     * @param type
-     * @param scope
-     * @return true if type is {@link Type#WRITE} and scope is {@link Scope#EXCLUSIVE}
-     * @see DavResource#isLockable(org.apache.jackrabbit.webdav.lock.Type, org.apache.jackrabbit.webdav.lock.Scope)
-     */
-    public boolean isLockable(Type type, Scope scope) {
-        return Type.WRITE.equals(type) && Scope.EXCLUSIVE.equals(scope);
-    }
-
-    /**
-     * @see DavResource#hasLock(org.apache.jackrabbit.webdav.lock.Type, org.apache.jackrabbit.webdav.lock.Scope)
-     */
-    public boolean hasLock(Type type, Scope scope) {
-        return getLock(type, scope) != null;
-    }
-
-    /**
-     * @see DavResource#getLock(Type, Scope)
-     */
-    public ActiveLock getLock(Type type, Scope scope) {
-        ActiveLock lock = null;
-        if (exists() && Type.WRITE.equals(type) && Scope.EXCLUSIVE.equals(scope)) {
-            // try to retrieve the repository lock information first
-            try {
-                if (node.isLocked()) {
-                    Lock jcrLock = node.getLock();
-                    if (jcrLock != null && jcrLock.isLive()) {
-                        lock = new JcrActiveLock(jcrLock);
-                    }
-                }
-            } catch (RepositoryException e) {
-                // LockException (no lock applies) >> should never occur
-                // RepositoryException, AccessDeniedException or another error >> ignore
-            }
-
-            // could not retrieve a jcr-lock. test if a simple webdav lock is present.
-            if (lock == null) {
-                lock = lockManager.getLock(type, scope, this);
-            }
-        }
-        return lock;
-    }
-
-    /**
-     * @see org.apache.jackrabbit.webdav.DavResource#getLocks()
-     */
-    public ActiveLock[] getLocks() {
-        ActiveLock writeLock = getLock(Type.WRITE, Scope.EXCLUSIVE);
-        return (writeLock != null) ? new ActiveLock[]{writeLock} : new ActiveLock[0];
-    }
-
-    /**
-     * @see DavResource#lock(LockInfo)
-     */
-    public ActiveLock lock(LockInfo lockInfo) throws DavException {
-        ActiveLock lock = null;
-        if (isLockable(lockInfo.getType(), lockInfo.getScope())) {
-            // TODO: deal with existing locks, that may have been created, before the node was jcr-lockable...
-            if (isJsrLockable()) {
-                try {
-                    // try to execute the lock operation
-                    Lock jcrLock = node.lock(lockInfo.isDeep(), false);
-                    if (jcrLock != null) {
-                        lock = new JcrActiveLock(jcrLock);
-                    }
-                } catch (RepositoryException e) {
-                    throw new JcrDavException(e);
-                }
-            } else {
-                // create a new webdav lock
-                lock = lockManager.createLock(lockInfo, this);
-            }
-        } else {
-            throw new DavException(DavServletResponse.SC_PRECONDITION_FAILED, "Unsupported lock type or scope.");
-        }
-        return lock;
-    }
-
-    /**
-     * @see DavResource#refreshLock(LockInfo, String)
-     */
-    public ActiveLock refreshLock(LockInfo lockInfo, String lockToken) throws DavException {
-        if (!exists()) {
-            throw new DavException(DavServletResponse.SC_NOT_FOUND);
-        }
-        ActiveLock lock = getLock(lockInfo.getType(), lockInfo.getScope());
-        if (lock == null) {
-            throw new DavException(DavServletResponse.SC_PRECONDITION_FAILED, "No lock with the given type/scope present on resource " + getResourcePath());
-        }
-
-        if (lock instanceof JcrActiveLock) {
-            try {
-                // refresh JCR lock and return the original lock object.
-                node.getLock().refresh();
-            } catch (RepositoryException e) {
-                throw new JcrDavException(e);
-            }
-        } else {
-            lock = lockManager.refreshLock(lockInfo, lockToken, this);
-        }
-        /* since lock has infinite lock (simple) or undefined timeout (jcr)
-           return the lock as retrieved from getLock. */
-        return lock;
-    }
-
-    /**
-     * @see DavResource#unlock(String)
-     */
-    public void unlock(String lockToken) throws DavException {
-        ActiveLock lock = getLock(Type.WRITE, Scope.EXCLUSIVE);
-        if (lock == null) {
-            throw new DavException(DavServletResponse.SC_PRECONDITION_FAILED);
-        } else if (lock.isLockedByToken(lockToken)) {
-            if (lock instanceof JcrActiveLock) {
-                try {
-                    node.unlock();
-                } catch (RepositoryException e) {
-                    throw new JcrDavException(e);
-                }
-            } else {
-                lockManager.releaseLock(lockToken, this);
-            }
-        } else {
-            throw new DavException(DavServletResponse.SC_LOCKED);
-        }
-    }
-
-    /**
-     * @see DavResource#addLockManager(org.apache.jackrabbit.webdav.lock.LockManager)
-     */
-    public void addLockManager(LockManager lockMgr) {
-        this.lockManager = lockMgr;
-    }
-
-    /**
-     * @see org.apache.jackrabbit.webdav.DavResource#getFactory()
-     */
-    public DavResourceFactory getFactory() {
-        return factory;
-    }
-
-    /**
-     * Returns the node that is wrapped by this resource.
-     *
-     * @return
-     */
-    protected Node getNode() {
-        return node;
-    }
-
-    /**
-     * Returns a new <code>ImportContext</code>
-     *
-     * @param inputCtx
-     * @param systemId
-     * @return
-     * @throws IOException
-     */
-    protected ImportContext getImportContext(InputContext inputCtx, String systemId) throws IOException {
-        return new ImportContextImpl(node, systemId, inputCtx);
-    }
-
-    /**
-     * Returns a new <code>ExportContext</code>
-     *
-     * @param outputCtx
-     * @return
-     * @throws IOException
-     */
-    protected ExportContext getExportContext(OutputContext outputCtx) throws IOException {
-        return new ExportContextImpl(node, outputCtx);
-    }
-
-    /**
-     * Returns true, if the underlying node is nodetype jcr:lockable,
-     * without checking its current lock status. If the node is not jcr-lockable
-     * an attempt is made to add the mix:lockable mixin type.
-     *
-     * @return true if this resource is lockable.
-     */
-    private boolean isJsrLockable() {
-        boolean lockable = false;
-        if (exists()) {
-            try {
-                lockable = node.isNodeType(MIX_LOCKABLE);
-                // not jcr-lockable: try to make the node jcr-lockable
-                if (!lockable && node.canAddMixin(MIX_LOCKABLE)) {
-                    node.addMixin(MIX_LOCKABLE);
-                    node.save();
-                    lockable = true;
-                }
-            } catch (RepositoryException e) {
-                // -> node is definitely not jcr-lockable.
-            }
-        }
-        return lockable;
-    }
-
-    /**
-     * Return true if this resource cannot be modified due to a write lock
-     * that is not owned by the given session.
-     *
-     * @return true if this resource cannot be modified due to a write lock
-     */
-    private boolean isLocked(DavResource res) {
-        ActiveLock lock = res.getLock(Type.WRITE, Scope.EXCLUSIVE);
-        if (lock == null) {
-            return false;
-        } else {
-            String[] sLockTokens = session.getLockTokens();
-            for (int i = 0; i < sLockTokens.length; i++) {
-                if (sLockTokens[i].equals(lock.getToken())) {
-                    return false;
-                }
-            }
-            return true;
-        }
-    }
-
-    /**
-     * Builds a webdav property name from the given jcrName. In case the jcrName
-     * contains a namespace prefix that would conflict with any of the predefined
-     * webdav namespaces a new prefix is assigned.<br>
-     * Please note, that the local part of the jcrName is checked for XML
-     * compatibility by calling {@link ISO9075#encode(String)}
-     *
-     * @param jcrName
-     * @param session
-     * @return a <code>DavPropertyName</code> for the given jcr name.
-     */
-    private DavPropertyName getDavName(String jcrName, Session session) throws RepositoryException {
-        // make sure the local name is xml compliant
-        String localName = ISO9075.encode(Text.getLocalName(jcrName));
-        String prefix = Text.getNamespacePrefix(jcrName);
-        String uri = session.getNamespaceURI(prefix);
-        // check for conflicts with reserved webdav-namespaces
-        if (reservedNamespaces.containsKey(prefix) && !reservedNamespaces.get(prefix).equals(uri)) {
-            prefix = prefix + "0";
-        }
-        Namespace namespace = Namespace.getNamespace(prefix, uri);
-        DavPropertyName name = DavPropertyName.create(localName, namespace);
-        return name;
-    }
-
-    /**
-     * Build jcr property name from dav property name. If the property name
-     * defines a namespace uri, that has not been registered yet, an attempt
-     * is made to register the uri with the prefix defined. Note, that no
-     * extra effort is made to generated a unique prefix.
-     *
-     * @param propName
-     * @return jcr name
-     * @throws RepositoryException
-     */
-    private String getJcrName(DavPropertyName propName) throws RepositoryException {
-        // remove any encoding necessary for xml compliance
-        String pName = ISO9075.decode(propName.getName());
-        String uri = propName.getNamespace().getURI();
-        if (uri != null && !"".equals(uri)) {
-            Session s = session.getRepositorySession();
-            String prefix;
-            try {
-                // lookup 'prefix' in the session-ns-mappings / namespace-registry
-                prefix = s.getNamespacePrefix(uri);
-            } catch (NamespaceException e) {
-                // namespace uri has not been registered yet
-                NamespaceRegistry nsReg = s.getWorkspace().getNamespaceRegistry();
-                prefix = propName.getNamespace().getPrefix();
-                // avoid trouble with default namespace
-                if (prefix == null || "".equals(prefix)) {
-                    prefix = "_pre" + nsReg.getPrefixes().length + 1;
-                }
-                // NOTE: will fail if prefix is already in use in the namespace registry
-                nsReg.registerNamespace(prefix, uri);
-            }
-            if (prefix != null && !"".equals(prefix)) {
-                pName = prefix + ":" + pName;
-            }
-        }
-        return pName;
-    }
-
-    /**
-     * @param property
-     * @throws RepositoryException
-     */
-    private void setJcrProperty(DavProperty property) throws RepositoryException {
-        // retrieve value
-        String value = property.getValue().toString();
-        // set value; since multivalued-properties are not listed in the set
-        // of available properties, this extra validation-check is omitted.
-        node.setProperty(getJcrName(property.getName()), value);
-    }
-
-    /**
-     * @param propertyName
-     * @throws RepositoryException
-     */
-    private void removeJcrProperty(DavPropertyName propertyName) throws RepositoryException {
-        String jcrName = getJcrName(propertyName);
-        if (node.hasProperty(jcrName)) {
-            node.getProperty(jcrName).remove();
-        }
-        // removal of non existing property succeeds
-    }
-
-    private boolean isFilteredResource(DavResource resource) {
-        // TODO: filtered nodetypes should be checked as well in order to prevent problems.
-        return filter != null && filter.isFilteredItem(resource.getDisplayName(), session.getRepositorySession());
-    }
-
-    private boolean isFilteredItem(Item item) {
-        return filter != null && filter.isFilteredItem(item);
-    }
-
-    //--------------------------------------------------------< inner class >---
-    /**
-     * ExportContext that writes the properties of this <code>DavResource</code>
-     * and provides not stream.
-     */
-    private class PropertyExportCtx extends AbstractExportContext {
-
-        private PropertyExportCtx() {
-            super(node, false, null);
-            // set defaults:
-            setCreationTime(IOUtil.UNDEFINED_TIME);
-            setModificationTime(IOUtil.UNDEFINED_TIME);
-        }
-
-        public OutputStream getOutputStream() {
-            return null;
-        }
-
-        public void setContentLanguage(String contentLanguage) {
-            if (contentLanguage != null) {
-                properties.add(new DefaultDavProperty(DavPropertyName.GETCONTENTLANGUAGE, contentLanguage));
-            }
-        }
-
-        public void setContentLength(long contentLength) {
-            if (contentLength > IOUtil.UNDEFINED_LENGTH) {
-                properties.add(new DefaultDavProperty(DavPropertyName.GETCONTENTLENGTH, contentLength + ""));
-            }
-        }
-
-        public void setContentType(String mimeType, String encoding) {
-            String contentType = IOUtil.buildContentType(mimeType, encoding);
-            if (contentType != null) {
-                properties.add(new DefaultDavProperty(DavPropertyName.GETCONTENTTYPE, contentType));
-            }
-        }
-
-        public void setCreationTime(long creationTime) {
-            String created = IOUtil.getCreated(creationTime);
-            properties.add(new DefaultDavProperty(DavPropertyName.CREATIONDATE, created));
-        }
-
-        public void setModificationTime(long modTime) {
-            if (modTime <= IOUtil.UNDEFINED_TIME) {
-                modificationTime = new Date().getTime();
-            } else {
-                modificationTime = modTime;
-            }
-            String lastModified = IOUtil.getLastModified(modificationTime);
-            properties.add(new DefaultDavProperty(DavPropertyName.GETLASTMODIFIED, lastModified));
-        }
-
-        public void setETag(String etag) {
-            if (etag != null) {
-                properties.add(new DefaultDavProperty(DavPropertyName.GETETAG, etag));
-            }
-        }
-
-        public void setProperty(Object propertyName, Object propertyValue) {
-            if (propertyName instanceof DavPropertyName) {
-                DavPropertyName pName = (DavPropertyName)propertyName;
-                properties.add(new DefaultDavProperty(pName, propertyValue));
-            }
-        }
-    }
-}
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/DavSessionImpl.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/DavSessionImpl.java
deleted file mode 100644
index a304b36..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/DavSessionImpl.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.simple;
-
-import org.apache.jackrabbit.webdav.DavSession;
-
-import javax.jcr.Session;
-import java.util.HashSet;
-
-/**
- * Simple implementation of the {@link DavSession} interface. Stores
- * lock tokens but does not yet store references.
- */
-public class DavSessionImpl implements DavSession {
-
-    /** the underlying jcr session */
-    private final Session session;
-
-    /** the lock tokens of this session */
-    private final HashSet lockTokens = new HashSet();
-
-    /**
-     * Creates a new DavSession based on a jcr session
-     * @param session
-     */
-    public DavSessionImpl(Session session) {
-        this.session = session;
-    }
-
-    /**
-     * @see DavSession#addReference(Object)
-     */
-    public void addReference(Object reference) {
-        throw new UnsupportedOperationException("No yet implemented.");
-    }
-
-    /**
-     * @see DavSession#removeReference(Object)
-     */
-    public void removeReference(Object reference) {
-        throw new UnsupportedOperationException("No yet implemented.");
-    }
-
-    /**
-     * @see DavSession#getRepositorySession()
-     */
-    public Session getRepositorySession() {
-        return session;
-    }
-
-    /**
-     * @see DavSession#addLockToken(String)
-     */
-    public void addLockToken(String token) {
-        lockTokens.add(token);
-        session.addLockToken(token);
-    }
-
-    /**
-     * @see DavSession#getLockTokens()
-     */
-    public String[] getLockTokens() {
-        return (String[]) lockTokens.toArray(new String[lockTokens.size()]);
-    }
-
-    /**
-     * @see DavSession#removeLockToken(String)
-     */
-    public void removeLockToken(String token) {
-        lockTokens.remove(token);
-        session.removeLockToken(token);
-    }
-}
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/DavSessionProviderImpl.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/DavSessionProviderImpl.java
deleted file mode 100644
index 7c02954..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/DavSessionProviderImpl.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.simple;
-
-import org.apache.jackrabbit.server.CredentialsProvider;
-import org.apache.jackrabbit.server.SessionProvider;
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavServletResponse;
-import org.apache.jackrabbit.webdav.DavSession;
-import org.apache.jackrabbit.webdav.DavSessionProvider;
-import org.apache.jackrabbit.webdav.WebdavRequest;
-import org.apache.jackrabbit.webdav.jcr.JcrDavException;
-import org.apache.log4j.Logger;
-
-import javax.jcr.NoSuchWorkspaceException;
-import javax.jcr.Repository;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.servlet.ServletException;
-
-/**
- * Simple implementation of the {@link org.apache.jackrabbit.webdav.DavSessionProvider}
- * interface that uses a {@link CredentialsProvider} to locate
- * credentials in the request, log into the respository, and provide
- * a {@link org.apache.jackrabbit.webdav.DavSession} to the request.
- */
-public class DavSessionProviderImpl implements DavSessionProvider {
-
-    private static Logger log = Logger.getLogger(DavSessionProviderImpl.class);
-
-    /**
-     * the repository
-     */
-    private final Repository repository;
-
-    /**
-     * the credentials provider
-     */
-    private final SessionProvider sesProvider;
-
-    /**
-     * Creates a new DavSessionProviderImpl
-     * @param rep
-     * @param sesProvider
-     */
-    public DavSessionProviderImpl(Repository rep, SessionProvider sesProvider) {
-        this.repository = rep;
-        this.sesProvider = sesProvider;
-    }
-
-    /**
-     * Acquires a DavSession. Upon success, the WebdavRequest will
-     * reference that session.
-     *
-     * A session will not be available if an exception is thrown.
-     *
-     * @param request
-     * @throws org.apache.jackrabbit.webdav.DavException if a problem occurred while obtaining the session
-     * @see DavSessionProvider#attachSession(org.apache.jackrabbit.webdav.WebdavRequest)
-     */
-    public boolean attachSession(WebdavRequest request) throws DavException {
-        try {
-            // retrieve the workspace name
-            String workspaceName = request.getRequestLocator().getWorkspaceName();
-            // empty workspaceName rather means default -> must be 'null'
-            if (workspaceName != null && "".equals(workspaceName)) {
-                workspaceName = null;
-            }
-            // login to repository
-            Session repSession = sesProvider.getSession(request, repository, workspaceName);
-            if (repSession == null) {
-                log.debug("Could not to retrieve a repository session.");
-                return false;
-            }
-            DavSession ds = new DavSessionImpl(repSession);
-            log.debug("Attaching session '"+ ds + "' to request '" + request + "'");
-            request.setDavSession(ds);
-            return true;
-        } catch (NoSuchWorkspaceException e) {
-            // the default error-code for NoSuchWorkspaceException is 409 conflict
-            // which seems not appropriate here
-            throw new JcrDavException(e, DavServletResponse.SC_NOT_FOUND);
-        } catch (RepositoryException e) {
-	    throw new JcrDavException(e);
-	} catch (ServletException e) {
-	    throw new DavException(DavServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage());
-	}
-    }
-
-    /**
-     * Only removes the <code>DavSession</code> object from the given request object.
-     * and remove all the lock tokens from the underlying repository session
-     * in order make sure they can be reset when attaching a session to the
-     * next request. Finally the session provider is informed, that the
-     * session is no longer used.
-     *
-     * @param request
-     * @see DavSessionProvider#releaseSession(org.apache.jackrabbit.webdav.WebdavRequest)
-     */
-    public void releaseSession(WebdavRequest request) {
-        DavSession ds = request.getDavSession();
-        if (ds != null) {
-            Session repSession = ds.getRepositorySession();
-            String[] lockTokens = repSession.getLockTokens();
-            for (int i = 0; i < lockTokens.length; i++) {
-                repSession.removeLockToken(lockTokens[i]);
-            }
-            sesProvider.releaseSession(repSession);
-            log.debug("Releasing session '"+ ds + "' from request '" + request + "'");
-        } else {
-            // session is null. nothing to be done.
-        }
-        request.setDavSession(null);
-    }
-}
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/DefaultItemFilter.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/DefaultItemFilter.java
deleted file mode 100644
index f637dfd..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/DefaultItemFilter.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.simple;
-
-import org.apache.log4j.Logger;
-
-import javax.jcr.Item;
-import javax.jcr.RepositoryException;
-import javax.jcr.Node;
-import javax.jcr.Property;
-import javax.jcr.Session;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * <code>DefaultItemFilter</code>...
- */
-public class DefaultItemFilter implements ItemFilter {
-
-    private static Logger log = Logger.getLogger(DefaultItemFilter.class);
-
-    private List prefixFilter = new ArrayList();
-    private List uriFilter = new ArrayList();
-    private List nodetypeFilter = new ArrayList();
-
-    public DefaultItemFilter() {
-    }
-
-    /**
-     * @see ItemFilter#setFilteredURIs(String[])
-     */
-    public void setFilteredURIs(String[] uris) {
-        if (uris != null) {
-            for (int i = 0; i < uris.length; i++) {
-                uriFilter.add(uris[i]);
-            }
-        }
-    }
-
-    /**
-     * @see ItemFilter#setFilteredPrefixes(String[])
-     */
-    public void setFilteredPrefixes(String[] prefixes) {
-        if (prefixes != null) {
-            for (int i = 0; i < prefixes.length; i++) {
-                prefixFilter.add(prefixes[i]);
-            }
-        }
-    }
-
-    /**
-     * @see ItemFilter#setFilteredNodetypes(String[])
-     */
-    public void setFilteredNodetypes(String[] nodetypeNames) {
-        if (nodetypeNames != null) {
-            for (int i = 0; i < nodetypeNames.length; i++) {
-                nodetypeFilter.add(nodetypeNames[i]);
-            }
-        }
-    }
-
-    /**
-     * Returns true if the given item matches either one of the namespace or
-     * of the the nodetype filters specified.
-     *
-     * @see ItemFilter#isFilteredItem(Item)
-     */
-    public boolean isFilteredItem(Item item) {
-        return isFilteredNamespace(item) || isFilteredNodeType(item);
-    }
-
-    /**
-     * @see ItemFilter#isFilteredItem(String, Session)
-     */
-    public boolean isFilteredItem(String displayName, Session session) {
-        return isFilteredNamespace(displayName, session);
-    }
-
-    /**
-     *
-     * @param name
-     * @param session
-     * @return
-     */
-    private boolean isFilteredNamespace(String name, Session session) {
-        // shortcut
-        if (prefixFilter.isEmpty() && uriFilter.isEmpty()) {
-            return false;
-        }
-        int pos = name.indexOf(":");
-        if (pos < 0) {
-            // no namespace info present
-            return false;
-        }
-        try {
-            String prefix = name.substring(0, pos);
-            String uri = session.getNamespaceURI(prefix);
-            return prefixFilter.contains(prefix) || uriFilter.contains(uri);
-        } catch (RepositoryException e) {
-            log.warn(e.getMessage());
-        }
-        return false;
-    }
-
-    /**
-     *
-     * @param item
-     * @return
-     */
-    private boolean isFilteredNamespace(Item item) {
-        try {
-            return isFilteredNamespace(item.getName(), item.getSession());
-        } catch (RepositoryException e) {
-            log.warn(e.getMessage());
-        }
-        return false;
-    }
-
-    /**
-     *
-     * @param item
-     * @return
-     */
-    private boolean isFilteredNodeType(Item item) {
-        // shortcut
-        if (nodetypeFilter.isEmpty()) {
-            return false;
-        }
-        try {
-            String ntName;
-            if (item.isNode()) {
-                ntName = ((Node) item).getDefinition().getDeclaringNodeType().getName();
-            } else {
-                ntName = ((Property) item).getDefinition().getDeclaringNodeType().getName();
-            }
-            return nodetypeFilter.contains(ntName);
-        } catch (RepositoryException e) {
-            log.warn(e.getMessage());
-        }
-        // nodetype info could not be retrieved
-        return false;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/ItemFilter.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/ItemFilter.java
deleted file mode 100644
index 57679d6..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/ItemFilter.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.simple;
-
-import javax.jcr.Item;
-import javax.jcr.Session;
-
-/**
- * <code>ItemFilter</code>
- */
-public interface ItemFilter {
-
-    /**
-     * Define the URIs that should be filtered out if present in the prefix
-     * of an items name.
-     *
-     * @param uris
-     */
-    public void setFilteredURIs(String[] uris);
-
-    /**
-     * Define the namespace prefixes that should be filtered if present in
-     * the prefix of an items name.
-     *
-     * @param prefixes
-     */
-    public void setFilteredPrefixes(String[] prefixes);
-
-    /**
-     * Set the nodetype names that should be used if a given item should be
-     * filtered. Note that not the nodetype(s) defined for a given item
-     * is relevant but rather the nodetype that defined the definition of the item.
-     *
-     * @param nodetypeNames
-     */
-    public void setFilteredNodetypes(String[] nodetypeNames);
-
-    /**
-     * Returns true if the given item should be filtered.
-     *
-     * @param item to be tested
-     * @return true if the given item should be filtered.
-     */
-    public boolean isFilteredItem(Item item);
-
-    /**
-     * Returns true if the resouce with the given name should be filtered.
-     *
-     * @param name to be tested for a filtered namespace prefix
-     * @param session used for looking up namespace mappings
-     * @return true if the given resource should be filtered.
-     */
-    public boolean isFilteredItem(String name, Session session);
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/LocatorFactoryImpl.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/LocatorFactoryImpl.java
deleted file mode 100644
index c837df2..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/LocatorFactoryImpl.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jackrabbit.webdav.simple;
-
-import org.apache.jackrabbit.util.Text;
-import org.apache.jackrabbit.webdav.DavLocatorFactory;
-import org.apache.jackrabbit.webdav.DavResourceLocator;
-import org.apache.log4j.Logger;
-
-/**
- * ResourceFactoryImpl implements a simple DavLocatorFactory
- */
-// todo improve special handling of root item....
-public class LocatorFactoryImpl implements DavLocatorFactory {
-
-    /** the default logger */
-    private static final Logger log = Logger.getLogger(LocatorFactoryImpl.class);
-
-    private final String repositoryPrefix;
-
-    public LocatorFactoryImpl(String repositoryPrefix) {
-        this.repositoryPrefix = repositoryPrefix;
-    }
-
-    public DavResourceLocator createResourceLocator(String prefix, String href) {
-        String rPrefix = prefix + repositoryPrefix;
-        String escPath = href;
-        // remove the configured repository prefix from the path
-        if (escPath != null && escPath.startsWith(repositoryPrefix)) {
-            escPath = escPath.substring(repositoryPrefix.length());
-        }
-        // special treatment for root item, that has no name but '/' path.
-        if (escPath == null || "".equals(escPath)) {
-            escPath = "/";
-        }
-        return new Locator(rPrefix, Text.unescape(escPath), this);
-    }
-
-    public DavResourceLocator createResourceLocator(String prefix, String workspacePath, String resourcePath) {
-        return createResourceLocator(prefix, workspacePath, resourcePath, true);
-    }
-
-    public DavResourceLocator createResourceLocator(String prefix, String workspacePath, String path, boolean isResourcePath) {
-        return new Locator(prefix, path, this);
-    }
-
-    //--------------------------------------------------------------------------
-    private class Locator implements DavResourceLocator {
-
-        private final String prefix;
-        private final String resourcePath;
-        private final DavLocatorFactory factory;
-        private final String href;
-
-        private Locator(String prefix, String resourcePath, DavLocatorFactory factory) {
-            this.prefix = prefix;
-            this.factory = factory;
-            // remove trailing '/' that is not part of the resourcePath except for the root item.
-            if (resourcePath.endsWith("/") && !"/".equals(resourcePath)) {
-                resourcePath = resourcePath.substring(0, resourcePath.length()-1);
-            }
-            this.resourcePath = resourcePath;
-            href = prefix + Text.escapePath(resourcePath);
-        }
-
-        public String getPrefix() {
-            return prefix;
-        }
-
-        public String getResourcePath() {
-            return resourcePath;
-        }
-
-        public String getWorkspacePath() {
-            return "";
-        }
-
-        public String getWorkspaceName() {
-            return "";
-        }
-
-        public boolean isSameWorkspace(DavResourceLocator locator) {
-            return isSameWorkspace(locator.getWorkspaceName());
-        }
-
-        public boolean isSameWorkspace(String workspaceName) {
-            return getWorkspaceName().equals(workspaceName);
-        }
-
-        public String getHref(boolean isCollection) {
-            // avoid doubled trailing '/' for the root item
-            String suffix = (isCollection && !isRootLocation()) ? "/" : "";
-            return href + suffix;
-        }
-
-        public boolean isRootLocation() {
-            return "/".equals(resourcePath);
-        }
-
-        public DavLocatorFactory getFactory() {
-            return factory;
-        }
-
-        /**
-         * Returns the same as {@link #getResourcePath()}. No encoding is performed
-         * at all.
-         * @see DavResourceLocator#getJcrPath()
-         */
-        public String getJcrPath() {
-            return getResourcePath();
-        }
-
-        /**
-         * Computes the hash code from the href, which is built using the final
-         * fields prefix and resourcePath.
-         *
-         * @return the hash code
-         */
-        public int hashCode() {
-            return href.hashCode();
-        }
-
-        /**
-         * Equality of path is achieved if the specified object is a <code>DavResourceLocator</code>
-         * object with the same hash code.
-         *
-         * @param obj the object to compare to
-         * @return <code>true</code> if the 2 objects are equal;
-         *         <code>false</code> otherwise
-         */
-        public boolean equals(Object obj) {
-            if (obj instanceof DavResourceLocator) {
-                DavResourceLocator other = (DavResourceLocator) obj;
-                return hashCode() == other.hashCode();
-            }
-            return false;
-        }
-    }
-}
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/ResourceConfig.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/ResourceConfig.java
deleted file mode 100644
index 8752ff5..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/ResourceConfig.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.simple;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.server.io.IOManager;
-import org.apache.jackrabbit.server.io.DefaultIOManager;
-import org.apache.jackrabbit.webdav.xml.ElementIterator;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-import org.xml.sax.SAXException;
-
-import javax.jcr.Item;
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.ParserConfigurationException;
-import java.net.URL;
-import java.util.List;
-import java.util.ArrayList;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * <code>ResourceConfig</code>...
- */
-public class ResourceConfig {
-
-    private static Logger log = Logger.getLogger(ResourceConfig.class);
-
-    private ItemFilter itemFilter;
-    private IOManager ioManager;
-    private String[] nodetypeNames = new String[0];
-    private boolean collectionNames = false;
-
-    /**
-     * Tries to parse the given xml configuration file.
-     * The xml must match the following structure:<br>
-     * <pre>
-     * &lt;!ELEMENT config (iomanager, (collection | noncollection)?, filter?) &gt;
-     * &lt;!ELEMENT iomanager (class) &gt;
-     * &lt;!ELEMENT collection (nodetypes) &gt;
-     * &lt;!ELEMENT noncollection (nodetypes) &gt;
-     * &lt;!ELEMENT filter (class, namespaces?, nodetypes?) &gt;
-     * &lt;!ELEMENT class &gt;
-     *    &lt;!ATTLIST class
-     *      name  CDATA #REQUIRED
-     *    &gt;
-     * &lt;!ELEMENT namespaces (prefix|uri)* &gt;
-     * &lt;!ELEMENT prefix (CDATA) &gt;
-     * &lt;!ELEMENT uri (CDATA) &gt;
-     * &lt;!ELEMENT nodetypes (nodetype)* &gt;
-     * &lt;!ELEMENT nodetype (CDATA) &gt;
-     * </pre>
-     *
-     * @param configURL
-     */
-    public void parse(URL configURL) {
-        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-        factory.setNamespaceAware(true);
-        try {
-            InputStream in = configURL.openStream();
-            DocumentBuilder builder = factory.newDocumentBuilder();
-            Document document = builder.parse(in);
-            Element config = document.getDocumentElement();
-
-            if (config == null) {
-                log.error("Resource configuration: mandatory 'iomanager' element is missing.");
-                return;
-            }
-
-            Element el = DomUtil.getChildElement(config, "iomanager", null);
-            if (el != null) {
-                Object inst = buildClassFromConfig(el);
-                if (inst != null && inst instanceof IOManager) {
-                   ioManager = (IOManager)inst;
-                }
-            } else {
-                log.error("Resource configuration: mandatory 'iomanager' element is missing.");
-            }
-
-            el = DomUtil.getChildElement(config, "collection", null);
-            if (el != null) {
-                nodetypeNames = parseNodeTypesEntry(el);
-                    collectionNames = true;
-            } else if ((el = DomUtil.getChildElement(config, "noncollection", null)) != null) {
-                nodetypeNames = parseNodeTypesEntry(el);
-                    collectionNames = false;
-                }
-            // todo: should check if both 'noncollection' and 'collection' are present and write a warning
-
-            el = DomUtil.getChildElement(config, "filter", null);
-            if (el != null) {
-                Object inst = buildClassFromConfig(el);
-                if (inst != null && inst instanceof ItemFilter) {
-                    itemFilter = (ItemFilter)inst;
-                }
-                if (itemFilter != null) {
-                    itemFilter.setFilteredNodetypes(parseNodeTypesEntry(el));
-                    parseNamespacesEntry(el);
-                }
-            } else {
-                log.debug("Resource configuration: no 'filter' element specified.");
-            }
-        } catch (IOException e) {
-            log.debug("Invalid resource configuration: " + e.getMessage());
-        } catch (ParserConfigurationException e) {
-            log.warn("Failed to parse resource configuration: " + e.getMessage());
-        } catch (SAXException e) {
-            log.warn("Failed to parse resource configuration: " + e.getMessage());
-        }
-    }
-
-    private Object buildClassFromConfig(Element parent) {
-        Object instance = null;
-        Element classElem = DomUtil.getChildElement(parent, "class", null);
-        if (classElem != null) {
-            // contains a 'class' child node
-        try {
-                String className = DomUtil.getAttribute(classElem, "name", null);
-            if (className != null) {
-                Class c = Class.forName(className);
-                instance = c.newInstance();
-                } else {
-                log.error("Invalid configuration: missing 'class' element");
-            }
-        } catch (Exception e) {
-            log.error("Error while create class instance: " + e.getMessage());
-        }
-        }
-        return instance;
-    }
-
-    private void parseNamespacesEntry(Element parent) {
-        Element namespaces = DomUtil.getChildElement(parent, "namespaces", null);
-        if (namespaces != null) {
-            List l = new ArrayList();
-            // retrieve prefix child elements
-            ElementIterator it = DomUtil.getChildren(namespaces, "prefix", null);
-            while (it.hasNext()) {
-                Element e = it.nextElement();
-                l.add(DomUtil.getText(e));
-            }
-            String[] prefixes = (String[])l.toArray(new String[l.size()]);
-            l.clear();
-            // retrieve uri child elements
-            it = DomUtil.getChildren(namespaces, "uri", null);
-            while (it.hasNext()) {
-                Element e = it.nextElement();
-                l.add(DomUtil.getText(e));
-            }
-            String[] uris = (String[])l.toArray(new String[l.size()]);
-            itemFilter.setFilteredPrefixes(prefixes);
-            itemFilter.setFilteredURIs(uris);
-        }
-    }
-
-    private String[] parseNodeTypesEntry(Element parent) {
-        String[] ntNames;
-        Element nodetypes = DomUtil.getChildElement(parent, "nodetypes", null);
-        if (nodetypes != null) {
-            List l = new ArrayList();
-            ElementIterator it = DomUtil.getChildren(nodetypes, "nodetype", null);
-            while (it.hasNext()) {
-                Element e = it.nextElement();
-                l.add(DomUtil.getText(e));
-        }
-            ntNames = (String[])l.toArray(new String[l.size()]);
-        } else {
-            ntNames = new String[0];
-        }
-        return ntNames;
-    }
-
-
-    public IOManager getIOManager() {
-        if (ioManager == null) {
-            log.debug("ResourceConfig: missing io-manager > building DefaultIOManager ");
-            ioManager = new DefaultIOManager();
-        }
-        return ioManager;
-    }
-
-    /**
-     * Returns true, if the given item represents a {@link Node node} that is
-     * either any of the nodetypes specified to represent a collection or
-     * none of the nodetypes specified to represent a non-collection, respectively.
-     * If no valid configuration entry is present, this method returns true
-     * for node items. For items which are not a node, this method always
-     * returns false.
-     *
-     * @param item
-     * @return true if the given item is a node that represents a webdav
-     * collection, false otherwise.
-     */
-    public boolean isCollectionResource(Item item) {
-        if (item.isNode()) {
-            boolean isCollection = true;
-            Node n = (Node)item;
-            try {
-                for (int i = 0; i < nodetypeNames.length && isCollection; i++) {
-                    isCollection = collectionNames ? n.isNodeType(nodetypeNames[i]) : !n.isNodeType(nodetypeNames[i]);
-                }
-            } catch (RepositoryException e) {
-                log.warn(e.getMessage());
-            }
-            return isCollection;
-        } else {
-            return false;
-        }
-    }
-
-    /**
-     * Returns the item filter specified with the configuration or {@link DefaultItemFilter}
-     * if the configuration was missing the corresponding entry or the parser failed
-     * to build a <code>ItemFilter</code> instance from the configuration.
-     *
-     * @return item filter as defined by the config or {@link DefaultItemFilter}
-     */
-    public ItemFilter getItemFilter() {
-        if (itemFilter == null) {
-            log.debug("ResourceConfig: missing resource filter > building DefaultItemFilter ");
-            itemFilter = new DefaultItemFilter();
-        }
-        return itemFilter;
-    }
-}
diff --git a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/ResourceFactoryImpl.java b/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/ResourceFactoryImpl.java
deleted file mode 100644
index e308880..0000000
--- a/contrib/jcr-server/server/src/java/org/apache/jackrabbit/webdav/simple/ResourceFactoryImpl.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jackrabbit.webdav.simple;
-
-import org.apache.jackrabbit.webdav.jcr.JcrDavException;
-import org.apache.jackrabbit.webdav.lock.LockManager;
-import org.apache.jackrabbit.webdav.DavResourceFactory;
-import org.apache.jackrabbit.webdav.DavResource;
-import org.apache.jackrabbit.webdav.DavMethods;
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavServletResponse;
-import org.apache.jackrabbit.webdav.DavServletRequest;
-import org.apache.jackrabbit.webdav.DavResourceLocator;
-import org.apache.jackrabbit.webdav.DavSession;
-
-import javax.jcr.RepositoryException;
-
-/**
- * ResourceFactoryImpl implements a simple DavResourceFactory
- */
-public class ResourceFactoryImpl implements DavResourceFactory {
-
-    private final LockManager lockMgr;
-    private final ResourceConfig resourceConfig;
-
-    /**
-     * Create a new <code>ResourceFactory</code> that uses the given lock
-     * manager and the default {@link ResourceConfig resource config}.
-     *
-     * @param lockMgr
-     */
-    public ResourceFactoryImpl(LockManager lockMgr) {
-        this.lockMgr = lockMgr;
-        this.resourceConfig = new ResourceConfig();
-    }
-
-    /**
-     * Create a new <code>ResourceFactory</code> that uses the given lock
-     * manager and resource filter.
-     *
-     * @param lockMgr
-     * @param resourceConfig
-     */
-    public ResourceFactoryImpl(LockManager lockMgr, ResourceConfig resourceConfig) {
-        this.lockMgr = lockMgr;
-        this.resourceConfig = (resourceConfig != null) ? resourceConfig : new ResourceConfig();
-    }
-
-    /**
-     * Create a new <code>DavResource</code> from the given locator and
-     * request.
-     *
-     * @param locator
-     * @param request
-     * @param response
-     * @return
-     * @throws DavException
-     * @see DavResourceFactory#createResource(DavResourceLocator,
-     *      DavServletRequest, DavServletResponse)
-     */
-    public DavResource createResource(DavResourceLocator locator, DavServletRequest request,
-                                      DavServletResponse response) throws DavException {
-        DavResourceImpl resource = (DavResourceImpl)createResource(locator, request.getDavSession());
-        if (DavMethods.isCreateRequest(request) && ! resource.exists()) {
-            resource.setIsCollection(DavMethods.isCreateCollectionRequest(request));
-        }
-        return resource;
-    }
-
-    /**
-     * Create a new <code>DavResource</code> from the given locator and webdav
-     * session.
-     *
-     * @param locator
-     * @param session
-     * @return
-     * @throws DavException
-     * @see DavResourceFactory#createResource(DavResourceLocator, DavSession)
-     */
-    public DavResource createResource(DavResourceLocator locator, DavSession session) throws DavException {
-        try {
-            DavResourceImpl res = new DavResourceImpl(locator, this, session, resourceConfig);
-            res.addLockManager(lockMgr);
-            return res;
-        } catch (RepositoryException e) {
-            throw new JcrDavException(e);
-        }
-    }
-}
diff --git a/contrib/jcr-server/todo.txt b/contrib/jcr-server/todo.txt
deleted file mode 100644
index d4c8e13..0000000
--- a/contrib/jcr-server/todo.txt
+++ /dev/null
@@ -1,88 +0,0 @@
--------------------------------------------------------------------
-todo webdav package
--------------------------------------------------------------------
-
-- usage of jdom....
-
--------------------------------------------------------------------
-todo webdav/version package
--------------------------------------------------------------------
-
-- review: compliance to deltaV
-- reflecting feature-sets
-- baseline/activity not respected yet.
-
--------------------------------------------------------------------
-todo webdav/transaction package
--------------------------------------------------------------------
-
-- review naming of the lock scopes. 'global','local' are not correct in
-  this context.
-- repository transactions ('global') are only possible with jackrabbit, where
-  the session represents the XAResource itself.
-  since j2ee explicitely requires any usertransaction to be completed
-  upon the end of the servletes service method.
-  general review necessary....
-
--------------------------------------------------------------------
-todo webdav/search package
--------------------------------------------------------------------
-
-- SearchResource should extend DavResource
-- basicquery as defined by the internet draft not respected
-  currently.
-
--------------------------------------------------------------------
-todo spi / servlets
--------------------------------------------------------------------
-
-general 
-
-- undo incomplete changes in case of exception
-- review GET/PUT for JCR properties
-- multistatus fuer lock, copy, move, delete, proppatch wherever required.
-- DAV:supported-live-property-set
-- timeout: remove expired locks/subscriptions
-- improve definition methods/compliance-class
-- methods/compliance-class auf der root resoure vs *
-- OPTIONS to *-request-uri (according to RFC 2616)
-
-ordering
-
-- respect Position header with creation of new collection members by
-  PUT, COPY, MKCOL requests
-
-lock
-
-- implement session-scoped locks. this includes:
-  > uncommenting supported-locks entry
-  > build caching mechanism for session in case of session-scoped locks.
-  > retrieval of cached sessions (currently not possible from IfHeader).
-  > open issue in JCR: scope of lock cannot be retrieved.
-
-- JCR lock-token currently not checked for compliance with RFC2518. If the
-  token is modified accordingly, setting the lock-token to the subsequent
-  session (currently in the WebdavRequestImpl) must be aware of that change....
-
-- transaction locks
-  - lock returned upon lock-discovery 
-  - remove after timeout (>> releasing cached sessions)
-  - define reasonable timeout or make timeout configurable
-  - createLock must respect existing locks in the subtree, for lock is always deep.
-
-observation
-
-- make sure all expired subscriptions are removed.
-- subscription: reasonable default/max timeout make it configurable...
-
-versioning
-
-- VersionItemResource. review regarding definition of a version resource 
-  rfc3253: 'A "version resource", or simply "version", is a resource 
-  that contains a copy of a particular state (content and dead properties) of a 
-  version-controlled resource. A version is created by "checking in" a checked-out 
-  resource. The server allocates a distinct new URL for each new version, and 
-  this URL will never be used to identify any resource other than that version. 
-  The content and dead properties of a version never change.'
-
-- Additional VERSION-CONTROL Semantics with workspace not implemented.
diff --git a/contrib/jcr-server/webapp/maven.xml b/contrib/jcr-server/webapp/maven.xml
deleted file mode 100644
index 31ac593..0000000
--- a/contrib/jcr-server/webapp/maven.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                       as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 default="war">
-    <!--
-        the 'clean' goal is already redefined in the maven.xml
-        of the parent project. we need to redefine it here
-        again to 'maven clean' works.
-    -->
-    <goal name="clean">
-  	    <attainGoal name="clean:clean"/>
-  	</goal>
-</project>
diff --git a/contrib/jcr-server/webapp/project.properties b/contrib/jcr-server/webapp/project.properties
deleted file mode 100644
index dd78d01..0000000
--- a/contrib/jcr-server/webapp/project.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-maven.javadoc.links=http://java.sun.com/j2se/1.4.2/docs/api/,http://www.day.com/maven/jsr170/javadocs/jcr-0.16.1-pfd/
-maven.repo.remote = http://www.ibiblio.org/maven/,http://www.day.com/maven/
-maven.multiproject.type = war
diff --git a/contrib/jcr-server/webapp/project.xml b/contrib/jcr-server/webapp/project.xml
deleted file mode 100644
index 70e753e..0000000
--- a/contrib/jcr-server/webapp/project.xml
+++ /dev/null
@@ -1,214 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                       as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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>
-    <!-- ====================================================================== -->
-    <!-- P R O J E C T  D E S C R I P T I O N                                   -->
-    <!-- ====================================================================== -->
-    <extend>${basedir}/../project.xml</extend>
-    <artifactId>jackrabbit-server</artifactId>
-    <type>war</type>
-    <name>JCRWebdavServer WebApplication</name>
-    
-    <!-- ====================================================================== -->
-    <!-- D E P E N D E N C I E S                                                -->
-    <!-- ====================================================================== -->
-    <dependencies>
-        <!-- internal dependencies -->
-        <dependency>
-            <artifactId>jcr-server</artifactId>
-            <groupId>org.apache.jackrabbit</groupId>
-            <version>${pom.currentVersion}</version>
-            <properties>
-                <war.bundle>true</war.bundle>
-            </properties>
-        </dependency>
-        <dependency>
-            <artifactId>jcr-webdav</artifactId>
-            <groupId>org.apache.jackrabbit</groupId>
-            <version>${pom.currentVersion}</version>
-            <properties>
-                <war.bundle>true</war.bundle>
-            </properties>
-        </dependency>
-        <dependency>
-            <artifactId>jcr-client</artifactId>
-            <groupId>org.apache.jackrabbit</groupId>
-            <version>${pom.currentVersion}</version>
-            <properties>
-                <war.bundle>true</war.bundle>
-            </properties>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.jackrabbit</groupId>
-            <artifactId>jackrabbit-commons</artifactId>
-            <version>${jackrabbit.build.version.jackrabbit}</version>
-            <properties>
-                <war.bundle>true</war.bundle>
-            </properties>
-        </dependency>
-        
-        <!-- external dependencies -->
-        <dependency>
-            <groupId>jsr170</groupId>
-            <artifactId>jcr</artifactId>
-            <version>${jackrabbit.build.version.jcr}</version>
-            <properties>
-                <war.bundle>true</war.bundle>
-            </properties>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.jackrabbit</groupId>
-            <artifactId>jackrabbit</artifactId>
-            <version>${jackrabbit.build.version.jackrabbit}</version>
-            <properties>
-                <war.bundle>true</war.bundle>
-            </properties>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.jackrabbit</groupId>
-            <artifactId>jcr-rmi</artifactId>
-            <version>${jackrabbit.build.version.jcr.rmi}</version>
-            <properties>
-                <war.bundle>true</war.bundle>
-            </properties>
-        </dependency>
-        
-        <!-- non-jackrabbit dependencies -->
-        <dependency>
-            <groupId>log4j</groupId>
-            <artifactId>log4j</artifactId>
-            <version>1.2.8</version>
-            <properties>
-                <war.bundle>true</war.bundle>
-            </properties>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>3.8.1</version>
-        </dependency>
-
-        <!-- dependencies of jackrabbit -->
-        <dependency>
-          <groupId>concurrent</groupId>
-          <artifactId>concurrent</artifactId>
-          <version>1.3.4</version>
-            <properties>
-                <war.bundle>true</war.bundle>
-            </properties>
-        </dependency>
-        <dependency>
-          <groupId>commons-collections</groupId>
-          <artifactId>commons-collections</artifactId>
-          <version>3.1</version>
-            <properties>
-                <war.bundle>true</war.bundle>
-            </properties>
-        </dependency>
-        <dependency>
-          <groupId>geronimo-spec</groupId>
-          <artifactId>geronimo-spec-jta</artifactId>
-          <version>1.0-M1</version>
-            <properties>
-                <war.bundle>true</war.bundle>
-            </properties>
-        </dependency>
-        <dependency>
-          <groupId>lucene</groupId>
-          <artifactId>lucene</artifactId>
-          <version>1.4.3</version>
-            <properties>
-                <war.bundle>true</war.bundle>
-            </properties>
-        </dependency>
-        <dependency>
-          <groupId>xerces</groupId>
-          <artifactId>xercesImpl</artifactId>
-          <version>2.6.2</version>
-            <properties>
-                <war.bundle>true</war.bundle>
-            </properties>
-        </dependency>
-        <dependency>
-          <groupId>xerces</groupId>
-          <artifactId>xmlParserAPIs</artifactId>
-          <version>2.0.2</version>
-            <properties>
-                <war.bundle>true</war.bundle>
-            </properties>
-        </dependency>
-
-        <!--
-          cqfs-jackrabbit and cqfs are optional runtime dependencies 
-          (an alternative FileSystem implementation); 
-          commons-logging is a dependency of cqfs
-        -->
-        <dependency>
-          <groupId>cqfs</groupId>
-          <artifactId>cqfs-jackrabbit</artifactId>
-          <version>3.5.6</version>
-          <url>http://www.day.com/maven/cqfs/jars/cqfs-jackrabbit-3.5.6.jar</url>
-            <properties>
-                <war.bundle>true</war.bundle>
-            </properties>
-        </dependency>
-        <dependency>
-          <groupId>cqfs</groupId>
-          <artifactId>cqfs</artifactId>
-          <version>3.5.6</version>
-          <url>http://www.day.com/maven/cqfs/jars/cqfs-3.5.6.jar</url>
-            <properties>
-                <war.bundle>true</war.bundle>
-            </properties>
-        </dependency>
-        <dependency>
-          <groupId>commons-logging</groupId>
-          <artifactId>commons-logging</artifactId>
-          <version>1.0</version>
-            <properties>
-                <war.bundle>true</war.bundle>
-            </properties>
-        </dependency>
-        <!-- used for eventual compiling -->
-        <dependency>
-            <groupId>servletapi</groupId>
-            <artifactId>servletapi</artifactId>
-            <version>2.3</version>
-        </dependency>
-        
-    </dependencies>
-
-    <!-- ====================================================================== -->
-    <!-- B U I L D  D E S C R I P T I O N                                       -->
-    <!-- ====================================================================== -->
-    <build>
-        <sourceDirectory>${basedir}/src/java</sourceDirectory>
-        <resources>
-            <resource>
-                <directory>src/java</directory>
-                <includes>
-                    <include>**/*.xml</include>
-                    <include>**/*.xsd</include>
-                    <include>**/*.properties</include>
-                    <include>**/*.dtd</include>
-                </includes>
-            </resource>
-        </resources>
-    </build>
-
-</project>
diff --git a/contrib/jcr-server/webapp/src/java/org/apache/jackrabbit/j2ee/JCRWebdavServerServlet.java b/contrib/jcr-server/webapp/src/java/org/apache/jackrabbit/j2ee/JCRWebdavServerServlet.java
deleted file mode 100644
index 9eb5aef..0000000
--- a/contrib/jcr-server/webapp/src/java/org/apache/jackrabbit/j2ee/JCRWebdavServerServlet.java
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.j2ee;
-
-import org.apache.jackrabbit.server.AbstractWebdavServlet;
-import org.apache.jackrabbit.server.BasicCredentialsProvider;
-import org.apache.jackrabbit.server.SessionProviderImpl;
-import org.apache.jackrabbit.server.jcr.JCRWebdavServer;
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.DavLocatorFactory;
-import org.apache.jackrabbit.webdav.DavResource;
-import org.apache.jackrabbit.webdav.DavResourceFactory;
-import org.apache.jackrabbit.webdav.DavSessionProvider;
-import org.apache.jackrabbit.webdav.WebdavRequest;
-import org.apache.jackrabbit.webdav.jcr.DavLocatorFactoryImpl;
-import org.apache.jackrabbit.webdav.jcr.DavResourceFactoryImpl;
-import org.apache.jackrabbit.webdav.jcr.observation.SubscriptionManagerImpl;
-import org.apache.jackrabbit.webdav.jcr.transaction.TxLockManagerImpl;
-import org.apache.jackrabbit.webdav.observation.SubscriptionManager;
-import org.apache.log4j.Logger;
-
-import javax.jcr.Repository;
-import javax.servlet.ServletException;
-import javax.servlet.ServletContext;
-
-/**
- * JCRWebdavServerServlet provides request/response handling for the JCRWebdavServer.
- */
-public class JCRWebdavServerServlet extends AbstractWebdavServlet implements DavConstants {
-
-    /**
-     * the default logger
-     */
-    private static Logger log = Logger.getLogger(JCRWebdavServerServlet.class);
-
-    /**
-     * Init parameter specifying the prefix used with the resource path.
-     */
-    public static final String INIT_PARAM_RESOURCE_PATH_PREFIX = "resource-path-prefix";
-
-    /**
-     * Name of the optional init parameter that defines the value of the
-     * 'WWW-Authenticate' header.<p/>
-     * If the parameter is omitted the default value
-     * {@link #DEFAULT_AUTHENTICATE_HEADER "Basic Realm=Jackrabbit Webdav Server"}
-     * is used.
-     *
-     * @see #getAuthenticateHeaderValue()
-     */
-    public static final String INIT_PARAM_AUTHENTICATE_HEADER = "authenticate-header";
-
-    /** the 'missing-auth-mapping' init parameter */
-    public final static String INIT_PARAM_MISSING_AUTH_MAPPING = "missing-auth-mapping";
-
-    /**
-     * Servlet context attribute used to store the path prefix instead of
-     * having a static field with this servlet. The latter causes problems
-     * when running multiple
-     */
-    public static final String CTX_ATTR_RESOURCE_PATH_PREFIX = "jackrabbit.webdav.jcr.resourcepath";
-
-    private String pathPrefix;
-    private String authenticate_header;
-
-    private JCRWebdavServer server;
-    private DavResourceFactory resourceFactory;
-    private DavLocatorFactory locatorFactory;
-    private TxLockManagerImpl txMgr;
-    private SubscriptionManager subscriptionMgr;
-
-    /**
-     * Initializes the servlet set reads the following parameter from the
-     * servlet configuration:
-     * <ul>
-     * <li>resource-path-prefix: optional prefix for all resources.</li>
-     * </ul>
-     *
-     * @throws ServletException
-     */
-    public void init() throws ServletException {
-        super.init();
-
-	// set resource path prefix
-        pathPrefix = getInitParameter(INIT_PARAM_RESOURCE_PATH_PREFIX);
-        getServletContext().setAttribute(CTX_ATTR_RESOURCE_PATH_PREFIX, pathPrefix);
-        log.debug(INIT_PARAM_RESOURCE_PATH_PREFIX + " = " + pathPrefix);
-
-        authenticate_header = getInitParameter(INIT_PARAM_AUTHENTICATE_HEADER);
-        if (authenticate_header == null) {
-            authenticate_header = DEFAULT_AUTHENTICATE_HEADER;
-        }
-        log.debug(INIT_PARAM_AUTHENTICATE_HEADER + " = " + authenticate_header);
-
-        txMgr = new TxLockManagerImpl();
-        subscriptionMgr = new SubscriptionManagerImpl();
-
-        // todo: ev. make configurable
-        resourceFactory = new DavResourceFactoryImpl(txMgr, subscriptionMgr);
-        locatorFactory = new DavLocatorFactoryImpl(pathPrefix);
-    }
-
-    /**
-     * Returns true if the preconditions are met. This includes validation of
-     * {@link WebdavRequest#matchesIfHeader(DavResource) If header} and validation
-     * of {@link org.apache.jackrabbit.webdav.transaction.TransactionConstants#HEADER_TRANSACTIONID
-     * TransactionId header}. This method will also return false if the requested
-     * resource resides within a differenct workspace as is assigned to the repository
-     * session attached to the given request.
-     *
-     * @see AbstractWebdavServlet#isPreconditionValid(WebdavRequest, DavResource)
-     */
-    protected boolean isPreconditionValid(WebdavRequest request, DavResource resource) {
-        // first check matching If header
-        if (!request.matchesIfHeader(resource)) {
-            return false;
-        }
-
-        // test if the requested path matches to the existing session
-        // this may occur if the session was retrieved from the cache.
-        String wsName = request.getDavSession().getRepositorySession().getWorkspace().getName();
-        if (!resource.getLocator().isSameWorkspace(wsName)) {
-            return false;
-        }
-
-        // make sure, the TransactionId header is valid
-        String txId = request.getTransactionId();
-        return txId == null || txMgr.hasLock(txId, resource);
-    }
-
-    /**
-     * Returns the <code>DavSessionProvider</code>
-     *
-     * @return server
-     * @see AbstractWebdavServlet#getDavSessionProvider()
-     */
-    public DavSessionProvider getDavSessionProvider() {
-        if (server == null) {
-            Repository repository = RepositoryAccessServlet.getRepository(getServletContext());
-            server = new JCRWebdavServer(repository, new SessionProviderImpl(
-                    new BasicCredentialsProvider(
-                            getInitParameter(INIT_PARAM_MISSING_AUTH_MAPPING)))
-            );
-        }
-        return server;
-    }
-
-    /**
-     * Throws <code>UnsupportedOperationException</code>.
-     *
-     * @see AbstractWebdavServlet#setDavSessionProvider(DavSessionProvider)
-     */
-    public void setDavSessionProvider(DavSessionProvider davSessionProvider) {
-        throw new UnsupportedOperationException("Not implemented. DavSession(s) are provided by the 'JCRWebdavServer'");
-    }
-
-    /**
-     * Returns the <code>DavLocatorFactory</code>
-     *
-     * @see AbstractWebdavServlet#getLocatorFactory()
-     */
-    public DavLocatorFactory getLocatorFactory() {
-        if (locatorFactory == null) {
-            locatorFactory = new DavLocatorFactoryImpl(pathPrefix);
-        }
-        return locatorFactory;
-    }
-
-    /**
-     * Sets the <code>DavLocatorFactory</code>
-     *
-     * @see AbstractWebdavServlet#setLocatorFactory(DavLocatorFactory)
-     */
-    public void setLocatorFactory(DavLocatorFactory locatorFactory) {
-        this.locatorFactory = locatorFactory;
-    }
-
-    /**
-     * Returns the <code>DavResourceFactory</code>. 
-     *
-     * @see AbstractWebdavServlet#getResourceFactory()
-     */
-    public DavResourceFactory getResourceFactory() {
-        if (resourceFactory == null) {
-            resourceFactory = new DavResourceFactoryImpl(txMgr, subscriptionMgr);
-        }
-        return resourceFactory;
-    }
-
-    /**
-     * Sets the <code>DavResourceFactory</code>.
-     *
-     * @see AbstractWebdavServlet#setResourceFactory(org.apache.jackrabbit.webdav.DavResourceFactory)
-     */
-    public void setResourceFactory(DavResourceFactory resourceFactory) {
-        this.resourceFactory = resourceFactory;
-    }
-
-    /**
-     * Returns the init param of the servlet configuration or
-     * {@link #DEFAULT_AUTHENTICATE_HEADER} as default value.
-     *
-     * @return corresponding init parameter or {@link #DEFAULT_AUTHENTICATE_HEADER}.
-     * @see #INIT_PARAM_AUTHENTICATE_HEADER
-     */
-    public String getAuthenticateHeaderValue() {
-        return authenticate_header;
-    }
-
-    /**
-     * Returns the configured path prefix
-     *
-     * @return resourcePathPrefix
-     * @see #INIT_PARAM_RESOURCE_PATH_PREFIX
-     */
-    public static String getPathPrefix(ServletContext ctx) {
-        return (String) ctx.getAttribute(CTX_ATTR_RESOURCE_PATH_PREFIX);
-    }
-}
diff --git a/contrib/jcr-server/webapp/src/java/org/apache/jackrabbit/j2ee/LoggingServlet.java b/contrib/jcr-server/webapp/src/java/org/apache/jackrabbit/j2ee/LoggingServlet.java
deleted file mode 100644
index 44da629..0000000
--- a/contrib/jcr-server/webapp/src/java/org/apache/jackrabbit/j2ee/LoggingServlet.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.j2ee;
-
-import org.apache.log4j.Logger;
-import org.apache.log4j.PropertyConfigurator;
-import org.apache.log4j.xml.DOMConfigurator;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.xml.sax.SAXException;
-import org.xml.sax.EntityResolver;
-import org.xml.sax.InputSource;
-
-import javax.servlet.http.HttpServlet;
-import javax.servlet.ServletException;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.ParserConfigurationException;
-
-import java.util.Properties;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.net.URI;
-import java.net.URISyntaxException;
-
-/**
- * This Class implements a servlet that is used for initializing the log4j
- * facitilies for the containing webapp. since all classes in a webapp share
- * the same Log4J repository, this servlet offers a centralized mechanism to
- * configure the different loggers.
- * <p/>
- * please note, that Log4J holds its logging repository in static class variables,
- * so the configuration spans all classes using the same classloader hierarchy.
- * in a typical j2ee 4 classloaders are provided by the appserver: a shared,
- * a server, a container and an application classloader:
- * <xmp>
- *       Bootstrap
- *          |
- *        System
- *          |
- *        Shared
- *       /      \
- *  Server     Container
- *                /   \
- *           Webapp1  Webapp2 ...
- *
- * </xmp>
- * Classes are searched in the classloader hierarchy by aksing the parent
- * classloader first. so if you put the log4j.jar in the 'shared' classloader,
- * all webapps will shared the same log4j logger repository. if every webapp
- * should use it's own hierarchy, the log4j.jar must be put in the classpath
- * of the webapp classloader, usually WEB-INF/lib.
- * <p/>
- * Please note further that the exact way how the classloader hierarchy is
- * set-up depends on the appserver you are using.
- */
-public class LoggingServlet extends HttpServlet {
-
-    /**
-     * The init param for the log4j configuration. this can either point to
-     * a resource inside the application or a filepath. if the filename ends with
-     * ".xml", the {@link DOMConfigurator} is used to configure Log4J, otherwise
-     * the {@link PropertyConfigurator} is used.
-     */
-    public final static String INIT_PARAM_LOG4J_CONFIG = "log4j-config";
-
-    /**
-     * {@inheritDoc}
-     */
-    public void init() throws ServletException {
-        configure();
-        Logger.getRootLogger().info("Logging initialized.");
-    }
-
-    /**
-     * Configures Log4J using the config specified by the
-     * {@link #INIT_PARAM_LOG4J_CONFIG} init parameter.
-     *
-     * @throws ServletException
-     */
-    private void configure() throws ServletException {
-        // setup log4j
-        String log4jConfig = getServletConfig().getInitParameter(INIT_PARAM_LOG4J_CONFIG);
-        InputStream in =getServletContext().getResourceAsStream(log4jConfig);
-        if (in==null) {
-            // try file access
-            try {
-                in = new FileInputStream(log4jConfig);
-            } catch (FileNotFoundException e) {
-                throw new ServletException("Unable to initialize log4j: " + e.toString());
-            }
-        } else {
-            // hack for entity resolver
-            log4jConfig = "ctx:" + log4jConfig;
-        }
-        try {
-            if (log4jConfig.endsWith(".xml")) {
-                InputSource ins = new InputSource(in);
-                ins.setSystemId(log4jConfig);
-                configureXML(ins);
-            } else {
-                configureProperties(in);
-            }
-        } catch (IOException e) {
-            throw new ServletException("Unable to initialize log4j: " + e.toString());
-        } finally {
-            try {
-                in.close();
-            } catch (IOException e) {
-                // ignore
-            }
-        }
-    }
-
-    /**
-     * Configures Log4J using the {@link DOMConfigurator}
-     *
-     * @param in
-     * @throws ServletException
-     * @throws IOException
-     */
-    private void configureXML(InputSource in)
-            throws ServletException, IOException {
-        try {
-            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-            DocumentBuilder builder = factory.newDocumentBuilder();
-            // only set resolver, if context resource
-            if (in.getSystemId().startsWith("ctx:")) {
-                builder.setEntityResolver(new ContextResolver());
-            }
-            Document document = builder.parse(in);
-            Element root =  document.getDocumentElement();
-            DOMConfigurator.configure(root);
-        } catch (ParserConfigurationException e) {
-            throw new ServletException(
-                    "Unable to create configuration XML parser", e);
-        } catch (SAXException e) {
-            throw new ServletException(
-                    "Configuration file syntax error.", e);
-        }
-    }
-
-    /**
-     * Configures Log4J using the {@link PropertyConfigurator}
-     *
-     * @param in
-     * @throws ServletException
-     * @throws IOException
-     */
-    private void configureProperties(InputStream in)
-            throws ServletException, IOException {
-        Properties log4jProperties = new Properties();
-        log4jProperties.load(in);
-        PropertyConfigurator.configure(log4jProperties);
-    }
-
-    /**
-     * own EntityResolver to resolve entities inside servlet context
-     */
-    private class ContextResolver implements EntityResolver {
-
-        public InputSource resolveEntity(String publicId, String systemId)
-                throws SAXException, IOException {
-
-            try {
-                URI uri = new URI(systemId);
-                if (uri.getScheme().equals("ctx")) {
-                    InputStream in = getServletContext().getResourceAsStream(uri.getPath());
-                    if (in != null) {
-                        InputSource ins = new InputSource(in);
-                        ins.setSystemId(systemId);
-                        return ins;
-                    }
-                }
-                log("Error while resolving entity. Unkwon systemid: " + systemId);
-            } catch (URISyntaxException e) {
-                log("Error while resolving entity: " + e.toString());
-            }
-            return null;
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webapp/src/java/org/apache/jackrabbit/j2ee/RepositoryAccessServlet.java b/contrib/jcr-server/webapp/src/java/org/apache/jackrabbit/j2ee/RepositoryAccessServlet.java
deleted file mode 100644
index 567da53..0000000
--- a/contrib/jcr-server/webapp/src/java/org/apache/jackrabbit/j2ee/RepositoryAccessServlet.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.j2ee;
-
-import org.apache.jackrabbit.rmi.client.ClientRepositoryFactory;
-import org.apache.log4j.Logger;
-
-import javax.jcr.Repository;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import java.net.MalformedURLException;
-import java.rmi.NotBoundException;
-import java.rmi.RemoteException;
-import java.util.Enumeration;
-import java.util.Properties;
-
-/**
- * This Class implements a servlet that is used as unified mechanism to retrieve
- * a jcr repository either through JNID, RMI or JCRWebdavServer.
- */
-public class RepositoryAccessServlet extends HttpServlet {
-
-    /**
-     * default logger
-     */
-    private static final Logger log = Logger.getLogger(RepositoryAccessServlet.class);
-
-    /**
-     * the 'repository-name' init parameter
-     */
-    public final static String INIT_PARAM_REPOSITORY_NAME = "repository-name";
-
-    /**
-     * the 'rmi-uri' init parameter
-     */
-    public final static String INIT_PARAM_RMI_URI = "rmi-uri";
-
-    /**
-     * the 'missing-auth-mapping' init parameter
-     */
-    //public final static String INIT_PARAM_MISSING_AUTH_MAPPING = "missing-auth-mapping";
-
-    private static final String CTX_ATTR_REPOSITORY = "jcr.repository";
-
-    private static final String CTX_ATTR_REPOSITORY_NAME = "jcr.repository.name";
-
-    private static final String CTX_ATTR_REPOSITORY_RMI_URI = "jcr.repository.rmiURI";
-
-    private static final String CTX_ATTR_REPOSITORY_JNDI_CONTEXT = "jcr.repository.jndiContext";
-
-    /**
-     * Initializes this servlet
-     *
-     * @throws javax.servlet.ServletException
-     */
-    public void init() throws ServletException {
-	log.info("RepositoryAccessServlet initializing...");
-        // fetching the name
-        String repositoryName = getServletConfig().getInitParameter(INIT_PARAM_REPOSITORY_NAME);
-        if (repositoryName == null) {
-            repositoryName = "default";
-        }
-        getServletContext().setAttribute(CTX_ATTR_REPOSITORY_NAME, repositoryName);
-
-        // fetching the rmiuri
-        getServletContext().setAttribute(CTX_ATTR_REPOSITORY_RMI_URI, getRMIUri());
-
-        // setup initial context
-        getServletContext().setAttribute(CTX_ATTR_REPOSITORY_JNDI_CONTEXT, getInitialContext());
-
-	log.info("RepositoryAccessServlet initialized.");
-    }
-
-    private InitialContext getInitialContext() {
-	// retrieve JNDI Context environment
-	try {
-	    Properties env = new Properties();
-	    Enumeration names = getServletConfig().getInitParameterNames();
-	    while (names.hasMoreElements()) {
-		String name = (String) names.nextElement();
-		if (name.startsWith("java.naming.")) {
-                    String initParam = getServletConfig().getInitParameter(name);
-                    if (initParam.equals("")) {
-                        log.info("  ignoring empty JNDI init param: " + name);
-                    } else {
-                        env.put(name, initParam);
-                        log.info("  adding property to JNDI environment: " + name + "=" + initParam);
-                    }
-		}
-	    }
-	    return new InitialContext(env);
-	} catch (NamingException e) {
-	    log.error("Create initial context: " + e.toString());
-	    return null;
-	}
-    }
-
-    private String getRMIUri() {
-	// setup repository name
-	return getServletConfig().getInitParameter(INIT_PARAM_RMI_URI);
-    }
-
-    /**
-     * tries to retrieve the repository using RMI
-     */
-    private static Repository getRepositoryByJNDI(ServletContext ctx) {
-        // acquire via JNDI
-        String repositoryName = (String) ctx.getAttribute(CTX_ATTR_REPOSITORY_NAME);
-        InitialContext jndiContext = (InitialContext) ctx.getAttribute(CTX_ATTR_REPOSITORY_JNDI_CONTEXT);
-        if (jndiContext == null) {
-            return null;
-        }
-        try {
-            Repository r = (Repository) jndiContext.lookup(repositoryName);
-            log.info("Acquired repository via JNDI.");
-            return r;
-        } catch (NamingException e) {
-            log.error("Error while retrieving repository using JNDI (name=" + repositoryName + "): " + e);
-            return null;
-        }
-    }
-
-    /**
-     * tries to retrieve the repository using RMI
-     */
-    private static Repository getRepositoryByRMI(ServletContext ctx) {
-        // acquire via RMI
-        String rmiURI = (String) ctx.getAttribute(CTX_ATTR_REPOSITORY_RMI_URI);
-        if (rmiURI == null) {
-            return null;
-        }
-        log.info("  trying to retrieve repository using rmi. uri=" + rmiURI);
-        ClientFactoryDelegater cfd;
-        try {
-            Class clazz = Class.forName("org.apache.jackrabbit.j2ee.RMIClientFactoryDelegater");
-            cfd = (ClientFactoryDelegater) clazz.newInstance();
-        } catch (NoClassDefFoundError e) {
-            log.error("Unable to locate RMI ClientRepositoryFactory. jcr-rmi.jar missing? " + e.toString());
-            return null;
-        } catch (Exception e) {
-            log.error("Unable to locate RMI ClientRepositoryFactory. jcr-rmi.jar missing?" + e.toString());
-            return null;
-        }
-
-        try {
-            Repository r = cfd.getRepository(rmiURI);
-            log.info("Acquired repository via RMI.");
-            return r;
-        } catch (Exception e) {
-            log.error("Error while retrieving repository using RMI: " + e);
-            return null;
-        }
-    }
-
-    /**
-     * Returns the JSR170 repository
-     *
-     * @return a jsr170 repository
-     * @throws IllegalStateException if the repository is not available in the context.
-     */
-    public static Repository getRepository(ServletContext ctx) {
-        Repository repository = (Repository) ctx.getAttribute(CTX_ATTR_REPOSITORY);
-        if (repository != null) {
-            return repository;
-        } else {
-            repository = getRepositoryByRMI(ctx);
-        }
-        // try to retrieve via jndi
-        if (repository == null) {
-            repository = getRepositoryByJNDI(ctx);
-        }
-        // error
-        if (repository == null) {
-            log.fatal("The repository is not available. Check config of 'RepositoryAccessServlet'.");
-            throw new IllegalStateException("The repository is not available.");
-        } else {
-            ctx.setAttribute(CTX_ATTR_REPOSITORY, repository);
-            log.info(repository.getDescriptor(Repository.REP_NAME_DESC) + " v" + repository.getDescriptor(Repository.REP_VERSION_DESC));
-            return repository;
-        }
-    }
-}
-
-/**
- * optional class for RMI, will only be used, if RMI client is present
- */
-abstract class ClientFactoryDelegater {
-
-    public abstract Repository getRepository(String uri)
-	    throws RemoteException, MalformedURLException, NotBoundException;
-}
-
-/**
- * optional class for RMI, will only be used, if RMI server is present
- */
-class RMIClientFactoryDelegater extends ClientFactoryDelegater {
-
-    // only used to enforce linking upon Class.forName()
-    static String FactoryClassName = ClientRepositoryFactory.class.getName();
-
-    public Repository getRepository(String uri)
-	    throws MalformedURLException, NotBoundException, RemoteException {
-	System.setProperty("java.rmi.server.useCodebaseOnly", "true");
-	return new ClientRepositoryFactory().getRepository(uri);
-   }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webapp/src/java/org/apache/jackrabbit/j2ee/RepositoryStartupServlet.java b/contrib/jcr-server/webapp/src/java/org/apache/jackrabbit/j2ee/RepositoryStartupServlet.java
deleted file mode 100644
index 7c3ddfc..0000000
--- a/contrib/jcr-server/webapp/src/java/org/apache/jackrabbit/j2ee/RepositoryStartupServlet.java
+++ /dev/null
@@ -1,563 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.j2ee;
-
-import org.apache.jackrabbit.core.RepositoryImpl;
-import org.apache.jackrabbit.core.config.RepositoryConfig;
-import org.apache.jackrabbit.rmi.server.ServerAdapterFactory;
-import org.apache.log4j.Logger;
-import org.xml.sax.InputSource;
-
-import javax.jcr.Repository;
-import javax.jcr.RepositoryException;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.InetAddress;
-import java.net.ServerSocket;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.UnknownHostException;
-import java.rmi.AlreadyBoundException;
-import java.rmi.Naming;
-import java.rmi.Remote;
-import java.rmi.RemoteException;
-import java.rmi.registry.LocateRegistry;
-import java.rmi.registry.Registry;
-import java.rmi.server.RMIServerSocketFactory;
-import java.util.Enumeration;
-import java.util.Properties;
-
-/**
- * The RepositoryStartupServlet starts a jackrabbit repository and registers it
- * to the JNDI environment and optional to the RMI registry.
- * <p id="registerAlgo">
- * <b>Registration with RMI</b>
- * <p>
- * Upon successfull creation of the repository in the {@link #init()} method,
- * the repository is registered with an RMI registry if the web application is
- * so configured. To register with RMI, the following web application
- * <code>init-params</code> are considered: <code>rmi-port</code> designating
- * the port on which the RMI registry is listening, <code>rmi-host</code>
- * designating the interface on the local host on which the RMI registry is
- * active, <code>repository-name</code> designating the name to which the
- * repository is to be bound in the registry, and <code>rmi-uri</code>
- * designating an RMI URI complete with host, optional port and name to which
- * the object is bound.
- * <p>
- * If the <code>rmi-uri</code> parameter is configured with a non-empty value,
- * the <code>rmi-port</code> and <code>rmi-host</code> parameters are ignored.
- * The <code>repository-name</code> parameter is only considered if a non-empty
- * <code>rmi-uri</code> parameter is configured if the latter does not contain
- * a name to which to bind the repository.
- * <p>
- * This is the algorithm used to find out the host, port and name for RMI
- * registration:
- * <ol>
- * <li>If neither a <code>rmi-uri</code> nor a <code>rmi-host</code> nor a
- *      <code>rmi-port</code> parameter is configured, the repository is not
- *      registered with any RMI registry.
- * <li>If a non-empty <code>rmi-uri</code> parameter is configured extract the
- *      host name (or IP address), port number and name to bind to from the
- *      URI. If the URI is not valid, host defaults to <code>0.0.0.0</code>
- *      meaning all interfaces on the local host, port defaults to the RMI
- *      default port (<code>1099</code>) and the name defaults to the value
- *      of the <code>repository-name</code> parameter.
- * <li>If a non-empty <code>rmi-uri</code> is not configured, the host is taken
- *      from the <code>rmi-host</code> parameter, the port from the
- *      <code>rmi-port</code> parameter and the name to bind the repository to
- *      from the <code>repository-name</code> parameter. If the
- *      <code>rmi-host</code> parameter is empty or not configured, the host
- *      defaults to <code>0.0.0.0</code> meaning all interfaces on the local
- *      host. If the <code>rmi-port</code> parameter is empty, not configured,
- *      zero or a negative value, the default port for the RMI registry
- *      (<code>1099</code>) is used.
- * </ol>
- * <p>
- * After finding the host and port of the registry, the RMI registry itself
- * is acquired. It is assumed, that host and port primarily designate an RMI
- * registry, which should be active on the local host but has not been started
- * yet. In this case, the <code>LocateRegistry.createRegistry</code> method is
- * called to create a registry on the local host listening on the host and port
- * configured. If creation fails, the <code>LocateRegistry.getRegistry</code>
- * method is called to get a remote instance of the registry. Note, that
- * <code>getRegistry</code> does not create an actual registry on the given
- * host/port nor does it check, whether an RMI registry is active.
- * <p>
- * When the registry has been retrieved, either by creation or by just creating
- * a remote instance, the repository is bound to the configured name in the
- * registry.
- * <p>
- * Possible causes for registration failures include:
- * <ul>
- * <li>The web application is not configured to register with an RMI registry at
- *      all.
- * <li>The registry is expected to be running on a remote host but does not.
- * <li>The registry is expected to be running on the local host but cannot be
- *      accessed. Reasons include another application which does not act as an
- *      RMI registry is running on the configured port and thus blocks creation
- *      of a new RMI registry.
- * <li>An object may already be bound to the same name as is configured to be
- *      used for the repository.
- * </ul>
- */
-public class RepositoryStartupServlet extends HttpServlet {
-
-    /** the default logger */
-    private static final Logger log = Logger.getLogger(RepositoryStartupServlet.class);
-
-    /** initial param name for the repository config location */
-    public final static String INIT_PARAM_REPOSITORY_CONFIG = "repository-config";
-
-    /** initial param name for the repository home directory */
-    public final static String INIT_PARAM_REPOSITORY_HOME = "repository-home";
-
-    /** initial param name for the repository name */
-    public final static String INIT_PARAM_REPOSITORY_NAME = "repository-name";
-
-    /** initial param name for the rmi port */
-    public final static String INIT_PARAM_RMI_PORT = "rmi-port";
-
-    /** initial param name for the rmi host */
-    public final static String INIT_PARAM_RMI_HOST = "rmi-host";
-
-    /** initial param name for the rmi uri */
-    public final static String INIT_PARAM_RMI_URI = "rmi-uri";
-
-    /** initial param name for the log4j config properties */
-    public final static String INIT_PARAM_LOG4J_CONFIG = "log4j-config";
-
-    /** the registered repository */
-    private Repository repository;
-
-    /** the name of the repository as configured */
-    private String repositoryName;
-
-    /** the jndi context, created base on configuration */
-    private InitialContext jndiContext;
-
-    /**
-     * The rmi uri, in the form of  '//${rmi-host}:${rmi-port}/${repository-name}'
-     * This field is only set to a non-<code>null</code> value, if registration
-     * of the repository to an RMI registry succeeded in the
-     * {@link #registerRMI()} method.
-     *
-     * @see #registerRMI()
-     * @see #unregisterRMI()
-     */
-    private String rmiURI;
-
-    /**
-     * Initializes the servlet
-     * @throws ServletException
-     */
-    public void init() throws ServletException {
-        super.init();
-        log.info("RepositoryStartupServlet initializing...");
-        initRepository();
-        try {
-            registerRMI();
-            registerJNDI();
-        } catch (ServletException e) {
-            // shutdown repository
-            shutdownRepository();
-            log.error("RepositoryStartupServlet initializing failed: "+ e, e);
-            throw e;
-        }
-        log.info("RepositoryStartupServlet initialized.");
-    }
-
-    /**
-     * destroy the servlet
-     */
-    public void destroy() {
-        super.destroy();
-        if (log == null) {
-            log("RepositoryStartupServlet shutting down...");
-        } else {
-            log.info("RepositoryStartupServlet shutting down...");
-        }
-        shutdownRepository();
-        unregisterRMI();
-        unregisterJNDI();
-        if (log == null) {
-            log("RepositoryStartupServlet shut down.");
-        } else {
-            log.info("RepositoryStartupServlet shut down.");
-        }
-    }
-
-    /**
-     * Creates a new Repository based on configuration
-     * @throws ServletException
-     */
-    private void initRepository() throws ServletException {
-        // setup home directory
-        String repHome = getServletConfig().getInitParameter(INIT_PARAM_REPOSITORY_HOME);
-        if (repHome==null) {
-            log.error(INIT_PARAM_REPOSITORY_HOME + " missing.");
-            throw new ServletException(INIT_PARAM_REPOSITORY_HOME + " missing.");
-        }
-        File repositoryHome;
-        try {
-            repositoryHome = new File(repHome).getCanonicalFile();
-        } catch (IOException e) {
-            log.error(INIT_PARAM_REPOSITORY_HOME + " invalid." + e.toString());
-            throw new ServletException(INIT_PARAM_REPOSITORY_HOME + " invalid." + e.toString());
-        }
-        log.info("  repository-home = " + repositoryHome.getPath());
-
-        // get repository config
-        String repConfig = getServletConfig().getInitParameter(INIT_PARAM_REPOSITORY_CONFIG);
-        if (repConfig==null) {
-            log.error(INIT_PARAM_REPOSITORY_CONFIG + " missing.");
-            throw new ServletException(INIT_PARAM_REPOSITORY_CONFIG + " missing.");
-        }
-        log.info("  repository-config = " + repConfig);
-
-        InputStream in = getServletContext().getResourceAsStream(repConfig);
-        if (in==null) {
-            try {
-                in = new FileInputStream(new File(repositoryHome, repConfig));
-            } catch (FileNotFoundException e) {
-                log.error(INIT_PARAM_REPOSITORY_CONFIG + " invalid." + e.toString());
-                throw new ServletException(INIT_PARAM_REPOSITORY_CONFIG + " invalid." + e.toString());
-            }
-        }
-
-        // get repository name
-        repositoryName = getServletConfig().getInitParameter(INIT_PARAM_REPOSITORY_NAME);
-        if (repositoryName==null) {
-            repositoryName="default";
-        }
-        log.info("  repository-name = " + repositoryName);
-
-        try {
-            repository = createRepository(new InputSource(in), repositoryHome);
-        } catch (RepositoryException e) {
-            throw new ServletException("Error while creating repository", e);
-        }
-    }
-
-    /**
-     * Shuts down the repository
-     */
-    private void shutdownRepository() {
-        if (repository instanceof RepositoryImpl) {
-            ((RepositoryImpl) repository).shutdown();
-            repository = null;
-        }
-    }
-
-    /**
-     * Creates the repository for the given config and homedir.
-     *
-     * @param is
-     * @param homedir
-     * @return
-     * @throws RepositoryException
-     */
-    protected Repository createRepository(InputSource is, File homedir)
-            throws RepositoryException {
-        RepositoryConfig config = RepositoryConfig.create(is, homedir.getAbsolutePath());
-        return RepositoryImpl.create(config);
-    }
-
-    /**
-     * Registers the repository in the JNDI context
-     */
-    private void registerJNDI() throws ServletException {
-        // registering via jndi
-        Properties env = new Properties();
-        Enumeration names = getServletConfig().getInitParameterNames();
-        while (names.hasMoreElements()) {
-            String name = (String) names.nextElement();
-            if (name.startsWith("java.naming.")) {
-                String initParam = getServletConfig().getInitParameter(name);
-                if (initParam.equals("")) {
-                    log.info("  ignoring empty JNDI init param: " + name);
-                } else {
-                    env.put(name, initParam);
-                    log.info("  adding property to JNDI environment: " + name + "=" + initParam);
-                }
-            }
-        }
-        try {
-            jndiContext = new InitialContext(env);
-            jndiContext.bind(repositoryName, repository);
-            log.info("Repository bound to JNDI with name: " + repositoryName);
-        } catch (NamingException e) {
-            throw new ServletException("Unable to bind repository using JNDI.", e);
-        }
-    }
-
-    /**
-     * Unregisters the repository from the JNDI context
-     */
-    private void unregisterJNDI() {
-        if (jndiContext != null) {
-            try {
-                jndiContext.unbind(repositoryName);
-            } catch (NamingException e) {
-                log("Error while unbinding repository from JNDI: " + e);
-            }
-        }
-    }
-
-    /**
-     * Registers the repository to an RMI registry configured in the web
-     * application. See <a href="#registerAlgo">Registration with RMI</a> in the
-     * class documentation for a description of the algorithms used to register
-     * the repository with an RMI registry.
-     */
-    private void registerRMI() throws ServletException {
-        // check registering via RMI
-        String rmiPortStr = getServletConfig().getInitParameter(INIT_PARAM_RMI_PORT);
-        String rmiHost = getServletConfig().getInitParameter(INIT_PARAM_RMI_HOST);
-        String rmiURI = getServletConfig().getInitParameter(INIT_PARAM_RMI_URI);
-
-        // no registration if neither port nor host nor URI is configured
-        if (rmiPortStr == null && rmiHost == null && rmiURI == null) {
-            return;
-        }
-
-        // URI takes precedences, so check whether the configuration has to
-        // be set from the URI
-        int rmiPort = -1;
-        String rmiName = null;
-        if (rmiURI != null && rmiURI.length() > 0) {
-            URI uri = null;
-            try {
-                uri = new URI(rmiURI);
-
-                // extract values from the URI, check later
-                rmiHost = uri.getHost();
-                rmiPort = uri.getPort();
-                rmiName = uri.getPath();
-
-            } catch (URISyntaxException use) {
-                log.warn("Cannot parse RMI URI '" + rmiURI + "'.", use);
-                rmiURI = null; // clear RMI URI use another one
-                rmiHost = null; // use default host, ignore rmi-host param
-            }
-
-            // cut of leading slash from name if defined at all
-            if (rmiName != null && rmiName.startsWith("/")) {
-                rmiName = rmiName.substring(1);
-            }
-        } else {
-            // convert RMI port configuration
-            if (rmiPortStr != null) {
-                try {
-                    rmiPort = Integer.parseInt(rmiPortStr);
-                } catch (NumberFormatException e) {
-                    log.warn("Invalid port in rmi-port param: " + e + ". using default port.");
-                    rmiPort = Registry.REGISTRY_PORT;
-                }
-            }
-        }
-
-        // check RMI port
-        if (rmiPort == -1 || rmiPort == 0) {
-            // accept -1 or 0 as a hint to use the default
-            rmiPort = Registry.REGISTRY_PORT;
-        } else if (rmiPort < -1 || rmiPort > 0xFFFF) {
-            // emit a warning if out of range, use defualt in this case
-            log.warn("Invalid port in rmi-port param " + rmiPort + ". using default port.");
-            rmiPort = Registry.REGISTRY_PORT;
-        }
-
-        // check host - use an empty name if null (i.e. not configured)
-        if (rmiHost == null) {
-            rmiHost = "";
-        }
-
-        // check name - use repositoryName if empty or null
-        if (rmiName == null || rmiName.length() ==0) {
-            rmiName = repositoryName;
-        }
-
-        // reconstruct the rmiURI now because values might have been changed
-        rmiURI = "//" + rmiHost + ":" + rmiPort + "/" + rmiName;
-
-        // try to create remote repository
-        Remote remote;
-        try {
-            Class clazz = Class.forName(getRemoteFactoryDelegaterClass());
-            RemoteFactoryDelegater rmf = (RemoteFactoryDelegater) clazz.newInstance();
-            remote = rmf.createRemoteRepository(repository);
-        } catch (RemoteException e) {
-            throw new ServletException("Unable to create remote repository.", e);
-        } catch (NoClassDefFoundError e) {
-            throw new ServletException("Unable to create RMI repository. jcr-rmi.jar might be missing.", e);
-        } catch (Exception e) {
-            throw new ServletException("Unable to create RMI repository. jcr-rmi.jar might be missing.", e);
-        }
-
-        try {
-            System.setProperty("java.rmi.server.useCodebaseOnly", "true");
-            Registry reg = null;
-
-            // first try to create the registry, which will fail if another
-            // application is already running on the configured host/port
-            // or if the rmiHost is not local
-            try {
-                // find the server socket factory: use the default if the
-                // rmiHost is not configured
-                RMIServerSocketFactory sf;
-                if (rmiHost.length() > 0) {
-                    log.debug("Creating RMIServerSocketFactory for host " + rmiHost);
-                    InetAddress hostAddress = InetAddress.getByName(rmiHost);
-                    sf = getRMIServerSocketFactory(hostAddress);
-                } else {
-                    // have the RMI implementation decide which factory is the
-                    // default actually
-                    log.debug("Using default RMIServerSocketFactory");
-                    sf = null;
-                }
-
-                // create a registry using the default client socket factory
-                // and the server socket factory retrieved above. This also
-                // binds to the server socket to the rmiHost:rmiPort.
-                reg = LocateRegistry.createRegistry(rmiPort, null, sf);
-
-            } catch (UnknownHostException uhe) {
-                // thrown if the rmiHost cannot be resolved into an IP-Address
-                // by getRMIServerSocketFactory
-                log.info("Cannot create Registry", uhe);
-            } catch (RemoteException e) {
-                // thrown by createRegistry if binding to the rmiHost:rmiPort
-                // fails, for example due to rmiHost being remote or another
-                // application already being bound to the port
-                log.info("Cannot create Registry", e);
-            }
-
-            // if creation of the registry failed, we try to access an
-            // potentially active registry. We do not check yet, whether the
-            // registry is actually accessible.
-            if (reg == null) {
-                log.debug("Trying to access existing registry at " + rmiHost
-                    + ":"+ rmiPort);
-                try {
-                    reg = LocateRegistry.getRegistry(rmiHost, rmiPort);
-                } catch (RemoteException re) {
-                    log.error("Cannot create the reference to the registry at "
-                        + rmiHost + ":" + rmiPort, re);
-                }
-            }
-
-            // if we finally have a registry, register the repository with the
-            // rmiName
-            if (reg != null) {
-                log.debug("Registering repository as " + rmiName
-                    + " to registry " + reg);
-                reg.bind(rmiName, remote);
-                this.rmiURI = rmiURI;
-                log.info("Repository bound via RMI with name: " + rmiURI);
-            } else {
-                log.info("RMI registry missing, cannot bind repository via RMI");
-            }
-
-        } catch (RemoteException e) {
-            throw new ServletException("Unable to bind repository via RMI.", e);
-        } catch (AlreadyBoundException e) {
-            throw new ServletException("Unable to bind repository via RMI.", e);
-        }
-    }
-
-    /**
-     * Return the fully qualified name of the class providing the remote
-     * repository. The class whose name is returned must implement the
-     * {@link RemoteFactoryDelegater} interface.
-     */
-    protected String getRemoteFactoryDelegaterClass() {
-        return "org.apache.jackrabbit.j2ee.RMIRemoteFactoryDelegater";
-    }
-
-    /**
-     * Returns an <code>RMIServerSocketFactory</code> used to create the server
-     * socket for a locally created RMI registry.
-     * <p>
-     * This implementation returns a new instance of a simple
-     * <code>RMIServerSocketFactory</code> which just creates instances of
-     * the <code>java.net.ServerSocket</code> class bound to the given
-     * <code>hostAddress</code>. Implementations may overwrite this method to
-     * provide factory instances, which provide more elaborate server socket
-     * creation, such as SSL server sockets.
-     *
-     * @param hostAddress The <code>InetAddress</code> instance representing the
-     *      the interface on the local host to which the server sockets are
-     *      bound.
-     *
-     * @return A new instance of a simple <code>RMIServerSocketFactory</code>
-     *      creating <code>java.net.ServerSocket</code> instances bound to
-     *      the <code>rmiHost</code>.
-     */
-    protected RMIServerSocketFactory getRMIServerSocketFactory(
-            final InetAddress hostAddress) {
-        return new RMIServerSocketFactory() {
-            public ServerSocket createServerSocket(int port) throws IOException {
-                return new ServerSocket(port, -1, hostAddress);
-            }
-        };
-    }
-
-    /**
-     * Unregisters the repository from the RMI registry, if it has previously
-     * been registered.
-     */
-    private void unregisterRMI() {
-        if (rmiURI != null) {
-            try {
-                Naming.unbind(rmiURI);
-            } catch (Exception e) {
-                log("Error while unbinding repository from JNDI: " + e);
-            } finally {
-                // do not try again to unregister
-                rmiURI = null;
-            }
-        }
-    }
-
-}
-
-/**
- * optional class for RMI, will only be used, if RMI server is present
- */
-abstract class RemoteFactoryDelegater {
-
-    public abstract Remote createRemoteRepository(Repository repository)
-            throws RemoteException;
-}
-/**
- * optional class for RMI, will only be used, if RMI server is present
- */
-class RMIRemoteFactoryDelegater extends RemoteFactoryDelegater {
-
-    // only used to enforce linking upon Class.forName()
-    static String FactoryClassName = ServerAdapterFactory.class.getName();
-
-    public Remote createRemoteRepository(Repository repository)
-            throws RemoteException {
-        return new ServerAdapterFactory().getRemoteRepository(repository);
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webapp/src/java/org/apache/jackrabbit/j2ee/SimpleWebdavServlet.java b/contrib/jcr-server/webapp/src/java/org/apache/jackrabbit/j2ee/SimpleWebdavServlet.java
deleted file mode 100644
index 1155740..0000000
--- a/contrib/jcr-server/webapp/src/java/org/apache/jackrabbit/j2ee/SimpleWebdavServlet.java
+++ /dev/null
@@ -1,447 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.j2ee;
-
-import org.apache.jackrabbit.server.AbstractWebdavServlet;
-import org.apache.jackrabbit.server.BasicCredentialsProvider;
-import org.apache.jackrabbit.server.SessionProvider;
-import org.apache.jackrabbit.server.SessionProviderImpl;
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavLocatorFactory;
-import org.apache.jackrabbit.webdav.DavMethods;
-import org.apache.jackrabbit.webdav.DavResource;
-import org.apache.jackrabbit.webdav.DavResourceFactory;
-import org.apache.jackrabbit.webdav.DavSessionProvider;
-import org.apache.jackrabbit.webdav.WebdavRequest;
-import org.apache.jackrabbit.webdav.WebdavResponse;
-import org.apache.jackrabbit.webdav.jcr.DavLocatorFactoryImpl;
-import org.apache.jackrabbit.webdav.lock.LockManager;
-import org.apache.jackrabbit.webdav.lock.SimpleLockManager;
-import org.apache.jackrabbit.webdav.simple.DavSessionProviderImpl;
-import org.apache.jackrabbit.webdav.simple.ResourceConfig;
-import org.apache.jackrabbit.webdav.simple.ResourceFactoryImpl;
-import org.apache.log4j.Logger;
-
-import javax.jcr.Repository;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import java.io.IOException;
-import java.net.MalformedURLException;
-
-/**
- * WebdavServlet provides webdav support (level 1 and 2 complient) for repository
- * resources.
- */
-public class SimpleWebdavServlet extends AbstractWebdavServlet {
-
-    /**
-     * the default logger
-     */
-    private static final Logger log = Logger.getLogger(SimpleWebdavServlet.class);
-
-    /**
-     * init param name of the repository prefix
-     */
-    public static final String INIT_PARAM_RESOURCE_PATH_PREFIX = "resource-path-prefix";
-
-    /**
-     * Name of the optional init parameter that defines the value of the
-     * 'WWW-Authenticate' header.<p/>
-     * If the parameter is omitted the default value
-     * {@link #DEFAULT_AUTHENTICATE_HEADER "Basic Realm=Jackrabbit Webdav Server"}
-     * is used.
-     *
-     * @see #getAuthenticateHeaderValue()
-     */
-    public static final String INIT_PARAM_AUTHENTICATE_HEADER = "authenticate-header";
-
-    /** the 'missing-auth-mapping' init parameter */
-    public final static String INIT_PARAM_MISSING_AUTH_MAPPING = "missing-auth-mapping";
-
-    /**
-     * Name of the init parameter that specify a separate configuration used
-     * for filtering the resources displayed.
-     */
-    public static final String INIT_PARAM_RESOURCE_CONFIG = "resource-config";
-
-    /**
-     * Servlet context attribute used to store the path prefix instead of
-     * having a static field with this servlet. The latter causes problems
-     * when running multiple
-     */
-    public static final String CTX_ATTR_RESOURCE_PATH_PREFIX = "jackrabbit.webdav.simple.resourcepath";
-
-    /**
-     * the resource path prefix
-     */
-    private String resourcePathPrefix;
-
-    /**
-     * Header value as specified in the {@link #INIT_PARAM_AUTHENTICATE_HEADER} parameter.
-     */
-    private String authenticate_header;
-
-    /**
-     * Map used to remember any webdav lock created without being reflected
-     * in the underlying repository.
-     * This is needed because some clients rely on a successful locking
-     * mechanism in order to perform properly (e.g. mac OSX built-in dav client)
-     */
-    private LockManager lockManager;
-
-    /**
-     * the resource factory
-     */
-    private DavResourceFactory resourceFactory;
-
-    /**
-     * the locator factory
-     */
-    private DavLocatorFactory locatorFactory;
-
-    /**
-     * the jcr repository
-     */
-    private Repository repository;
-
-    /**
-     * the webdav session provider
-     */
-    private DavSessionProvider davSessionProvider;
-
-    /**
-     * the repository session provider
-     */
-    private SessionProvider sessionProvider;
-
-    /**
-     * The config
-     */
-    private ResourceConfig config;
-
-    /**
-     * Init this servlet
-     *
-     * @throws ServletException
-     */
-    public void init() throws ServletException {
-        super.init();
-
-        resourcePathPrefix = getInitParameter(INIT_PARAM_RESOURCE_PATH_PREFIX);
-        if (resourcePathPrefix == null) {
-            log.debug("Missing path prefix > setting to empty string.");
-            resourcePathPrefix = "";
-        } else if (resourcePathPrefix.endsWith("/")) {
-            log.debug("Path prefix ends with '/' > removing trailing slash.");
-            resourcePathPrefix = resourcePathPrefix.substring(0, resourcePathPrefix.length() - 1);
-        }
-        getServletContext().setAttribute(CTX_ATTR_RESOURCE_PATH_PREFIX, resourcePathPrefix);
-        log.info(INIT_PARAM_RESOURCE_PATH_PREFIX + " = '" + resourcePathPrefix + "'");
-
-        authenticate_header = getInitParameter(INIT_PARAM_AUTHENTICATE_HEADER);
-        if (authenticate_header == null) {
-            authenticate_header = DEFAULT_AUTHENTICATE_HEADER;
-        }
-        log.info("WWW-Authenticate header = '" + authenticate_header + "'");
-
-        String configParam = getInitParameter(INIT_PARAM_RESOURCE_CONFIG);
-        if (configParam != null) {
-            try {
-                config = new ResourceConfig();
-                config.parse(getServletContext().getResource(configParam));
-            } catch (MalformedURLException e) {
-                log.debug("Unable to build resource filter provider.");
-            }
-        }
-    }
-
-    /**
-     * Executes the respective method in the given webdav context.
-     * The method is overridden since not all webdav methods should be
-     * supported by this servlet.
-     *
-     * @param request
-     * @param response
-     * @param method
-     * @param resource
-     * @return
-     * @throws ServletException
-     * @throws IOException
-     * @throws org.apache.jackrabbit.webdav.DavException
-     */
-    protected boolean execute(WebdavRequest request, WebdavResponse response,
-                              int method, DavResource resource)
-            throws ServletException, IOException, DavException {
-        switch (method) {
-            case DavMethods.DAV_HEAD:
-                doHead(request, response, resource);
-                break;
-            case DavMethods.DAV_GET:
-                doGet(request, response, resource);
-                break;
-            case DavMethods.DAV_OPTIONS:
-                doOptions(request, response, resource);
-                break;
-            case DavMethods.DAV_PROPFIND:
-                doPropFind(request, response, resource);
-                break;
-            case DavMethods.DAV_PROPPATCH:
-                doPropPatch(request, response, resource);
-                break;
-            case DavMethods.DAV_PUT:
-                doPut(request, response, resource);
-                break;
-            case DavMethods.DAV_POST:
-                doPost(request, response, resource);
-                break;
-            case DavMethods.DAV_DELETE:
-                doDelete(request, response, resource);
-                break;
-            case DavMethods.DAV_COPY:
-                doCopy(request, response, resource);
-                break;
-            case DavMethods.DAV_MOVE:
-                doMove(request, response, resource);
-                break;
-            case DavMethods.DAV_MKCOL:
-                doMkCol(request, response, resource);
-                break;
-            case DavMethods.DAV_LOCK:
-                doLock(request, response, resource);
-                break;
-            case DavMethods.DAV_UNLOCK:
-                doUnlock(request, response, resource);
-                break;
-            default:
-                // any other method
-                return false;
-        }
-        return true;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    protected boolean isPreconditionValid(WebdavRequest request,
-                                          DavResource resource) {
-        return !resource.exists() || request.matchesIfHeader(resource);
-    }
-
-    /**
-     * Returns the configured path prefix
-     *
-     * @return resourcePathPrefix
-     * @see #INIT_PARAM_RESOURCE_PATH_PREFIX
-     */
-    public String getPathPrefix() {
-        return resourcePathPrefix;
-    }
-
-    /**
-     * Returns the configured path prefix
-     *
-     * @return resourcePathPrefix
-     * @see #INIT_PARAM_RESOURCE_PATH_PREFIX
-     */
-    public static String getPathPrefix(ServletContext ctx) {
-        return (String) ctx.getAttribute(CTX_ATTR_RESOURCE_PATH_PREFIX);
-    }
-
-    /**
-     * Returns the <code>DavLocatorFactory</code>. If no locator factory has
-     * been set or created a new instance of {@link org.apache.jackrabbit.webdav.simple.LocatorFactoryImpl} is
-     * returned.
-     *
-     * @return the locator factory
-     * @see AbstractWebdavServlet#getLocatorFactory()
-     */
-    public DavLocatorFactory getLocatorFactory() {
-        if (locatorFactory == null) {
-            locatorFactory = new DavLocatorFactoryImpl(resourcePathPrefix);
-        }
-        return locatorFactory;
-    }
-
-    /**
-     * Sets the <code>DavLocatorFactory</code>.
-     *
-     * @param locatorFactory
-     * @see AbstractWebdavServlet#setLocatorFactory(DavLocatorFactory)
-     */
-    public void setLocatorFactory(DavLocatorFactory locatorFactory) {
-        this.locatorFactory = locatorFactory;
-    }
-
-    /**
-     * Returns the <code>LockManager</code>. If no lock manager has
-     * been set or created a new instance of {@link SimpleLockManager} is
-     * returned.
-     *
-     * @return the lock manager
-     */
-    public LockManager getLockManager() {
-        if (lockManager == null) {
-            lockManager = new SimpleLockManager();
-        }
-        return lockManager;
-    }
-
-    /**
-     * Sets the <code>LockManager</code>.
-     *
-     * @param lockManager
-     */
-    public void setLockManager(LockManager lockManager) {
-        this.lockManager = lockManager;
-    }
-
-    /**
-     * Returns the <code>DavResourceFactory</code>. If no request factory has
-     * been set or created a new instance of {@link ResourceFactoryImpl} is
-     * returned.
-     *
-     * @return the resource factory
-     * @see org.apache.jackrabbit.server.AbstractWebdavServlet#getResourceFactory()
-     */
-    public DavResourceFactory getResourceFactory() {
-        if (resourceFactory == null) {
-            resourceFactory = new ResourceFactoryImpl(getLockManager(), getResourceConfig());
-        }
-        return resourceFactory;
-    }
-
-    /**
-     * Sets the <code>DavResourceFactory</code>.
-     *
-     * @param resourceFactory
-     * @see AbstractWebdavServlet#setResourceFactory(org.apache.jackrabbit.webdav.DavResourceFactory)
-     */
-    public void setResourceFactory(DavResourceFactory resourceFactory) {
-        this.resourceFactory = resourceFactory;
-    }
-
-    /**
-     * Returns the <code>SessionProvider</code>. If no session provider has been
-     * set or created a new instance of {@link SessionProviderImpl} that extracts
-     * credentials from the request's <code>Authorization</code> header is
-     * returned.
-     *
-     * @return the session provider
-     */
-    public synchronized SessionProvider getSessionProvider() {
-        if (sessionProvider == null) {
-            sessionProvider = new SessionProviderImpl(
-                new BasicCredentialsProvider(
-                    getInitParameter(INIT_PARAM_MISSING_AUTH_MAPPING))
-            );
-        }
-        return sessionProvider;
-    }
-
-    /**
-     * Sets the <code>SessionProvider</code>.
-     *
-     * @param sessionProvider
-     */
-    public synchronized void setSessionProvider(SessionProvider sessionProvider) {
-        this.sessionProvider = sessionProvider;
-    }
-
-    /**
-     * Returns the <code>DavSessionProvider</code>. If no session provider has
-     * been set or created a new instance of {@link DavSessionProviderImpl}
-     * is returned.
-     *
-     * @return the session provider
-     * @see org.apache.jackrabbit.server.AbstractWebdavServlet#getDavSessionProvider()
-     */
-    public synchronized DavSessionProvider getDavSessionProvider() {
-        if (davSessionProvider == null) {
-            davSessionProvider =
-                new DavSessionProviderImpl(getRepository(), getSessionProvider());
-        }
-        return davSessionProvider;
-    }
-
-    /**
-     * Sets the <code>DavSessionProvider</code>.
-     *
-     * @param sessionProvider
-     * @see AbstractWebdavServlet#setDavSessionProvider(org.apache.jackrabbit.webdav.DavSessionProvider)
-     */
-    public synchronized void setDavSessionProvider(DavSessionProvider sessionProvider) {
-        this.davSessionProvider = sessionProvider;
-    }
-
-    /**
-     * Returns the header value retrieved from the {@link #INIT_PARAM_AUTHENTICATE_HEADER}
-     * init parameter. If the parameter is missing, the value defaults to
-     * {@link #DEFAULT_AUTHENTICATE_HEADER}.
-     *
-     * @return the header value retrieved from the corresponding init parameter
-     * or {@link #DEFAULT_AUTHENTICATE_HEADER}.
-     * @see org.apache.jackrabbit.server.AbstractWebdavServlet#getAuthenticateHeaderValue()
-     */
-    public String getAuthenticateHeaderValue() {
-        return authenticate_header;
-    }
-
-    /**
-     * Returns the resource configuration to be applied
-     *
-     * @return the resource configuration.
-     */
-    public ResourceConfig getResourceConfig() {
-        // fallback if no config present
-        if (config == null) {
-            config = new ResourceConfig();
-        }
-        return config;
-    }
-
-    /**
-     * Set the resource configuration
-     *
-     * @param config
-     */
-    public void setResourceConfig(ResourceConfig config) {
-        this.config = config;
-    }
-
-    /**
-     * Returns the <code>Repository</code>. If no repository has been set or
-     * created the repository initialized by <code>RepositoryAccessServlet</code>
-     * is returned.
-     *
-     * @return repository
-     * @see RepositoryAccessServlet#getRepository(ServletContext)
-     */
-    public Repository getRepository() {
-        if (repository == null) {
-            repository = RepositoryAccessServlet.getRepository(getServletContext());
-        }
-        return repository;
-    }
-
-    /**
-     * Sets the <code>Repository</code>.
-     *
-     * @param repository
-     */
-    public void setRepository(Repository repository) {
-        this.repository = repository;
-    }
-}
diff --git a/contrib/jcr-server/webapp/src/webapp/WEB-INF/config.xml b/contrib/jcr-server/webapp/src/webapp/WEB-INF/config.xml
deleted file mode 100644
index ccfd0d4..0000000
--- a/contrib/jcr-server/webapp/src/webapp/WEB-INF/config.xml
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-<!DOCTYPE config [
-        <!ELEMENT config (iomanager , (collection | noncollection)? , filter?) >
-
-        <!ELEMENT iomanager (class) >
-
-        <!ELEMENT collection (nodetypes) >
-        <!ELEMENT noncollection (nodetypes) >
-
-        <!ELEMENT filter (class, namespaces?, nodetypes?) >
-
-        <!ELEMENT class >
-        <!ATTLIST class
-            name  CDATA #REQUIRED
-        >
-        <!ELEMENT namespaces (prefix | uri)* >
-        <!ELEMENT prefix (CDATA) >
-        <!ELEMENT uri (CDATA) >
-
-        <!ELEMENT nodetypes (nodetype)* >
-        <!ELEMENT nodetype (CDATA) >
-]>
--->
-
-<config>
-    <!--
-    Defines the IOManager implementation that is responsible for passing import/export
-    request to the individual IO-handlers.
-    -->
-    <iomanager>
-        <!-- class element defines the manager to be used. The specified class
-             must implement the IOManager interface -->
-        <class name="org.apache.jackrabbit.server.io.DefaultIOManager" />
-    </iomanager>
-    <!--
-    Defines nodetypes, that should always be displayed as 'collection'.
-    -->
-    <!--
-    <collection>
-        <nodetypes>
-            <nodetype>nt:folder</nodetype>
-        </nodetypes>
-    </collection>
-    -->
-    <!--
-    Define nodetypes, that should never by displayed as 'collection'
-    -->
-    <noncollection>
-        <nodetypes>
-            <nodetype>nt:file</nodetype>
-            <nodetype>nt:resource</nodetype>
-        </nodetypes>
-    </noncollection>
-    <!--
-     Filter that allows to prevent certain items from being displayed.
-     Please note, that this has an effect on PROPFIND calls only and does not
-     provide limited access to those items matching any of the filters.
-
-     However specifying a filter may cause problems with PUT or MKCOL if the
-     resource to be created is being filtered out, thus resulting in inconsistent
-     responses (e.g. PUT followed by PROPFIND on parent).
-     -->
-    <filter>
-        <!-- class element defines the resource filter to be used. The specified class
-             must implement the ItemFilter interface -->
-        <class name="org.apache.jackrabbit.webdav.simple.DefaultItemFilter" />
-        <!-- Nodetype names to be used to filter child nodes.
-             A child node can be filtered if the declaring nodetype of its definition
-             is one of the nodetype names specified in the nodetypes Element.
-             E.g. defining 'rep:root' as filtered nodetype whould result in jcr:system
-             being hidden but no other child node of the root node, since those
-             are defined by the nodetype nt:unstructered.
-        -->
-        <!--
-        <nodetypes>
-            <nodetype>rep:root</nodetype>
-        </nodetypes>
-        -->
-        <!-- Namespace prefixes or uris. Items having a name that matches any of the
-             entries will be filtered.
-        -->
-        <namespaces>
-            <prefix>rep</prefix>
-            <prefix>jcr</prefix>
-            <!--
-            <uri>internal</uri>
-            <uri>http://www.jcp.org/jcr/1.0</uri>
-            -->
-        </namespaces>
-    </filter>
-</config>
-
diff --git a/contrib/jcr-server/webapp/src/webapp/WEB-INF/log4j.dtd b/contrib/jcr-server/webapp/src/webapp/WEB-INF/log4j.dtd
deleted file mode 100644
index 095d67b..0000000
--- a/contrib/jcr-server/webapp/src/webapp/WEB-INF/log4j.dtd
+++ /dev/null
@@ -1,177 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<!-- Authors: Chris Taylor, Ceki Gulcu. -->
-
-<!-- Version: 1.2 -->
-
-<!-- A configuration element consists of optional renderer
-elements,appender elements, categories and an optional root
-element. -->
-
-<!ELEMENT log4j:configuration (renderer*, appender*, logger*, root?)>
-
-<!-- The "threshold" attribute takes a level value such that all -->
-<!-- logging statements with a level equal or below this value are -->
-<!-- disabled. -->
-
-<!-- Setting the "debug" enable the printing of internal log4j logging   -->
-<!-- statements.                                                         -->
-
-<!-- By default, debug attribute is "null", meaning that we not do touch -->
-<!-- internal log4j logging settings. The "null" value for the threshold -->
-<!-- attribute can be misleading. The threshold field of a repository	 -->
-<!-- cannot be set to null. The "null" value for the threshold attribute -->
-<!-- simply means don't touch the threshold field, the threshold field   --> 
-<!-- keeps its old value.                                                -->
-     
-<!ATTLIST log4j:configuration
-  xmlns:log4j              CDATA #FIXED "http://jakarta.apache.org/log4j/" 
-  threshold                (all|debug|info|warn|error|fatal|off|null) "null"
-  debug                    (true|false|null)  "null"
->
-
-<!-- renderer elements allow the user to customize the conversion of  -->
-<!-- message objects to String.                                       -->
-
-<!ELEMENT renderer EMPTY>
-<!ATTLIST renderer
-  renderedClass  CDATA #REQUIRED
-  renderingClass CDATA #REQUIRED
->
-
-<!-- Appenders must have a name and a class. -->
-<!-- Appenders may contain an error handler, a layout, optional parameters -->
-<!-- and filters. They may also reference (or include) other appenders. -->
-<!ELEMENT appender (errorHandler?, param*, layout?, filter*, appender-ref*)>
-<!ATTLIST appender
-  name 		ID 	#REQUIRED
-  class 	CDATA	#REQUIRED
->
-
-<!ELEMENT layout (param*)>
-<!ATTLIST layout
-  class		CDATA	#REQUIRED
->
-
-<!ELEMENT filter (param*)>
-<!ATTLIST filter
-  class		CDATA	#REQUIRED
->
-
-<!-- ErrorHandlers can be of any class. They can admit any number of -->
-<!-- parameters. -->
-
-<!ELEMENT errorHandler (param*, root-ref?, logger-ref*,  appender-ref?)> 
-<!ATTLIST errorHandler
-   class        CDATA   #REQUIRED 
->
-
-<!ELEMENT root-ref EMPTY>
-
-<!ELEMENT logger-ref EMPTY>
-<!ATTLIST logger-ref
-  ref IDREF #REQUIRED
->
-
-<!ELEMENT param EMPTY>
-<!ATTLIST param
-  name		CDATA   #REQUIRED
-  value		CDATA	#REQUIRED
->
-
-
-<!-- The priority class is org.apache.log4j.Level by default -->
-<!--
-    DEPRECATED
-
-<!ELEMENT priority (param*)>
-<!ATTLIST priority
-  class   CDATA	#IMPLIED
-  value	  CDATA #REQUIRED
->
--->
-
-<!-- The level class is org.apache.log4j.Level by default -->
-<!ELEMENT level (param*)>
-<!ATTLIST level
-  class   CDATA	#IMPLIED
-  value	  CDATA #REQUIRED
->
-
-
-<!-- If no level element is specified, then the configurator MUST not -->
-<!-- touch the level of the named category. -->
-<!--
-    DEPRECATED
-
-<!ELEMENT category (param*,(priority|level)?,appender-ref*)>
-<!ATTLIST category
-  class         CDATA   #IMPLIED
-  name		CDATA	#REQUIRED
-  additivity	(true|false) "true"  
->
--->
-
-<!-- If no level element is specified, then the configurator MUST not -->
-<!-- touch the level of the named logger. -->
-<!ELEMENT logger (level?, appender-ref*)>
-<!ATTLIST logger
-  class         CDATA   #IMPLIED
-  name		ID	#REQUIRED
-  additivity	(true|false) "true"  
->
-
-<!--
-    DEPRECATED
-
-<!ELEMENT categoryFactory (param*)>
-<!ATTLIST categoryFactory 
-   class        CDATA #REQUIRED>
--->
-
-<!ELEMENT appender-ref EMPTY>
-<!ATTLIST appender-ref
-  ref IDREF #REQUIRED
->
-
-<!-- If no priority element is specified, then the configurator MUST not -->
-<!-- touch the priority of root. -->
-<!-- The root category always exists and cannot be subclassed. -->
-<!ELEMENT root (param*, level?, appender-ref*)>
-
-
-<!-- ==================================================================== -->
-<!--                       A logging event                                -->
-<!-- ==================================================================== -->
-<!ELEMENT log4j:eventSet (log4j:event*)>
-<!ATTLIST log4j:eventSet
-  xmlns:log4j             CDATA #FIXED "http://jakarta.apache.org/log4j/" 
-  version                (1.1|1.2) "1.2" 
-  includesLocationInfo   (true|false) "true"
->
-
-
-
-<!ELEMENT log4j:event (log4j:message, log4j:NDC?, log4j:throwable?, 
-                       log4j:locationInfo?) >
-
-<!-- The timestamp format is application dependent. -->
-<!ATTLIST log4j:event
-    logger     CDATA #REQUIRED
-    level      CDATA #REQUIRED
-    thread     CDATA #REQUIRED
-    timestamp  CDATA #REQUIRED
->
-
-<!ELEMENT log4j:message (#PCDATA)>
-<!ELEMENT log4j:NDC (#PCDATA)>
-
-<!ELEMENT log4j:throwable (#PCDATA)>
-
-<!ELEMENT log4j:locationInfo EMPTY>
-<!ATTLIST log4j:locationInfo
-  class  CDATA	#REQUIRED
-  method CDATA	#REQUIRED
-  file   CDATA	#REQUIRED
-  line   CDATA	#REQUIRED
->
diff --git a/contrib/jcr-server/webapp/src/webapp/WEB-INF/log4j.xml b/contrib/jcr-server/webapp/src/webapp/WEB-INF/log4j.xml
deleted file mode 100644
index 7794555..0000000
--- a/contrib/jcr-server/webapp/src/webapp/WEB-INF/log4j.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
-<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
-
-    <!-- ====================================================================== -->
-    <!-- A P P E N D E R S                                                      -->
-    <!-- ====================================================================== -->
-
-    <!-- console -->
-    <appender name="console" class="org.apache.log4j.ConsoleAppender">
-        <layout class="org.apache.log4j.PatternLayout">
-            <param name="ConversionPattern" value="%d{dd.MM.yyyy HH:mm:ss} *%-5p* %c{1}: %m (%F, line %L)%n"/>
-        </layout>
-    </appender>
-
-    <!-- error.log -->
-    <appender name="error" class="org.apache.log4j.FileAppender">
-        <param name="File" value="logs/jackrabbit.log"/>
-        <layout class="org.apache.log4j.PatternLayout">
-            <param name="ConversionPattern" value="%d{dd.MM.yyyy HH:mm:ss} *%-5p* %c{1}: %m (%F, line %L)%n"/>
-        </layout>
-    </appender>
-
-    <!-- ====================================================================== -->
-    <!-- L O G G E R S                                                          -->
-    <!-- ====================================================================== -->
-
-    <root>
-        <level value="info" />
-        <appender-ref ref="console"/>
-        <!-- <appender-ref ref="error"/> -->
-    </root>
-
-</log4j:configuration>
diff --git a/contrib/jcr-server/webapp/src/webapp/WEB-INF/repository/log4j.properties b/contrib/jcr-server/webapp/src/webapp/WEB-INF/repository/log4j.properties
deleted file mode 100644
index 2728ce9..0000000
--- a/contrib/jcr-server/webapp/src/webapp/WEB-INF/repository/log4j.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-# Set root logger level to DEBUG and its only appender to A1.
-log4j.rootLogger=INFO, stdout
-#log4j.rootLogger=DEBUG, stdout, file
-#log4j.rootLogger=ERROR, stdout, file
-
-# 'stdout' is set to be a ConsoleAppender.
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-
-# 'stdout' uses PatternLayout
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%d{dd.MM.yyyy HH:mm:ss} *%-5p* [%t] %c{1}: %m (%F, line %L)\n
-
-# 'file' is set to be a FileAppender.
-log4j.appender.file=org.apache.log4j.FileAppender
-log4j.appender.file.File=jcr.log
-
-# 'file' uses PatternLayout.
-log4j.appender.file.layout=org.apache.log4j.PatternLayout
-log4j.appender.file.layout.ConversionPattern=%d{dd.MM.yyyy HH:mm:ss} *%-5p* [%t] %c{1}: %m (%F, line %L)\n
-
diff --git a/contrib/jcr-server/webapp/src/webapp/WEB-INF/repository/repository.xml b/contrib/jcr-server/webapp/src/webapp/WEB-INF/repository/repository.xml
deleted file mode 100644
index 9baecb4..0000000
--- a/contrib/jcr-server/webapp/src/webapp/WEB-INF/repository/repository.xml
+++ /dev/null
@@ -1,206 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!-- <!DOCTYPE Repository PUBLIC "-//The Apache Software Foundation//DTD Repository//EN" "file://config.dtd"> -->
-<!DOCTYPE Repository [
-    <!--
-    the Repository element configures a repository instance;
-    individual workspaces of the repository are configured through
-    separate configuration files called workspace.xml which are
-    located in a subfolder of the workspaces root directory
-    (see Workspaces element).
-
-    it consists of
-
-    a FileSystem element (the virtual file system
-    used by the repository to persist global state such as
-    registered namespaces, custom node types, etc..
-
-    a Workspaces element that specifies to the location of
-    workspaces root directory and the name of default workspace
-
-    a Workspace element that is used as a workspace configuration
-    template; it is used to create the initial workspace if there's
-    no workspace yet and for creating additional workspaces through
-    the api
-
-    a SearchIndex element that is used for configuring per workspace
-    Indexing-related settings
-
-    a Versioning element that is used for configuring
-    versioning-related settings
-    -->
-    <!ELEMENT Repository (FileSystem,Security,Workspaces,Workspace,Versioning,SearchIndex?)>
-
-    <!--
-    a virtual file system
-    -->
-    <!ELEMENT FileSystem (param*)>
-    <!ATTLIST FileSystem
-      class CDATA #REQUIRED>
-
-    <!--
-        the Security element specifies the name (appName attribute)
-        of the JAAS configuration app-entry for this repository. 
-
-        it also specifies the access manager to be used (AccessManager element).
-    -->
-    <!ELEMENT Security (AccessManager)>
-    <!ATTLIST Security
-      appName CDATA #REQUIRED>
-
-
-    <!--
-    generic parameter (name/value pair)
-    -->
-    <!ELEMENT param EMPTY>
-    <!ATTLIST param
-      name CDATA #REQUIRED
-      value CDATA #REQUIRED>
-
-    <!--
-    the Workspaces element specifies the workspaces root directory
-    (rootPath attribute) and the name of the default workspace
-    (defaultWorkspace attribute).
-
-    individual workspaces are configured through individual workspace.xml
-    files located in a subfolder each of the workspaces root directory.
-    -->
-    <!ELEMENT Workspaces EMPTY>
-    <!ATTLIST Workspaces
-      rootPath CDATA #REQUIRED
-      defaultWorkspace CDATA #REQUIRED>
-
-    <!--
-    the Workspace element serves as a workspace configuration template;
-    it is used to create the initial workspace if there's no workspace yet
-    and for creating additional workspaces through the api
-    -->
-    <!ELEMENT Workspace (FileSystem,PersistenceManager,SearchIndex?)>
-    <!ATTLIST Workspace
-      name CDATA #REQUIRED>
-
-    <!--
-    the PersistenceManager element configures the persistence manager
-    to be used for the workspace; the class attribute specifies the
-    FQN of the class implementing PersistenceManager interface
-    -->
-    <!ELEMENT PersistenceManager (param*)>
-    <!ATTLIST PersistenceManager
-      class CDATA #REQUIRED>
-
-    <!--
-    the SearchIndex element specifies the locaction of the search index
-    (used by the QueryHandler); the class attribute specifies the
-    FQN of the class implementing the QueryHandler interface.
-    -->
-    <!ELEMENT SearchIndex (param*,FileSystem)>
-    <!ATTLIST SearchIndex
-      class CDATA #REQUIRED>
-
-    <!--
-    the Versioning element configures the persistence manager
-    to be used for persisting version state
-    -->
-    <!ELEMENT Versioning (FileSystem, PersistenceManager)>
-    <!ATTLIST Versioning
-      rootPath CDATA #REQUIRED
-    >
-]>
-<Repository>
-    <!--
-    virtual file system where the repository stores global state
-    (e.g. registered namespaces, custom node types, etc.)
-    -->
-    <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
-	<param name="path" value="${rep.home}/repository"/>
-    </FileSystem>
-
-    <!--
-        security configuration
-    -->
-    <Security appName="Jackrabbit">
-        <!--
-            access manager:
-            class: FQN of class implementing the AccessManager interface
-        -->
-        <AccessManager class="org.apache.jackrabbit.core.security.SimpleAccessManager">
-            <!-- <param name="config" value="${rep.home}/access.xml"/> -->
-        </AccessManager>
-
-        <LoginModule class="org.apache.jackrabbit.core.security.SimpleLoginModule">
-           <!-- anonymous user name ('anonymous' is the default value) -->
-           <param name="anonymousId" value="anonymous"/>
-        </LoginModule>
-    </Security>
-
-    <!--
-    location of workspaces root directory and name of default workspace
-    -->
-    <Workspaces rootPath="${rep.home}/workspaces" defaultWorkspace="default"/>
-    <!--
-    workspace configuration template:
-    used to create the initial workspace if there's no workspace yet
-    -->
-    <Workspace name="${wsp.name}">
-	<!--
-	virtual file system of the workspace:
-	class: FQN of class implementing FileSystem interface
-        -->
-	<FileSystem class="com.day.jackrabbit.fs.cq.CQFileSystem">
-	    <param name="path" value="${wsp.home}/wspStore.dat"/>
-	    <param name="autoRepair" value="false"/>
-	    <param name="blockSize" value="128"/>
-	    <param name="autoSync" value="false"/>
-	</FileSystem>
-	<!--
-	persistence of the workspace:
-	class: FQN of class implementing PersistenceManager interface
-        -->
-	<PersistenceManager class="org.apache.jackrabbit.core.state.obj.ObjectPersistenceManager"/>
-	<!--
-	Search index and the file system it uses.
-        -->
-	<SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
-  		<param name="path" value="${wsp.home}/index"/>
-	</SearchIndex>
-    </Workspace>
-
-    <!--
-    Configures the versioning
-    -->
-    <Versioning rootPath="${rep.home}/version">
-	<!--
-	Configures the filesystem to use for versioning for the respective
-	persistence manager
-        -->
-	<FileSystem class="com.day.jackrabbit.fs.cq.CQFileSystem">
-	    <param name="path" value="${rep.home}/version/version.dat"/>
-	    <param name="autoRepair" value="false"/>
-	    <param name="blockSize" value="128"/>
-	    <param name="autoSync" value="false"/>
-	</FileSystem>
-
-	<!--
-	Configures the persistence manager to be used for persisting version state.
-	Please note that the current versioning implementation is based on
-	a 'normal' persistence manager, but this could change in future
-	implementations.
-        -->
-	<PersistenceManager class="org.apache.jackrabbit.core.state.obj.ObjectPersistenceManager"/>
-
-    </Versioning>
-
-
-    <!--
-        Search index for content that is shared repository wide
-        (/jcr:system tree, contains mainly versions)
-        
-        The same parameters are supported as in the search index configuration
-        inside the workspace definition element.
-        
-        This element is optional. If omitted, the /jcr:system tree will not be
-        indexed and no results will be returned for that tree!
-    -->
-    <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
-        <param name="path" value="${rep.home}/repository/index"/>
-    </SearchIndex>
-</Repository>
diff --git a/contrib/jcr-server/webapp/src/webapp/WEB-INF/web.xml b/contrib/jcr-server/webapp/src/webapp/WEB-INF/web.xml
deleted file mode 100644
index 19ecd4c..0000000
--- a/contrib/jcr-server/webapp/src/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,252 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
-<web-app>
-    <display-name>Jackrabbit JCR Server</display-name>
-
-    <!-- ====================================================================== -->
-    <!-- L O G G I N G   S E R V L E T                                          -->
-    <!-- ====================================================================== -->
-    <servlet>
-        <servlet-name>Logging</servlet-name>
-        <description>The logging servlet configures the Log4J logging facility.</description>
-        <servlet-class>org.apache.jackrabbit.j2ee.LoggingServlet</servlet-class>
-
-        <init-param>
-            <param-name>log4j-config</param-name>
-            <param-value>/WEB-INF/log4j.xml</param-value>
-            <description>initial log4j configuration</description>
-        </init-param>
-
-        <load-on-startup>1</load-on-startup>
-    </servlet>
-
-    <!-- ====================================================================== -->
-    <!-- R E P O S I T O R Y   S T A R T U P  S E R V L E T                     -->
-    <!-- ====================================================================== -->
-    <servlet>
-        <servlet-name>RepositoryStartup</servlet-name>
-        <description>
-            Repository servlet that starts the repository and registers it to JNDI ans RMI.
-            If you already have the repository registered in this appservers JNDI context,
-            or if its accessible via RMI, you do not need to use this servlet.
-        </description>
-        <servlet-class>org.apache.jackrabbit.j2ee.RepositoryStartupServlet</servlet-class>
-
-        <init-param>
-            <param-name>repository-config</param-name>
-            <param-value>/WEB-INF/repository/repository.xml</param-value>
-            <description>the repository config location</description>
-        </init-param>
-
-        <init-param>
-            <param-name>repository-home</param-name>
-            <param-value>jackrabbit/repository</param-value>
-            <description>the repository home</description>
-        </init-param>
-
-        <init-param>
-            <param-name>repository-name</param-name>
-            <param-value>jackrabbit.repository</param-value>
-            <description>Repository Name under which the repository is registered via JNDI/RMI</description>
-        </init-param>
-
-        <!--
-            the following 3 parameters deal with registering the repository to
-            a RMI registry. if all parameters are omitted, the repository will
-            not be registered.
-        -->
-        <!--
-        <init-param>
-            <param-name>rmi-port</param-name>
-            <param-value>0</param-value>
-            <description>
-                The RMI port for registering the repository in the RMI Registry.
-                If equals 0, the default port is used.
-            </description>
-        </init-param>
-        <init-param>
-            <param-name>rmi-host</param-name>
-            <param-value>localhost</param-value>
-            <description>
-                The RMI host for registering the repository in the RMI Registry.
-                If equals "" or missing, the default host is used.
-            </description>
-        </init-param>
-        <init-param>
-            <param-name>rmi-uri</param-name>
-            <param-value></param-value>
-            <description>
-                The RMI uri for registering the repository in the RMI Registry.
-                If missing, the uri is composed using the other rmi parameters
-                and will have the format: //{rmi-host}:{rmi-port}/{repository-name}
-            </description>
-        </init-param>
-        -->
-        <!--
-            JNDI environment variables for creating the initial context
-            (all init parameters starting with java.naming.* will be added to the initial context environment).
-        -->
-        <init-param>
-            <param-name>java.naming.provider.url</param-name>
-            <param-value>http://www.apache.org/jackrabbit</param-value>
-        </init-param>
-        <init-param>
-            <param-name>java.naming.factory.initial</param-name>
-            <param-value>org.apache.jackrabbit.core.jndi.provider.DummyInitialContextFactory</param-value>
-        </init-param>
-
-        <load-on-startup>2</load-on-startup>
-    </servlet>
-
-
-    <!-- ====================================================================== -->
-    <!-- R E P O S I T O R Y   S E R V L E T                                    -->
-    <!-- ====================================================================== -->
-    <servlet>
-        <servlet-name>Repository</servlet-name>
-        <description>
-            This servlet provides other servlets and jsps a common way to access
-            the repository. The repository can be accessed via JNDI, RMI or Webdav.
-        </description>
-        <servlet-class>org.apache.jackrabbit.j2ee.RepositoryAccessServlet</servlet-class>
-
-        <init-param>
-            <param-name>repository-name</param-name>
-            <param-value>jackrabbit.repository</param-value>
-            <description>Repository Name that is used to retrieve it via JNDI</description>
-        </init-param>
-
-        <!--
-        <init-param>
-            <param-name>missing-auth-mapping</param-name>
-            <param-value>anonymous:anonymous</param-value>
-            <description>
-                Defines how a missing authorization header should be handled.
-                1) if this init-param is missing, a 401 response is generated.
-                   This is suiteable for clients (eg. webdav clients) for which
-                   sending a proper authorization header is not possible, if the
-                   server never sended a 401.
-                2) if this init-param is present, but with an empty value,
-                   null-credentials are returned, thus forcing an null login
-                   on the repository
-                3) if this init-param has a 'user:password' value, the respective
-                   simple credentials are generated.
-            </description>
-        </init-param>
-        -->
-
-        <!--
-            JNDI environment variables for creating the initial context
-            (all init parameters starting with java.naming.* will be added to the initial context environment).
-        -->
-        <init-param>
-            <param-name>java.naming.provider.url</param-name>
-            <param-value>http://www.apache.org/jackrabbit</param-value>
-        </init-param>
-        <init-param>
-            <param-name>java.naming.factory.initial</param-name>
-            <param-value>org.apache.jackrabbit.core.jndi.provider.DummyInitialContextFactory</param-value>
-        </init-param>
-
-        <!--
-            RMI url, if RMI remoting is needed
-        -->
-        <!--
-        <init-param>
-            <param-name>rmi-uri</param-name>
-            <param-value>///jackrabbit.repository</param-value>
-            <description>The URI for the RMI connection.</description>
-        </init-param>
-        -->
-
-        <load-on-startup>3</load-on-startup>
-    </servlet>
-
-    <!-- ====================================================================== -->
-    <!-- W E B D A V  S E R V L E T                                              -->
-    <!-- ====================================================================== -->
-    <servlet>
-        <servlet-name>Webdav</servlet-name>
-        <description>
-            The webdav servlet that connects HTTP request to the repository.
-        </description>
-        <servlet-class>org.apache.jackrabbit.j2ee.SimpleWebdavServlet</servlet-class>
-
-        <init-param>
-            <param-name>resource-path-prefix</param-name>
-            <param-value>/repository</param-value>
-            <description>
-                defines the prefix for spooling resources out of the repository.
-            </description>
-        </init-param>
-        <!--
-            Optional parameter to define the value of the 'WWW-Authenticate' header
-        -->
-        <!--
-        <init-param>
-            <param-name>authenticate-header</param-name>
-            <param-value>Basic realm="Jackrabbit Webdav Server"</param-value>
-            <description>
-                Defines the value of the 'WWW-Authenticate' header.
-            </description>
-        </init-param>
-        -->
-        <!--
-            Parameter used to configure behaviour of webdav resources such as:
-            - destinction between collections and non-collections
-            - resource filtering
-        -->
-        <init-param>
-            <param-name>resource-config</param-name>
-            <param-value>/WEB-INF/config.xml</param-value>
-            <description>
-                Defines various dav-resource configuration parameters.
-            </description>
-        </init-param>
-        <load-on-startup>4</load-on-startup>
-    </servlet>
-
-    <!-- ====================================================================== -->
-    <!-- W E B D A V  S E R V E R  S E R V L E T                                  -->
-    <!-- ====================================================================== -->
-    <servlet>
-        <servlet-name>JCRWebdavServer</servlet-name>
-        <description>
-            The webdav servlet that connects HTTP request to the repository.
-        </description>
-        <servlet-class>org.apache.jackrabbit.j2ee.JCRWebdavServerServlet</servlet-class>
-        <!--
-            Optional parameter to define the value of the 'WWW-Authenticate' header
-        -->
-        <!--
-        <init-param>
-            <param-name>authenticate-header</param-name>
-            <param-value>Basic realm="Jackrabbit Webdav Server"</param-value>
-            <description>
-                Defines the value of the 'WWW-Authenticate' header.
-            </description>
-        </init-param>
-        -->
-        <init-param>
-            <param-name>resource-path-prefix</param-name>
-            <param-value>/server</param-value>
-            <description>
-                defines the prefix for spooling resources out of the repository.
-            </description>
-        </init-param>
-        <load-on-startup>5</load-on-startup>
-    </servlet>
-
-    <!-- ====================================================================== -->
-    <!-- S E R V L E T   M A P P I N G                                          -->
-    <!-- ====================================================================== -->
-    <servlet-mapping>
-        <servlet-name>Webdav</servlet-name>
-        <url-pattern>/repository/*</url-pattern>
-    </servlet-mapping>
-    <servlet-mapping>
-        <servlet-name>JCRWebdavServer</servlet-name>
-        <url-pattern>/server/*</url-pattern>
-    </servlet-mapping>
-</web-app>
\ No newline at end of file
diff --git a/contrib/jcr-server/webapp/src/webapp/index.jsp b/contrib/jcr-server/webapp/src/webapp/index.jsp
deleted file mode 100644
index 2805b7e..0000000
--- a/contrib/jcr-server/webapp/src/webapp/index.jsp
+++ /dev/null
@@ -1,97 +0,0 @@
-<%@ page import="org.apache.jackrabbit.j2ee.SimpleWebdavServlet,
-		 javax.jcr.Repository,
-		 org.apache.jackrabbit.j2ee.RepositoryAccessServlet,
-                 org.apache.jackrabbit.j2ee.JCRWebdavServerServlet"%><%
-%><html>
-<head>
-<title>Jackrabbit JCR-Server Contribution</title>
-</head>
-<body style="font-family:monospace">
-<h1>JCR-Server Contribution</h1>
-<h3>JCR-Server contribution provides 2 views</h3><p/>
-<ol>
-    <li>
-        <b>Filebased View</b> (SimpleWebdavServlet)<p/>
-        Filebased ("Simple") WebDAV View to the JSR170 repository.<p/>
-        Enter the following URL to your WebDAV client:<br>
-        http://&lt;<i>host</i>&gt;:&lt;<i>port</i>&gt;<%= request.getContextPath() %><%= SimpleWebdavServlet.getPathPrefix(pageContext.getServletContext()) %>/&lt;<i>workspace name</i>&gt;/
-        <p/>
-        <ul>
-            <li><a href="<%= request.getContextPath() %><%= SimpleWebdavServlet.getPathPrefix(pageContext.getServletContext()) %>/default/">Browser View</a></li>
-            <li>Context Path: <%= request.getContextPath() %></li>
-            <li>Resource Path Prefix: <%= SimpleWebdavServlet.getPathPrefix(pageContext.getServletContext()) %></li>
-            <li>Workspace Name: see /WEB-INF/repository/repository.xml (Default = 'default')</li>
-            <li>Source: /contrib/jcr-server/server/webdav/simple</li>
-        </ul>
-        <p/>
-    </li>
-    <li>
-        <b>Item View</b> (JCRServerServlet)<p/>
-        Itembased WebDAV View to the JSR170 repository, mapping the functionality
-        provided by JSR170 to WebDAV, in order to allow remoting of JSR170 via
-        WebDAV. Some more details regarding remoting are available as initial
-        draft "<a href="http://www.day.com/jsr170/server/JCR_Webdav_Protocol.zip">JCR_Webdav_Protocol.zip</a>".
-        In addition the implementation attempts to cover functionality of RFC 2518 and
-        its extensions wherever possible, namely<br>
-        <ul>
-            <li><a href="http://www.ietf.org/rfc/rfc2518.txt">RFC 2518 (WebDAV 1,2)</a></li>
-            <li><a href="http://www.ietf.org/rfc/rfc3253.txt">RFC 3253 (DeltaV)</a></li>
-            <li><a href="http://www.ietf.org/rfc/rfc3648.txt">RFC 3648 (Ordering)</a></li>
-            <li><a href="http://greenbytes.de/tech/webdav/draft-reschke-webdav-search-latest.html">Internet Draft WebDAV Search</a>.</li>
-        </ul>
-        <p/>
-        Enter the following URL to your WebDAV client:<br>
-        http://&lt;<i>host</i>&gt;:&lt;<i>port</i>&gt;<%= request.getContextPath() %><%= JCRWebdavServerServlet.getPathPrefix(pageContext.getServletContext()) %>/
-        <p/>
-        <ul>
-            <li>Browser View: - Not Available - ("<%= request.getContextPath() %><%= JCRWebdavServerServlet.getPathPrefix(pageContext.getServletContext()) %>/")</li>
-            <li>Context Path: <%= request.getContextPath() %></li>
-            <li>Resource Path Prefix: <%= JCRWebdavServerServlet.getPathPrefix(pageContext.getServletContext()) %></li>
-            <li>Workspace Name: - Not required - (available workspaces are mapped as resources)</li>
-            <li>Source: /contrib/jcr-server/server/webdav/jcr</li>
-        </ul>
-    </li>
-</ol>
-<p/><p/>
-<h3>Basic overview</h3><p/>
-<ol>
-    <li><b>webdav module</b> (library only)<p/>
-      <ul>
-          <li>aim: JSR170 independent WebDAV library</li>
-          <li>packages: org.apache.jackrabbit.webdav</li>
-      </ul>
-      <p/>
-    </li>
-    <li><b>server module</b><p/>
-      <ul>
-          <li>aim: server and server-side WebDAV implementation</li>
-          <li>packages:
-              <br>- org.apache.jackrabbit.server
-              <br>- org.apache.jackrabbit.server.jcr = jcr-server specific server part
-              <br>- org.apache.jackrabbit.server.io  = import/export
-              <br>- org.apache.jackrabbit.webdav.simple = simple (filebased) webdav implementation
-              <br>- org.apache.jackrabbit.webdav.jcr = jcr-server (itembased) webdav implementation
-          </li>
-      </ul>
-      <p/>
-    </li>
-    <li><b>webapp module</b> (jackrabbit-server)<p/>
-      <ul>
-          <li>aim: contains the webapp</li>
-          <li>packages: org.apache.jackrabbit.j2ee (servlets)</li>
-      </ul>
-      <p/>
-    </li>
-    <li><b>client module</b><p/>
-      <ul>
-          <li>aim: provide jcr-client and WebDAV transport layer for the client</li>
-          <li>packages: - Not Available -</li>
-      </ul>
-    </li>
-</ol>
-<%
-    Repository rep = RepositoryAccessServlet.getRepository(pageContext.getServletContext());
-
-%><hr size="1"><em>Powered by <a href="<%= rep.getDescriptor(Repository.REP_VENDOR_URL_DESC) %>"><%= rep.getDescriptor(Repository.REP_NAME_DESC)%></a> version <%= rep.getDescriptor(Repository.REP_VERSION_DESC) %>.</em>
-</body>
-</html>
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/maven.xml b/contrib/jcr-server/webdav/maven.xml
deleted file mode 100644
index 30fb2ca..0000000
--- a/contrib/jcr-server/webdav/maven.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                       as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 default="jar">
-    <!--
-        the 'clean' goal is already redefined in the maven.xml
-        of the parent project. we need to redefine it here
-        again to 'maven clean' works.
-    -->
-    <goal name="clean">
-  	    <attainGoal name="clean:clean"/>
-  	</goal>
-</project>
diff --git a/contrib/jcr-server/webdav/project.properties b/contrib/jcr-server/webdav/project.properties
deleted file mode 100644
index 0569e85..0000000
--- a/contrib/jcr-server/webdav/project.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-maven.javadoc.links=http://java.sun.com/j2se/1.4.2/docs/api/,http://www.day.com/maven/jsr170/javadocs/jcr-0.16.1-pfd/
-maven.repo.remote = http://www.ibiblio.org/maven/,http://www.day.com/maven/
diff --git a/contrib/jcr-server/webdav/project.xml b/contrib/jcr-server/webdav/project.xml
deleted file mode 100644
index a49382d..0000000
--- a/contrib/jcr-server/webdav/project.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                       as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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>
-    <!-- ====================================================================== -->
-    <!-- P R O J E C T  D E S C R I P T I O N                                   -->
-    <!-- ====================================================================== -->
-    <extend>${basedir}/../project.xml</extend>
-    <artifactId>jcr-webdav</artifactId>
-    <name>JCRWebdavServer Webdav Library</name>
-
-    <!-- ====================================================================== -->
-    <!-- D E P E N D E N C I E S                                                -->
-    <!-- ====================================================================== -->
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.jackrabbit</groupId>
-            <artifactId>jackrabbit-commons</artifactId>
-            <version>${jackrabbit.build.version.jackrabbit}</version>
-        </dependency>
-        <dependency>
-            <groupId>jsr170</groupId>
-            <artifactId>jcr</artifactId>
-            <version>${jackrabbit.build.version.jcr}</version>
-        </dependency>
-        
-        <!-- non-jackrabbit dependencies -->
-        <dependency>
-            <groupId>log4j</groupId>
-            <artifactId>log4j</artifactId>
-            <version>1.2.8</version>
-        </dependency>
-        <dependency>
-            <groupId>xerces</groupId>
-            <artifactId>xercesImpl</artifactId>
-            <version>2.6.2</version>
-            <url>http://xerces.apache.org/xerces2-j/</url>
-        </dependency>
-        <dependency>
-            <groupId>xerces</groupId>
-            <artifactId>xmlParserAPIs</artifactId>
-            <version>2.0.2</version>
-        </dependency>
-        <dependency>
-            <groupId>servletapi</groupId>
-            <artifactId>servletapi</artifactId>
-            <version>2.3</version>
-        </dependency>
-    </dependencies>
-
-    <!-- ====================================================================== -->
-    <!-- B U I L D  D E S C R I P T I O N                                       -->
-    <!-- ====================================================================== -->
-    <build>
-        <sourceDirectory>${basedir}/src/java</sourceDirectory>
-        <resources>
-            <resource>
-                <directory>src/java</directory>
-                <includes>
-                    <include>**/*.xml</include>
-                    <include>**/*.xsd</include>
-                    <include>**/*.properties</include>
-                    <include>**/*.dtd</include>
-                </includes>
-            </resource>
-        </resources>
-    </build>
-
-</project>
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavConstants.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavConstants.java
deleted file mode 100644
index f716f4c..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavConstants.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav;
-
-import org.apache.jackrabbit.webdav.xml.Namespace;
-import org.apache.jackrabbit.webdav.util.HttpDateFormat;
-
-import java.text.DateFormat;
-
-/**
- * <code>DavConstants</code> provide constants for request and response
- * headers, Xml elements and property names defined by
- * <a href="http://www.ietf.org/rfc/rfc2518.txt">RFC 2518</a>. In addition
- * common date formats (creation date and modification time) are included.
- */
-public interface DavConstants {
-
-    /**
-     * Request and response headers and some value constants
-     */
-    //-------------------------------------------------------------- Headers ---
-    public static final String HEADER_DAV = "DAV";
-    public static final String HEADER_DESTINATION = "Destination";
-    public static final String HEADER_IF = "If";
-    public static final String HEADER_AUTHORIZATION = "Authorization";
-    public static final String HEADER_CONTENT_TYPE = "Content-Type";
-    public static final String HEADER_CONTENT_LENGTH = "Content-Length";
-    public static final String HEADER_CONTENT_LANGUAGE = "Content-Language";
-    public static final String HEADER_ETAG = "ETag";
-    public static final String HEADER_LAST_MODIFIED = "Last-Modified";
-
-    //---------------------------------------------------- Lock-Token header ---
-    public static final String HEADER_LOCK_TOKEN = "Lock-Token";
-    public static final String OPAQUE_LOCK_TOKEN_PREFIX = "opaquelocktoken:";
-
-    //------------------------------------------------------- Timeout header ---
-    public static final String HEADER_TIMEOUT = "Timeout";
-    public static final String TIMEOUT_INFINITE = "Infinite";
-    // RFC 2518: timeout value for TimeType "Second" MUST NOT be greater than 2^32-1
-    public static final long INFINITE_TIMEOUT = Integer.MAX_VALUE;
-    public static final long UNDEFINED_TIMEOUT = Integer.MIN_VALUE;
-    
-    //----------------------------------------------------- Overwrite header ---
-    public static final String HEADER_OVERWRITE = "Overwrite";
-
-    //--------------------------------------------------------- Depth header ---
-    public static final String HEADER_DEPTH = "Depth";
-    public static final String DEPTH_INFINITY_S = "infinity";
-    public static final int DEPTH_INFINITY = Integer.MAX_VALUE;
-    public static final int DEPTH_0 = 0;
-    public static final int DEPTH_1 = 1;
-
-    /**
-     * Default Namespace constant
-     */
-    public static final Namespace NAMESPACE = Namespace.getNamespace("D", "DAV:");
-
-    /**
-     * Xml element names used for response and request body
-     */
-    public static final String XML_ALLPROP = "allprop";
-    public static final String XML_COLLECTION = "collection";
-    public static final String XML_DST = "dst";
-    public static final String XML_HREF = "href";
-    public static final String XML_KEEPALIVE = "keepalive";
-    public static final String XML_LINK = "link";
-    public static final String XML_MULTISTATUS = "multistatus";
-    public static final String XML_OMIT = "omit";
-    public static final String XML_PROP = "prop";
-    public static final String XML_PROPERTYBEHAVIOR = "propertybehavior";
-    public static final String XML_PROPERTYUPDATE = "propertyupdate";
-    public static final String XML_PROPFIND = "propfind";
-    public static final String XML_PROPNAME = "propname";
-    public static final String XML_PROPSTAT = "propstat";
-    public static final String XML_REMOVE = "remove";
-    public static final String XML_RESPONSE = "response";
-    public static final String XML_RESPONSEDESCRIPTION = "responsedescription";
-    public static final String XML_SET = "set";
-    public static final String XML_SOURCE = "source";
-    public static final String XML_STATUS = "status";
-
-    /**
-     * XML element names related to locking
-     */
-    public static final String XML_ACTIVELOCK = "activelock";
-    public static final String XML_DEPTH = "depth";
-    public static final String XML_LOCKTOKEN = "locktoken";
-    public static final String XML_TIMEOUT = "timeout";
-    public static final String XML_LOCKSCOPE = "lockscope";
-    public static final String XML_EXCLUSIVE = "exclusive";
-    public static final String XML_SHARED = "shared";
-    public static final String XML_LOCKENTRY = "lockentry";
-    public static final String XML_LOCKINFO = "lockinfo";
-    public static final String XML_LOCKTYPE = "locktype";
-    public static final String XML_WRITE = "write";
-    public static final String XML_OWNER = "owner";
-
-    /**
-     * Webdav property names as defined by RFC 2518<br>
-     * Note: Microsoft webdav clients as well as Webdrive request additional
-     * property (e.g. href, name, owner, isRootLocation, isCollection)  within the
-     * default namespace, which are are ignored by this implementation, except
-     * for the 'isCollection' property, needed for XP built-in clients.
-     */
-    public static final String PROPERTY_CREATIONDATE = "creationdate";
-    public static final String PROPERTY_DISPLAYNAME = "displayname";
-    public static final String PROPERTY_GETCONTENTLANGUAGE = "getcontentlanguage";
-    public static final String PROPERTY_GETCONTENTLENGTH = "getcontentlength";
-    public static final String PROPERTY_GETCONTENTTYPE = "getcontenttype";
-    public static final String PROPERTY_GETETAG = "getetag";
-    public static final String PROPERTY_GETLASTMODIFIED = "getlastmodified";
-    public static final String PROPERTY_LOCKDISCOVERY = "lockdiscovery";
-    public static final String PROPERTY_RESOURCETYPE = "resourcetype";
-    public static final String PROPERTY_SOURCE = "source";
-    public static final String PROPERTY_SUPPORTEDLOCK = "supportedlock";
-
-    //--------------------------------------------------- Propfind constants ---
-    public static final int PROPFIND_BY_PROPERTY = 0;
-    public static final int PROPFIND_ALL_PROP = 1;
-    public static final int PROPFIND_PROPERTY_NAMES = 2;
-
-    //--------------------------------------------------------- date formats ---
-    /**
-     * modificationDate date format per RFC 1123
-     */
-    public static DateFormat modificationDateFormat = new HttpDateFormat("EEE, dd MMM yyyy HH:mm:ss z");
-
-    /**
-     * Simple date format for the creation date ISO representation (partial).
-     */
-    public static DateFormat creationDateFormat = new HttpDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
-}
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavException.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavException.java
deleted file mode 100644
index c991d3c..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavException.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.xml.XmlSerializable;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-import java.util.Properties;
-import java.io.IOException;
-
-/**
- * <code>DavException</code> extends the {@link Exception} class in order
- * to simplify handling of exceptional situations occuring during processing
- * of WebDAV requests and provides possibility to retrieve an Xml representation
- * of the error.
- */
-public class DavException extends Exception implements XmlSerializable {
-
-    private static Logger log = Logger.getLogger(DavException.class);
-    private static Properties statusPhrases = new Properties();
-    static {
-        try {
-            statusPhrases.load(DavException.class.getResourceAsStream("statuscode.properties"));
-        } catch (IOException e) {
-            log.error("Failed to load status properties: "+ e.getMessage());
-        }
-    }
-
-    public static final String XML_ERROR = "error";
-
-    private int errorCode = DavServletResponse.SC_INTERNAL_SERVER_ERROR;
-
-    /**
-     * Create a new <code>DavException</code>.
-     *
-     * @param errorCode integer specifying any of the status codes defined by
-     * {@link DavServletResponse}.
-     * @param message Human readable error message.
-     */
-    public DavException(int errorCode, String message) {
-        super(message);
-        this.errorCode = errorCode;
-        log.debug("DavException: (" + errorCode + ") " + message);
-    }
-
-    /**
-     * Create a new <code>DavException</code>.
-     *
-     * @param errorCode integer specifying any of the status codes defined by
-     * {@link DavServletResponse}.
-     */
-    public DavException(int errorCode) {
-        this(errorCode, statusPhrases.getProperty(String.valueOf(errorCode)));
-    }
-
-    /**
-     * Return the error code attached to this <code>DavException</code>.
-     *
-     * @return errorCode
-     */
-    public int getErrorCode() {
-        return errorCode;
-    }
-
-    /**
-     * Return the status phrase corresponding to the error code attached to
-     * this <code>DavException</code>.
-     *
-     * @return status phrase corresponding to the error code.
-     * @see #getErrorCode()
-     */
-    public String getStatusPhrase() {
-        return getStatusPhrase(errorCode);
-    }
-
-    /**
-     * Returns the status phrase for the given error code.
-     *
-     * @param errorCode
-     * @return status phrase corresponding to the given error code.
-     */
-    public static String getStatusPhrase(int errorCode) {
-        return statusPhrases.getProperty(errorCode+"");
-    }
-
-    /**
-     * @return Always false
-     */
-    public boolean hasErrorCondition() {
-        return false;
-    }
-
-    /**
-     * Returns <code>null</code>
-     *
-     * @param document
-     * @return <code>null</code>
-     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
-     */
-    public Element toXml(Document document) {
-        return null;
-    }
-
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavLocatorFactory.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavLocatorFactory.java
deleted file mode 100644
index 58e8d9c..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavLocatorFactory.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav;
-
-/**
- * <code>DavLocatorFactory</code>...
- */
-public interface DavLocatorFactory {
-
-    /**
-     * Create a new <code>DavResourceLocator</code>.
-     *
-     * @param prefix String consisting of  [scheme:][//authority][path] where
-     * path defines the (imaginary) path to the {@link DavResourceLocator#isRootLocation root location}.
-     * @param href of the resource to be created. The given string may start with
-     * the 'prefix'. Please note, that in contrast to
-     * {@link DavLocatorFactory#createResourceLocator(String, String, String)} the
-     * href is expected to be URL encoded.
-     * @return
-     */
-    public DavResourceLocator createResourceLocator(String prefix, String href);
-
-    /**
-     * Create a new <code>DavResourceLocator</code>. This methods corresponds to
-     * {@link DavLocatorFactory#createResourceLocator(String, String, String, boolean)}
-     * with the flag set to true.
-     *
-     * @param prefix String consisting of  [scheme:][//authority][path] where
-     * path defines the path to the {@link DavResourceLocator#isRootLocation root location}.
-     * @param workspacePath the first segment of the URIs path indicating the
-     * workspace. The implementation may allow a empty String if workspaces
-     * are not supported.
-     * @param resourcePath the URL decoded resource path
-     * @return
-     */
-    public DavResourceLocator createResourceLocator(String prefix, String workspacePath, String resourcePath);
-
-    /**
-     *
-     * @param prefix
-     * @param workspacePath
-     * @param path
-     * @param isResourcePath If true this method returns the same as
-     * {@link DavLocatorFactory#createResourceLocator(String, String, String)},
-     * otherwise the given path is treated as {@link javax.jcr.Item#getPath JCR path}.
-     * The implementation may choose to modify the given item path if it contains
-     * escaped characters due to incompatibility of the JCR path with the URI
-     * definition. I.e. it would undo the modification that was applied when
-     * calling {@link DavResourceLocator#getJcrPath()}.
-     * @return
-     * @see DavResourceLocator#getJcrPath()
-     */
-    public DavResourceLocator createResourceLocator(String prefix, String workspacePath, String path, boolean isResourcePath);
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavMethods.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavMethods.java
deleted file mode 100644
index 0c9983f..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavMethods.java
+++ /dev/null
@@ -1,374 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav;
-
-import org.apache.log4j.Logger;
-
-import java.util.HashMap;
-
-/**
- * <code>DavMethods</code> defines constants for the WebDAV METHODS.
- */
-public class DavMethods {
-
-    private static Logger log = Logger.getLogger(DavMethods.class);
-
-    /**
-     * A hashmap of webdav METHODS
-     */
-    private static HashMap methodMap = new HashMap();
-
-    /**
-     * An array of method codes that are affected by a Label header
-     * @see org.apache.jackrabbit.webdav.version.DeltaVConstants#HEADER_LABEL
-     */
-    private static int[] labelMethods;
-
-    /**
-     * An array of method codes defined by RFC 3253 (deltaV)
-     */
-    private static int[] deltaVMethods;
-
-    /**
-     * The webdav OPTIONS method and public constant
-     */
-    public static final int DAV_OPTIONS = 1;
-    public static final String METHOD_OPTIONS = "OPTIONS";
-
-    /**
-     * The webdav GET method and public constant
-     */
-    public static final int DAV_GET = DAV_OPTIONS + 1;
-    public static final String METHOD_GET = "GET";
-
-    /**
-     * The webdav HEAD method and public constant
-     */
-    public static final int DAV_HEAD = DAV_GET + 1;
-    public static final String METHOD_HEAD = "HEAD";
-
-
-    /**
-     * The webdav POST method and public constant
-     */
-    public static final int DAV_POST = DAV_HEAD + 1;
-    public static final String METHOD_POST = "POST";
-
-
-    /** The webdav DELETE method and public constant */
-    public static final int DAV_DELETE = DAV_POST + 1;
-    public static final String METHOD_DELETE = "DELETE";
-
-
-    /** The webdav PUT method and public constant */
-    public static final int DAV_PUT = DAV_DELETE + 1;
-    public static final String METHOD_PUT = "PUT";
-
-
-    /**
-     * The webdav PROPFIND method and public constant as defined by
-     * <a href="http://www.ietf.org/rfc/rfc2518.txt">RFC 2518</a>.
-     */
-    public static final int DAV_PROPFIND = DAV_PUT + 1;
-    public static final String METHOD_PROPFIND = "PROPFIND";
-
-
-    /**
-     * The webdav PROPPATCH method and public constant as defined by
-     * <a href="http://www.ietf.org/rfc/rfc2518.txt">RFC 2518</a>
-     */
-    public static final int DAV_PROPPATCH = DAV_PROPFIND + 1;
-    public static final String METHOD_PROPPATCH = "PROPPATCH";
-
-
-    /**
-     * The webdav MKCOL (make collection) method and public constant as defined by
-     * <a href="http://www.ietf.org/rfc/rfc2518.txt">RFC 2518</a>
-     */
-    public static final int DAV_MKCOL = DAV_PROPPATCH + 1;
-    public static final String METHOD_MKCOL = "MKCOL";
-
-
-    /**
-     * The webdav COPY method and public constant as defined by
-     * <a href="http://www.ietf.org/rfc/rfc2518.txt">RFC 2518</a>
-     */
-    public static final int DAV_COPY = DAV_MKCOL + 1;
-    public static final String METHOD_COPY = "COPY";
-
-
-    /**
-     * The webdav MOVE method and public constant as defined by
-     * <a href="http://www.ietf.org/rfc/rfc2518.txt">RFC 2518</a>
-     */
-    public static final int DAV_MOVE = DAV_COPY + 1;
-    public static final String METHOD_MOVE = "MOVE";
-
-
-    /**
-     * The webdav LOCK method and public constant as defined by
-     * <a href="http://www.ietf.org/rfc/rfc2518.txt">RFC 2518</a>
-     */
-    public static final int DAV_LOCK = DAV_MOVE + 1;
-    public static final String METHOD_LOCK = "LOCK";
-
-
-    /**
-     * The webdav UNLOCK method and public constant as defined by
-     * <a href="http://www.ietf.org/rfc/rfc2518.txt">RFC 2518</a>
-     */
-    public static final int DAV_UNLOCK = DAV_LOCK + 1;
-    public static final String METHOD_UNLOCK = "UNLOCK";
-
-
-    /**
-     * The webdav ORDERPATCH method and public constant
-     * defined by <a href="http://www.ietf.org/rfc/rfc3648.txt">RFC 3648</a>.
-     */
-    public static final int DAV_ORDERPATCH = DAV_UNLOCK + 1;
-    public static final String METHOD_ORDERPATCH = "ORDERPATCH";
-
-
-    /**
-     * The webdav SUBSCRIBE method and public constant.<br>
-     * NOTE: This method is not defined by any of the Webdav RFCs
-     */
-    public static final int DAV_SUBSCRIBE = DAV_ORDERPATCH + 1;
-    public static final String METHOD_SUBSCRIBE = "SUBSCRIBE";
-
-
-    /**
-     * The webdav UNSUBSCRIBE method and public constant<br>
-     * NOTE: This method is not defined by any of the Webdav RFCs
-     */
-    public static final int DAV_UNSUBSCRIBE = DAV_SUBSCRIBE + 1;
-    public static final String METHOD_UNSUBSCRIBE = "UNSUBSCRIBE";
-
-
-    /**
-     * The webdav POLL method and public constant<br>
-     * NOTE: This method is not defined by any of the Webdav RFCs
-     */
-    public static final int DAV_POLL = DAV_UNSUBSCRIBE + 1;
-    public static final String METHOD_POLL = "POLL";
-
-
-    /**
-     * The webdav SEARCH method and public constant as defined by the
-     * Webdav Search internet draft.
-     */
-    public static final int DAV_SEARCH = DAV_POLL + 1;
-    public static final String METHOD_SEARCH = "SEARCH";
-
-
-    /**
-     * The webdav REPORT method and public constant defined by
-     * <a href="http://www.ietf.org/rfc/rfc3253.txt">RFC 3253</a>
-     */
-    public static final int DAV_REPORT = DAV_SEARCH + 1;
-    public static final String METHOD_REPORT = "REPORT";
-
-
-    /**
-     * The webdav VERSION-CONTROL method and public constant defined by
-     * <a href="http://www.ietf.org/rfc/rfc3253.txt">RFC 3253</a>
-     */
-    public static final int DAV_VERSION_CONTROL = DAV_REPORT + 1;
-    public static final String METHOD_VERSION_CONTROL = "VERSION-CONTROL";
-
-    /**
-     * The webdav CHECKIN method and public constant defined by
-     * <a href="http://www.ietf.org/rfc/rfc3253.txt">RFC 3253</a>
-     */
-    public static final int DAV_CHECKIN = DAV_VERSION_CONTROL + 1;
-    public static final String METHOD_CHECKIN = "CHECKIN";
-
-    /**
-     * The webdav CHECKOUT method and public constant defined by
-     * <a href="http://www.ietf.org/rfc/rfc3253.txt">RFC 3253</a>
-     */
-    public static final int DAV_CHECKOUT = DAV_CHECKIN + 1;
-    public static final String METHOD_CHECKOUT = "CHECKOUT";
-
-    /**
-     * The webdav UNCHECKOUT method and public constant defined by
-     * <a href="http://www.ietf.org/rfc/rfc3253.txt">RFC 3253</a>
-     */
-    public static final int DAV_UNCHECKOUT = DAV_CHECKOUT + 1;
-    public static final String METHOD_UNCHECKOUT = "UNCHECKOUT";
-
-    /**
-     * The webdav LABEL method and public constant defined by
-     * <a href="http://www.ietf.org/rfc/rfc3253.txt">RFC 3253</a>
-     */
-    public static final int DAV_LABEL = DAV_UNCHECKOUT + 1;
-    public static final String METHOD_LABEL = "LABEL";
-
-    /**
-     * The webdav MERGE method and public constant defined by
-     * <a href="http://www.ietf.org/rfc/rfc3253.txt">RFC 3253</a>
-     */
-    public static final int DAV_MERGE = DAV_LABEL + 1;
-    public static final String METHOD_MERGE = "MERGE";
-
-    /**
-     * The webdav UPDATE method and public constant defined by
-     * <a href="http://www.ietf.org/rfc/rfc3253.txt">RFC 3253</a>
-     */
-    public static final int DAV_UPDATE = DAV_MERGE + 1;
-    public static final String METHOD_UPDATE = "UPDATE";
-
-    /**
-     * The webdav MKWORKSPACE method and public constant defined by
-     * <a href="http://www.ietf.org/rfc/rfc3253.txt">RFC 3253</a>
-     */
-    public static final int DAV_MKWORKSPACE = DAV_UPDATE + 1;
-    public static final String METHOD_MKWORKSPACE = "MKWORKSPACE";
-
-    /**
-     * The webdav BASELINE-CONTROL method and public constant defined by
-     * <a href="http://www.ietf.org/rfc/rfc3253.txt">RFC 3253</a>
-     */
-    public static final int DAV_BASELINE_CONTROL = DAV_MKWORKSPACE + 1;
-    public static final String METHOD_BASELINE_CONTROL = "BASELINE-CONTROL";
-
-    /**
-     * The webdav MKACTIVITY method and public constant defined by
-     * <a href="http://www.ietf.org/rfc/rfc3253.txt">RFC 3253</a>
-     */
-    public static final int DAV_MKACTIVITY = DAV_BASELINE_CONTROL + 1;
-    public static final String METHOD_MKACTIVITY = "MKACTIVITY";
-
-    /**
-     * Returns webdav method type code, error result <= 0
-     * Valid type codes > 0
-     */
-    public static int getMethodCode(String method) {
-        Integer code = (Integer) methodMap.get(method.toUpperCase());
-        if (code != null) {
-            return code.intValue();
-        }
-        return 0;
-    }
-
-    /**
-     * Static intializer for methodTable hashmap
-     */
-    private static void addMethodCode(String method, int code) {
-        methodMap.put(method, new Integer(code));
-    }
-
-    /**
-     *  Webdav Method table
-     */
-    static {
-        addMethodCode(METHOD_OPTIONS, DAV_OPTIONS);
-        addMethodCode(METHOD_GET, DAV_GET);
-        addMethodCode(METHOD_HEAD, DAV_HEAD);
-        addMethodCode(METHOD_POST, DAV_POST);
-        addMethodCode(METHOD_PUT, DAV_PUT);
-        addMethodCode(METHOD_DELETE, DAV_DELETE);
-        addMethodCode(METHOD_PROPFIND, DAV_PROPFIND);
-        addMethodCode(METHOD_PROPPATCH, DAV_PROPPATCH);
-        addMethodCode(METHOD_MKCOL, DAV_MKCOL);
-        addMethodCode(METHOD_COPY, DAV_COPY);
-        addMethodCode(METHOD_MOVE, DAV_MOVE);
-        addMethodCode(METHOD_LOCK, DAV_LOCK);
-        addMethodCode(METHOD_UNLOCK, DAV_UNLOCK);
-        addMethodCode(METHOD_ORDERPATCH, DAV_ORDERPATCH);
-        addMethodCode(METHOD_SUBSCRIBE, DAV_SUBSCRIBE);
-        addMethodCode(METHOD_UNSUBSCRIBE, DAV_UNSUBSCRIBE);
-        addMethodCode(METHOD_POLL, DAV_POLL);
-        addMethodCode(METHOD_SEARCH, DAV_SEARCH);
-        addMethodCode(METHOD_REPORT, DAV_REPORT);
-        addMethodCode(METHOD_VERSION_CONTROL, DAV_VERSION_CONTROL);
-        addMethodCode(METHOD_CHECKIN, DAV_CHECKIN);
-        addMethodCode(METHOD_CHECKOUT, DAV_CHECKOUT);
-        addMethodCode(METHOD_UNCHECKOUT, DAV_UNCHECKOUT);
-        addMethodCode(METHOD_LABEL, DAV_LABEL);
-        addMethodCode(METHOD_MERGE, DAV_MERGE);
-        addMethodCode(METHOD_UPDATE, DAV_UPDATE);
-        addMethodCode(METHOD_MKWORKSPACE, DAV_MKWORKSPACE);
-        addMethodCode(METHOD_BASELINE_CONTROL, DAV_BASELINE_CONTROL);
-        addMethodCode(METHOD_MKACTIVITY, DAV_MKACTIVITY);
-
-        labelMethods = new int[] { DAV_GET, DAV_HEAD, DAV_OPTIONS, DAV_PROPFIND,
-                                   DAV_LABEL, DAV_COPY };
-
-        deltaVMethods = new int[] { DAV_REPORT, DAV_VERSION_CONTROL, DAV_CHECKIN,
-                                    DAV_CHECKOUT, DAV_UNCHECKOUT, DAV_LABEL,
-                                    DAV_MERGE, DAV_UPDATE, DAV_MKWORKSPACE,
-                                    DAV_BASELINE_CONTROL, DAV_MKACTIVITY };
-    }
-
-   /**
-     * Returns <code>true</code> if the request is to create a resource.
-     * True for <code>PUT</code>, <code>POST</code>, <code>MKCOL</code>
-     * and <code>MKWORKSPACE</code> requests.
-     *
-     * @return true if request method is to create (or replace) a resource
-     */
-    public static boolean isCreateRequest(DavServletRequest request) {
-        int methodCode = getMethodCode(request.getMethod());
-        return ( methodCode == DAV_PUT ||
-                 methodCode == DAV_POST ||
-                 methodCode == DAV_MKCOL ||
-                 methodCode == DAV_MKWORKSPACE);
-    }
-
-    /**
-     * Returns <code>true</code> if the request is to create a collection resource.
-     * True for <code>MKCOL</code> and <code>MKWORKSPACE</code> requests.
-     *
-     * @return true if request method is to create a new collection resource
-     */
-    public static boolean isCreateCollectionRequest(DavServletRequest request) {
-        int methodCode = getMethodCode(request.getMethod());
-        return (methodCode == DAV_MKCOL || methodCode == DAV_MKWORKSPACE);
-    }
-
-    /**
-     * Returns true, if the specified method is affected by a Label header
-     *
-     * @param request
-     * @return
-     */
-    public static boolean isMethodAffectedByLabel(DavServletRequest request) {
-        int code = getMethodCode(request.getMethod());
-        for (int i = 0; i < labelMethods.length; i++) {
-            if (code == labelMethods[i]) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Returns true, if the specified method is defined by RFC 3253
-     *
-     * @param request
-     * @return true, if the specified method is defined by RFC 3253
-     */
-    public static boolean isDeltaVMethod(DavServletRequest request) {
-        int code = getMethodCode(request.getMethod());
-        for (int i = 0; i < deltaVMethods.length; i++) {
-            if (code == deltaVMethods[i]) {
-                return true;
-            }
-        }
-        return false;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavResource.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavResource.java
deleted file mode 100644
index e225042..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavResource.java
+++ /dev/null
@@ -1,327 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav;
-
-import org.apache.jackrabbit.webdav.io.InputContext;
-import org.apache.jackrabbit.webdav.io.OutputContext;
-import org.apache.jackrabbit.webdav.lock.ActiveLock;
-import org.apache.jackrabbit.webdav.lock.LockInfo;
-import org.apache.jackrabbit.webdav.lock.LockManager;
-import org.apache.jackrabbit.webdav.lock.Scope;
-import org.apache.jackrabbit.webdav.lock.Type;
-import org.apache.jackrabbit.webdav.property.DavProperty;
-import org.apache.jackrabbit.webdav.property.DavPropertyName;
-import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
-import org.apache.jackrabbit.webdav.property.DavPropertySet;
-
-import java.io.IOException;
-
-/**
- * <code>DavResource</code> provides standard WebDAV functionality as specified
- * by <a href="http://www.ietf.org/rfc/rfc2518.txt">RFC 2518</a>.
- */
-public interface DavResource {
-
-    /**
-     * Constant for WebDAV 1 and 2 compliance class as is represented by this
-     * resource.
-     */
-    public static final String COMPLIANCE_CLASS = "1, 2";
-
-    /**
-     * String constant representing the WebDAV 1 and 2 method set.
-     */
-    public static final String METHODS = "OPTIONS, GET, HEAD, POST, TRACE, PROPFIND, PROPPATCH, MKCOL, COPY, PUT, DELETE, MOVE, LOCK, UNLOCK";
-
-    /**
-     * Returns a comma separted list of all compliance classes the given
-     * resource is fulfilling.
-     *
-     * @return compliance classes
-     */
-    public String getComplianceClass();
-
-    /**
-     * Returns a comma separated list of all METHODS supported by the given
-     * resource.
-     *
-     * @return METHODS supported by this resource.
-     */
-    public String getSupportedMethods();
-
-    /**
-     * Returns true if this webdav resource represents an existing repository item.
-     *
-     * @return true, if the resource represents an existing repository item.
-     */
-    public boolean exists();
-
-    /**
-     * Returns true if this webdav resource has the resourcetype 'collection'.
-     *
-     * @return true if the resource represents a collection resource.
-     */
-    public boolean isCollection();
-
-    /**
-     * Returns the display name of this resource.
-     *
-     * @return display name.
-     */
-    public String getDisplayName();
-
-    /**
-     * Returns the {@link DavResourceLocator locator} object for this webdav resource,
-     * which encapsulates the information for building the complete 'href'.
-     *
-     * @return the locator for this resource.
-     * @see #getResourcePath()
-     * @see #getHref()
-     */
-    public DavResourceLocator getLocator();
-
-    /**
-     * Returns the path of the hierarchy element defined by this <code>DavResource</code>.
-     * This method is a shortcut for <code>DavResource.getLocator().getResourcePath()</code>.
-     *
-     * @return path of the element defined by this <code>DavResource</code>.
-     */
-    public String getResourcePath();
-
-    /**
-     * Returns the absolute href of this resource as returned in the
-     * multistatus response body.
-     *
-     * @return href
-     */
-    public String getHref();
-
-    /**
-     * Return the time of the last modification or -1 if the modification time
-     * could not be retrieved.
-     *
-     * @return time of last modification or -1.
-     */
-    public long getModificationTime();
-
-    /**
-     * Spools the resource properties and ev. content to the specified context
-     * (e.g. to respond to a 'GET' or 'HEAD' request). The context could e.g.
-     * wrap the servlet response.
-     *
-     * @param outputContext
-     * @throws IOException
-     */
-    public void spool(OutputContext outputContext) throws IOException;
-
-    /**
-     * Returns an array of all {@link DavPropertyName property names} available
-     * on this resource.
-     *
-     * @return an array of property names.
-     */
-    public DavPropertyName[] getPropertyNames();
-
-    /**
-     * Return the webdav property with the specified name.
-     *
-     * @param name name of the webdav property
-     * @return the {@link DavProperty} with the given name or <code>null</code>
-     * if the property does not exist.
-     */
-    public DavProperty getProperty(DavPropertyName name);
-
-    /**
-     * Returns all webdav properties present on this resource.
-     *
-     * @return a {@link DavPropertySet} containing all webdav property
-     * of this resource.
-     */
-    public DavPropertySet getProperties();
-
-    /**
-     * Add/Set the specified property on this resource.
-     *
-     * @param property
-     * @throws DavException if an error occurs
-     */
-    public void setProperty(DavProperty property) throws DavException;
-
-    /**
-     * Remove the specified property from this resource.
-     *
-     * @param propertyName
-     * @throws DavException if an error occurs
-     */
-    public void removeProperty(DavPropertyName propertyName) throws DavException;
-
-    /**
-     * Set/add the specified properties and remove the properties with the given
-     * names from this resource respectively.
-     *
-     * @param setProperties Set of properties to be added or modified
-     * @param removePropertyNames Set of property names to be removed
-     * @return multistatus response listing the status resulting from
-     * setting and/or removing the specified properties, in order to allow a
-     * detailled multistatus response.
-     * @throws DavException if an error occured. This may be the case if the
-     * general state of the resource prevents any properties to be set or removed
-     * (e.g. due to a lock).
-     */
-    public MultiStatusResponse alterProperties(DavPropertySet setProperties, DavPropertyNameSet removePropertyNames) throws DavException;
-
-    /**
-     * Retrieve the resource this resource is internal member of.
-     *
-     * @return resource this resource is an internal member of. In case this resource
-     * is the root <code>null</code> is returned.
-     */
-    public DavResource getCollection();
-
-    /**
-     * Add the given resource as an internal member to this resource.
-     *
-     * @param resource {@link DavResource} to be added as internal member.
-     * @param inputContext Context providing the properties and content for the
-     * internal member to be created or replaced.
-     * @throws DavException
-     */
-    public void addMember(DavResource resource, InputContext inputContext) throws DavException;
-
-    /**
-     * Returns an iterator over all internal members.
-     *
-     * @return a {@link DavResourceIterator) over all internal members.
-     */
-    public DavResourceIterator getMembers();
-
-    /**
-     * Removes the specified member from this resource.
-     *
-     * @throws DavException
-     */
-    public void removeMember(DavResource member) throws DavException;
-
-    /**
-     * Move this DavResource to the given destination resource
-     *
-     * @param destination
-     * @throws DavException
-     */
-    public void move(DavResource destination) throws DavException;
-
-    /**
-     * Copy this DavResource to the given destination resource
-     *
-     * @param destination
-     * @param shallow
-     * @throws DavException
-     */
-    public void copy(DavResource destination, boolean shallow) throws DavException;
-
-    /**
-     * Returns true, if the this resource allows locking. NOTE, that this method
-     * does not define, whether a lock/unlock can be successfully executed.
-     *
-     * @return true, if this resource supports any locking.
-     * @param type
-     * @param scope
-     */
-    public boolean isLockable(Type type, Scope scope);
-
-    /**
-     * Returns true if a lock applies to this resource. This may be either a
-     * lock on this resource itself or a deep lock inherited from a collection
-     * above this resource.<br>
-     * Note, that true is returned whenever a lock applies to that resource even
-     * if the lock is expired or not effective due to the fact that the request
-     * provides the proper lock token.
-     *
-     * @return true if a lock applies to this resource.
-     * @param type
-     */
-    public boolean hasLock(Type type, Scope scope);
-
-    /**
-     * Return the lock present on this webdav resource or <code>null</code>
-     * if the resource is either not locked or not lockable at all. Note, that
-     * a resource may have a lock that is inherited by a deep lock inforced on
-     * one of its 'parent' resources.
-     *
-     * @return lock information of this resource or <code>null</code> if this
-     * resource has no lock applying it. If an error occurs while retrieving the
-     * lock information <code>null</code> is returned as well.
-     * @param type
-     */
-    public ActiveLock getLock(Type type, Scope scope) ;
-
-    /**
-     * Returns an array of all locks applied to the given resource.
-     *
-     * @return array of locks. The array is empty if there are no locks applied
-     * to this resource.
-     */
-    public ActiveLock[] getLocks();
-
-    /**
-     * Lock this webdav resource with the information retrieve from the request
-     * and return the resulting lockdiscovery object.
-     *
-     * @param reqLockInfo lock info as retrieved from the request.
-     * @return lockdiscovery object to be returned in the response. If the lock
-     * could not be obtained a <code>DavException</code> is thrown.
-     * @throws DavException if the lock could not be obtained.
-     */
-    public ActiveLock lock(LockInfo reqLockInfo) throws DavException;
-
-    /**
-     * Refresh an existing lock by resetting the timeout.
-     *
-     * @param reqLockInfo lock info as retrieved from the request.
-     * @param lockToken identifying the lock to be refreshed.
-     * @return lockdiscovery object to be returned in the response body. If the lock
-     * could not be refreshed a <code>DavException</code> is thrown.
-     * @throws DavException if the lock could not be refreshed.
-     */
-    public ActiveLock refreshLock(LockInfo reqLockInfo, String lockToken) throws DavException;
-
-    /**
-     * Remove the lock indentified by the included lock token from this resource.
-     * This method will return false if the unlocking did not succeed.
-     *
-     * @param lockToken indentifying the lock to be removed.
-     * @throws DavException if the lock could not be removed.
-     */
-    public void unlock(String lockToken) throws DavException;
-
-    /**
-     * Add an external {@link LockManager} to this resource. This method may
-     * throw {@link UnsupportedOperationException} if the resource does handle
-     * locking itself.
-     *
-     * @param lockmgr
-     * @see LockManager
-     */
-    public void addLockManager(LockManager lockmgr);
-
-    /**
-     * Return the <code>DavResourceFactory</code> that created this resource.
-     *
-     * @return the factory that created this resource.
-     */
-    public DavResourceFactory getFactory();
-}
-
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavResourceFactory.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavResourceFactory.java
deleted file mode 100644
index 74f43b9..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavResourceFactory.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav;
-
-/**
- * <code>DavResourceFactory</code> interface defines a single method for creating
- * {@link DavResource} objects.
- */
-public interface DavResourceFactory {
-
-    /**
-     * Create a {@link DavResource} object from the given locator, request and response
-     * objects.
-     *
-     * @param locator locator of the resource
-     * @param request
-     * @param response
-     * @return a new <code>DavResource</code> object.
-     * @throws DavException
-     */
-    public DavResource createResource(DavResourceLocator locator, DavServletRequest request, DavServletResponse response) throws DavException;
-
-    /**
-     * Create a new {@link DavResource} object from the given locator and session.
-     *
-     * @param locator
-     * @param session
-     * @return a new <code>DavResource</code> object. 
-     * @throws DavException
-     */
-    public DavResource createResource(DavResourceLocator locator, DavSession session) throws DavException;
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavResourceIterator.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavResourceIterator.java
deleted file mode 100644
index 2d337b8..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavResourceIterator.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav;
-
-import java.util.Iterator;
-
-/**
- * DavResourceIterator extends the <code>Iterator</code> interface. Additional
- * METHODS allow to retrieve the next {@link DavResource} from the iterator
- * and the iterators size.
- */
-public interface DavResourceIterator extends Iterator {
-
-    /**
-     * Returns the next {@link DavResource} in the iterator
-     * @return the next {@link DavResource}
-     */
-    public DavResource nextResource();
-
-    /**
-     * Return the number of {@link DavResource}s in the iterator.
-     * @return number of elements in the iterator.
-     */
-    public int size();
-}
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavResourceIteratorImpl.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavResourceIteratorImpl.java
deleted file mode 100644
index d99edb0..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavResourceIteratorImpl.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav;
-
-import org.apache.log4j.Logger;
-
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * <code>DavResourceIteratorImpl</code> implementation of the {@link DavResourceIterator}
- * interface.<br>
- * NOTE: {@link #remove()} is not implemented.
- */
-public class DavResourceIteratorImpl implements DavResourceIterator {
-
-    private static Logger log = Logger.getLogger(DavResourceIteratorImpl.class);
-
-    private Iterator it;
-    private int size;
-
-    /**
-     * Create a new DavResourceIterator from the specified list.
-     * @param list
-     */
-    public DavResourceIteratorImpl(List list) {
-        it = list.iterator();
-        size = list.size();
-    }
-
-    /**
-     * @see DavResourceIterator#hasNext()
-     */
-    public boolean hasNext() {
-        return it.hasNext();
-    }
-
-    /**
-     * @see DavResourceIterator#next()
-     */
-    public Object next() {
-        return it.next();
-    }
-
-    /**
-     * @see DavResourceIterator#nextResource()
-     */
-    public DavResource nextResource() {
-        return (DavResource) next();
-    }
-
-    /**
-     * Returns the size of the initial list.
-     *
-     * @see DavResourceIterator#size()
-     */
-    public int size() {
-        return size;
-    }
-
-    /**
-     * @see DavResourceIterator#remove()
-     */
-    public void remove() {
-        throw new UnsupportedOperationException("Remove not allowed with DavResourceIteratorImpl");
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavResourceLocator.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavResourceLocator.java
deleted file mode 100644
index 6e531a7..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavResourceLocator.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav;
-
-/**
- * <code>DavResourceLocator</code>...
- */
-public interface DavResourceLocator {
-
-    /**
-     * Return the prefix used to build the complete href of the resource as
-     * required for the {@link DavConstants#XML_HREF href Xml} element.
-     * This includes scheme and host information as well as constant prefixes.
-     * However, this must not include workspace prefix.
-     *
-     * @return prefix needed in order to build the href from a resource path.
-     * @see #getResourcePath()
-     */
-    public String getPrefix();
-
-    /**
-     * Return the resource path.
-     *
-     * @return resource path
-     */
-    public String getResourcePath();
-
-    /**
-     * Return the path of the workspace the resource identified by this
-     * locator is member of.
-     *
-     * @return path of the workspace
-     */
-    public String getWorkspacePath();
-
-    /**
-     * Return the name of the workspace the resource identified by this
-     * locator is member of.
-     *
-     * @return workspace name
-     */
-    public String getWorkspaceName();
-
-    /**
-     * Returns true if the specified locator refers to a resource within the
-     * same workspace.
-     *
-     * @param locator
-     * @return true if both paths are in the same workspace.
-     */
-    public boolean isSameWorkspace(DavResourceLocator locator);
-
-    /**
-     * Returns true if the specified workspace name equals to the workspace
-     * name defined with this locator.
-     *
-     * @param workspaceName
-     * @return true if workspace names are equal.
-     */
-    public boolean isSameWorkspace(String workspaceName);
-
-    /**
-     * Return the 'href' representation of this locator object. The implementation
-     * should perform an URL encoding of the resource path.
-     *
-     * @param isCollection
-     * @return 'href' representation of this path
-     * @see DavConstants#XML_HREF
-     * @see DavResource#getHref()
-     */
-    public String getHref(boolean isCollection);
-
-    /**
-     * Returns true if this <code>DavResourceLocator</code> represents the root
-     * locator that would be requested with 'hrefPrefix'+'pathPrefix' with or
-     * without a trailing '/'.
-     *
-     * @return true if this locator object belongs to the root resource.
-     */
-    public boolean isRootLocation();
-
-    /**
-     * Return the locator factory that created this locator.
-     *
-     * @return the locator factory
-     */
-    public DavLocatorFactory getFactory();
-
-    /**
-     * An implementation may choose to circumvent the incompatibility of the
-     * JCR path with the URI path by applying an appropriate escaping. This
-     * utility method allows to retrieve the jcr path that corresponds to
-     * the resource path as returned by {#link getResourcePath()}.
-     *
-     * @return a jcr compatible form if the resource path.
-     * @see DavLocatorFactory#createResourceLocator(String, String, String, boolean)
-     * that allows to build a valid <code>DavResourceLocator</code> from a jcr path.
-     */
-    public String getJcrPath();
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavServletRequest.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavServletRequest.java
deleted file mode 100644
index 1ca99b6..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavServletRequest.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav;
-
-import org.apache.jackrabbit.webdav.property.DavPropertySet;
-import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
-import org.apache.jackrabbit.webdav.lock.LockInfo;
-import org.w3c.dom.Document;
-
-import javax.servlet.http.HttpServletRequest;
-
-/**
- * <code>DavServletRequest</code> extends the HttpServletRequest by Webdav
- * specific METHODS.
- */
-public interface DavServletRequest extends HttpServletRequest {
-
-    /**
-     * Sets the <code>DavSession</code> to this request.
-     *
-     * @param session
-     */
-    public void setDavSession(DavSession session);
-
-    /**
-     * Returns the {@link DavSession} created for this request.
-     *
-     * @return session for this resource
-     */
-    public DavSession getDavSession();
-
-    /**
-     * Return the locator of the requested {@link DavResource resource}.
-     *
-     * @return locator of the requested {@link DavResource resource}.
-     */
-    public DavResourceLocator getRequestLocator();
-
-    /**
-     * Parse the {@link DavConstants#HEADER_DESTINATION Destination header}
-     * and return the locator of the corresponding {@link DavResource resource}.
-     *
-     * @return locator of the resource specified with the Destination header.
-     * @see DavConstants#HEADER_DESTINATION
-     */
-    public DavResourceLocator getDestinationLocator();
-
-    /**
-     * Returns true if the {@link DavConstants#HEADER_OVERWRITE Overwrite header}
-     * is set to 'T' thus instructing the server to overwrite the state of a
-     * non-null destination resource during a COPY or MOVE. A Overwrite header
-     * value of 'F' will return false.
-     *
-     * @return true if the Overwrite header is set to 'T', false if it is set
-     * to 'F'.
-     * @see DavConstants#HEADER_OVERWRITE
-     */
-    public boolean isOverwrite();
-
-    /**
-     * Return the integer representation of the given {@link DavConstants#HEADER_DEPTH
-     * Depth header}. 'Infinity' is represented by {@link DavConstants#DEPTH_INFINITY}.
-     *
-     * @return integer representation of the {@link DavConstants#HEADER_DEPTH
-     * Depth header}.
-     * @see DavConstants#HEADER_DEPTH
-     */
-    public int getDepth();
-
-    /**
-     * Returns the integer representation of the {@link DavConstants#HEADER_DEPTH
-     * Depth header} or the given defaultValue, if the Depth header is missing.
-     *
-     * @param defaultValue to be returned if no Depth header is present.
-     * @return integer representation of the {@link DavConstants#HEADER_DEPTH
-     * Depth header} or the given defaultValue.
-     * @see DavConstants#HEADER_DEPTH
-     */
-    public int getDepth(int defaultValue);
-
-    /**
-     * Returns the token present in the {@link DavConstants#HEADER_LOCK_TOKEN
-     * Lock-Token Header} or <code>null</code> if no such header is available.<br>
-     * Note: The 'Lock-Token' header is sent with UNLOCK requests and with
-     * lock responses only. For any other request that may be affected by a lock
-     * the 'If' header field is responsible.
-     *
-     * @return the token present in the Lock-Token header.
-     * @see DavConstants#HEADER_LOCK_TOKEN
-     */
-    public String getLockToken();
-
-    /**
-     * Return the timeout requested in the {@link DavConstants#HEADER_TIMEOUT
-     * Timeout header} as <code>long</code>. The representation of the
-     * 'Infinite' timeout is left to the implementation.
-     *
-     * @return long value representation of the Timeout header.
-     * @see DavConstants#HEADER_TIMEOUT
-     * @see DavConstants#TIMEOUT_INFINITE
-     */
-    public long getTimeout();
-
-    /**
-     * Parse the Xml request body and return a {@link org.w3c.dom.Document}.
-     * If the request body can not be parsed <code>null</code> is returned.
-     *
-     * @return Document representing the Xml request body or <code>null</code>.
-     */
-    public Document getRequestDocument();
-
-    /**
-     * Return the type of PROPFIND request as indicated by the PROPFIND request
-     * body.
-     *
-     * @return type of PROPFIND request
-     * @see DavConstants#PROPFIND_ALL_PROP
-     * @see DavConstants#PROPFIND_BY_PROPERTY
-     * @see DavConstants#PROPFIND_PROPERTY_NAMES
-     */
-    public int getPropFindType() throws DavException;
-
-    /**
-     * Return the set of properties the client requested with a PROPFIND request
-     * or an empty set if the type of PROPFIND request was {@link DavConstants#PROPFIND_ALL_PROP}
-     * or {@link DavConstants#PROPFIND_PROPERTY_NAMES}.
-     *
-     * @return set of properties the client requested with a PROPFIND request
-     */
-    public DavPropertyNameSet getPropFindProperties() throws DavException;
-
-    /**
-     * Return the set of properties the client wanted to modify / create with a
-     * PROPPATCH request, i.e. all entries in the &lt;propertyupdate&gt; element
-     * of the request body with name &lt;set&gt;.
-     *
-     * @return set of properties the client wanted to modify / create with a
-     * PROPPATCH request.
-     */
-    public DavPropertySet getPropPatchSetProperties() throws DavException;
-
-    /**
-     * Return the set of property names the client wanted to remove with a
-     * PROPPATCH request, i.e. all entries in the &lt;propertyupdate&gt; element
-     * of the request body with name &lt;remove&gt;.<br>
-     * Note, that in constrast to the &lt;set&gt; Xml element, all the XML
-     * elements in a prop XML element inside of a remove XML element must be
-     * empty, as only the names of properties to be removed are required. Therefore
-     * a <code>DavPropertyNameSet</code> is returned and not a <code>DavPropertySet</code>
-     *
-     * @return set of property names the client wanted to remove with a
-     * PROPPATCH request.
-     */
-    public DavPropertyNameSet getPropPatchRemoveProperties() throws DavException;
-
-    /**
-     * Return the parsed 'lockinfo' request body, the {@link DavConstants#HEADER_TIMEOUT
-     * Timeout header} and the {@link DavConstants#HEADER_DEPTH Depth header}
-     * of a LOCK request as <code>LockInfo</code> object.
-     *
-     * @return <code>LockInfo</code> object encapsulating the information
-     * present in the LOCK request.
-     * @see DavConstants#HEADER_TIMEOUT
-     * @see DavConstants#HEADER_DEPTH
-     * @see DavConstants#XML_LOCKINFO
-     */
-    public LockInfo getLockInfo();
-
-    /**
-     * Returns true, if the {@link DavConstants#HEADER_IF If header} present
-     * with the request matches the given resource.
-     *
-     * @param resource
-     * @return true, if the test is successful, false otherwise.
-     */
-    public boolean matchesIfHeader(DavResource resource);
-
-    /**
-     * Returns true, if the {@link DavConstants#HEADER_IF If header} present
-     * with the request matches to the given href, token and eTag.
-     *
-     * @param href
-     * @param token
-     * @param eTag
-     * @return true, if the test is successful, false otherwise.
-     */
-    public boolean matchesIfHeader(String href, String token, String eTag);
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavServletResponse.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavServletResponse.java
deleted file mode 100644
index 5f72a9a..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavServletResponse.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav;
-
-import org.apache.jackrabbit.webdav.lock.ActiveLock;
-import org.apache.jackrabbit.webdav.xml.XmlSerializable;
-
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-
-/**
- * <code>WebdavResponse</code> extends the HttpServletResponse by
- * Webdav specific status codes and METHODS.
- */
-public interface DavServletResponse extends HttpServletResponse {
-
-    /**
-     * The 102 (Processing) status code is an interim response used to
-     * inform the client that the server has accepted the complete request,
-     * but has not yet completed it.
-     */
-    int SC_PROCESSING = 102;
-
-    /**
-     * Status code (207) indicating that the response requires
-     * providing status for multiple independent operations.
-     */
-    int SC_MULTI_STATUS = 207;
-
-    /**
-     * The 422 (Unprocessable Entity) status code means the server understands
-     * the content type of the request entity (hence a 415(Unsupported Media Type)
-     * status code is inappropriate), and the syntax of the request entity is
-     * correct (thus a 400 (Bad Request) status code is inappropriate) but was
-     * unable to process the contained instructions. For example, this error
-     * condition may occur if an XML request body contains well-formed (i.e.,
-     * syntactically correct), but semantically erroneous XML instructions.
-     */
-    int SC_UNPROCESSABLE_ENTITY = 422;
-
-    /**
-     * Status code (423) indicating the destination resource of a
-     * method is locked, and either the request did not contain a
-     * valid Lock-Info header, or the Lock-Info header identifies
-     * a lock held by another principal.
-     */
-    int SC_LOCKED = 423;
-
-    /**
-     * Status code (424) incidating that the method could not be
-     * performed on the resource, because the requested action depended
-     * on another action which failed.
-     */
-    int SC_FAILED_DEPENDENCY = 424;
-
-    /**
-     * Status code (507) indicating that the resource does not have
-     * sufficient space to record the state of the resource after the
-     * execution of this method.
-     */
-    int SC_INSUFFICIENT_SPACE_ON_RESOURCE = 507;
-
-    /**
-     * Send a response body given more detailed information about the error
-     * occured.
-     *
-     * @param error
-     * @throws IOException
-     */
-    public void sendError(DavException error) throws IOException;
-
-    /**
-     * Send the multistatus response to the client. A multistatus response
-     * is returned in response to a successful PROPFIND and PROPPATCH request.
-     * In addition multistatus response is required response in case a COPY,
-     * MOVE, DELETE, LOCK or PROPPATCH request fails.
-     *
-     * @param multistatus
-     * @throws IOException
-     * @see #SC_MULTI_STATUS
-     */
-    public void sendMultiStatus(MultiStatus multistatus) throws IOException;
-
-    /**
-     * Send the lock response for a successful LOCK request. The given <code>ActiveLock</code>
-     * object is included in the lockdiscovery property of the response
-     * body as required by RFC 2518.
-     *
-     * @param lock
-     * @throws IOException
-     * @see DavConstants#PROPERTY_LOCKDISCOVERY
-     */
-    public void sendLockResponse(ActiveLock lock) throws IOException;
-
-    /**
-     * Send the lock response for a successful LOCK request, that was intended
-     * to refresh an existing lock. The locks array must contain at least
-     * a single element; the <code>ActiveLock</code> objects are then
-     * included in the lockdiscovery property of the response body as required
-     * by RFC 2518.
-     *
-     * @param locks
-     * @throws IOException
-     * @see DavConstants#PROPERTY_LOCKDISCOVERY
-     */
-    public void sendRefreshLockResponse(ActiveLock[] locks) throws IOException;
-
-    /**
-     * Generic method to return an Xml response body.
-     *
-     * @param serializable object that can be converted to the root Xml element
-     * of the document to be sent as response body.
-     * @param status Status code to be used with {@link #setStatus(int)}.
-     * @throws IOException
-     */
-    public void sendXmlResponse(XmlSerializable serializable, int status) throws IOException;
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavSession.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavSession.java
deleted file mode 100644
index d4b82ee..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavSession.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav;
-
-import javax.jcr.Session;
-
-/**
- * <code>DavSession</code> wraps a {@link Session repository session}
- * object, that is obtained on
- * {@link javax.jcr.Repository#login(javax.jcr.Credentials, String) login} to
- * the underlying repository.
- */
-public interface DavSession {
-
-    /**
-     * Adds a reference to this <code>DavSession</code> indicating that
-     * the underlying {@link Session} object is needed for actions spanning over
-     * multiple requests.
-     *
-     * @param reference to be added.
-     */
-    public void addReference(Object reference);
-
-    /**
-     * Releasing a reference to this <code>DavSession</code>. If no more
-     * references are present, the underlying {@link Session} may be discarded.
-     *
-     * @param reference to be removed.
-     */
-    public void removeReference(Object reference);
-
-    /**
-     * Unwrap the {@link Session repository session} object.
-     *
-     * @return the session object wrapped by this <code>DavSession</code>
-     */
-    public Session getRepositorySession();
-
-    /**
-     * Adds a lock token to this <code>DavSession</code>.
-     *
-     * @param token
-     */
-    public void addLockToken(String token);
-
-    /**
-     * Returns the lock tokens of this <code>DavSession</code>.
-     *
-     * @return
-     */
-    public String[] getLockTokens();
-
-    /**
-     * Removes a lock token from this <code>DavSession</code>.
-     *
-     * @param token
-     */
-    public void removeLockToken(String token);
-
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavSessionProvider.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavSessionProvider.java
deleted file mode 100644
index 111e641..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavSessionProvider.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav;
-
-/**
- * <code>DavSessionProvider</code> is an interface for components that
- * can initiate and complete {@link DavSession}s. A provider is
- * responsible for supplying references from a {@link WebdavRequest}
- * to a {@link DavSession} when acquired and removing the references
- * when released.
-
- */
-public interface DavSessionProvider {
-
-    /**
-     * Acquires a DavSession. Upon success, the WebdavRequest will
-     * reference that session.
-     *
-     * A session will not be available if an exception is thrown.
-     *
-     * @param request
-     * @return <code>true</code> if the session was attached to the request;
-     *         <code>false</code> otherwise.
-     * @throws DavException if a problem occurred while obtaining the session
-     */
-    public boolean attachSession(WebdavRequest request) throws DavException;
-
-    /**
-     * Releases the reference from the request to the session.
-     *
-     * @param request
-     */
-    public void releaseSession(WebdavRequest request);
-}
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/MultiStatus.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/MultiStatus.java
deleted file mode 100644
index 8133952..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/MultiStatus.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav;
-
-import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
-import org.apache.jackrabbit.webdav.xml.XmlSerializable;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.apache.jackrabbit.webdav.xml.ElementIterator;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-import java.util.Iterator;
-import java.util.HashMap;
-
-/**
- * MultiStatus representing the content of a multistatus response body and
- * allows to retrieve the Xml representation.
- */
-public class MultiStatus implements DavConstants, XmlSerializable {
-
-    /**
-     * Map collecting the responses for this multistatus, where every href must
-     * only occure one single time.
-     */
-    private HashMap responses = new HashMap();
-
-    /**
-     * A general response description at the multistatus top level is used to
-     * provide a general message describing the overarching nature of the response.
-     * If this value is available an application may use it instead of
-     * presenting the individual response descriptions contained within the
-     * responses.
-     */
-    private String responseDescription;
-
-    /**
-     * Add response(s) to this multistatus, in order to build a multistatus for
-     * responding to a PROPFIND request.
-     *
-     * @param resource The resource to add property from
-     * @param propNameSet The requested property names of the PROPFIND request
-     * @param propFindType
-     * @param depth
-     */
-    public void addResourceProperties(DavResource resource, DavPropertyNameSet propNameSet,
-				      int propFindType, int depth) {
-	addResponse(new MultiStatusResponse(resource, propNameSet, propFindType));
-	if (depth > 0) {
-	    DavResourceIterator iter = resource.getMembers();
-	    while (iter.hasNext()) {
-		addResourceProperties(iter.nextResource(), propNameSet, propFindType, depth-1);
-	    }
-	}
-    }
-
-    /**
-     * Add response(s) to this multistatus, in order to build a multistatus e.g.
-     * in order to respond to a PROPFIND request. Please note, that in terms
-     * of PROPFIND, this method would correspond to a
-     * {@link DavConstants#PROPFIND_BY_PROPERTY} propfind type.
-     *
-     * @param resource The resource to add property from
-     * @param propNameSet The requested property names of the PROPFIND request
-     * @param depth
-     * @see #addResourceProperties(DavResource, DavPropertyNameSet, int, int) for
-     * the corresponding method that allows to specify the type explicitely.
-     */
-    public void addResourceProperties(DavResource resource, DavPropertyNameSet propNameSet,
-				      int depth) {
-	addResourceProperties(resource, propNameSet, PROPFIND_BY_PROPERTY, depth);
-    }
-
-    /**
-     * Add response(s) to this multistatus, in order to build a multistatus
-     * as returned for COPY, MOVE, LOCK or DELETE requests resulting in an error
-     * with a resource other than the resource identified in the Request-URI.
-     *
-     * @param resource
-     * @param status
-     * @param depth
-     */
-    public void addResourceStatus(DavResource resource, int status, int depth) {
-	addResponse(new MultiStatusResponse(resource.getHref(), status));
-	if (depth > 0) {
-	    DavResourceIterator iter = resource.getMembers();
-	    while (iter.hasNext()) {
-		addResourceStatus(iter.nextResource(), status, depth-1);
-	    }
-	}
-    }
-
-    /**
-     * Add a <code>MultiStatusResponse</code> element to this <code>MultiStatus</code>
-     *
-     * @param response
-     */
-    public void addResponse(MultiStatusResponse response) {
-	responses.put(response.getHref(), response);
-    }
-
-    /**
-     * Returns the multistatus responses present as array.
-     *
-     * @return array of all {@link MultiStatusResponse responses} present in this
-     * multistatus.
-     */
-    public MultiStatusResponse[] getResponses() {
-	return (MultiStatusResponse[]) responses.values().toArray(new MultiStatusResponse[responses.size()]);
-    }
-
-    /**
-     * Set the response description.
-     *
-     * @param responseDescription
-     */
-    public void setResponseDescription(String responseDescription) {
-        this.responseDescription = responseDescription;
-    }
-
-    /**
-     * Returns the response description.
-     *
-     * @return responseDescription
-     */
-    public String getResponseDescription() {
-	return responseDescription;
-    }
-
-    /**
-     * Return the Xml representation of this <code>MultiStatus</code>.
-     *
-     * @return Xml document
-     * @param document
-     */
-    public Element toXml(Document document) {
-	Element multistatus = DomUtil.createElement(document, XML_MULTISTATUS, NAMESPACE);
-        Iterator it = responses.values().iterator();
-	while(it.hasNext()) {
-	    multistatus.appendChild(((MultiStatusResponse)it.next()).toXml(document));
-	}
-        if (responseDescription != null) {
-            Element respDesc = DomUtil.createElement(document, XML_RESPONSEDESCRIPTION, NAMESPACE, responseDescription);
-            multistatus.appendChild(respDesc);
-        }
-	return multistatus;
-    }
-
-    /**
-     * Build a <code>MultiStatus</code> from the specified xml element.
-     *
-     * @param multistatusElement
-     * @return new <code>MultiStatus</code> instance.
-     * @throws IllegalArgumentException if the given document is <code>null</code>
-     * or does not provide the required element.
-     */
-    public static MultiStatus createFromXml(Element multistatusElement) {
-	if (!DomUtil.matches(multistatusElement, XML_MULTISTATUS, NAMESPACE)) {
-	    throw new IllegalArgumentException("DAV:multistatus element expected.");
-	}
-
-        MultiStatus multistatus = new MultiStatus();
-
-        ElementIterator it = DomUtil.getChildren(multistatusElement, XML_RESPONSE, NAMESPACE);
-	while (it.hasNext()) {
-            Element respElem = it.nextElement();
-            MultiStatusResponse response = MultiStatusResponse.createFromXml(respElem);
-            multistatus.addResponse(response);
-	}
-
-	// optional response description on the multistatus element
-	multistatus.setResponseDescription(DomUtil.getChildText(multistatusElement, XML_RESPONSEDESCRIPTION, NAMESPACE));
-        return multistatus;
-    }
-}
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/MultiStatusResponse.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/MultiStatusResponse.java
deleted file mode 100644
index 3da2020..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/MultiStatusResponse.java
+++ /dev/null
@@ -1,416 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav;
-
-import org.apache.jackrabbit.webdav.xml.XmlSerializable;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.apache.jackrabbit.webdav.xml.ElementIterator;
-import org.apache.jackrabbit.webdav.property.DavProperty;
-import org.apache.jackrabbit.webdav.property.DefaultDavProperty;
-import org.apache.jackrabbit.webdav.property.DavPropertyName;
-import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
-import org.apache.jackrabbit.webdav.property.PropContainer;
-import org.apache.jackrabbit.webdav.property.DavPropertyIterator;
-import org.apache.jackrabbit.webdav.property.DavPropertyNameIterator;
-import org.apache.jackrabbit.webdav.property.DavPropertySet;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-import java.util.HashMap;
-import java.util.Iterator;
-
-/**
- * <code>Response</code>...
- */
-public class MultiStatusResponse implements XmlSerializable, DavConstants {
-
-    private static final int TYPE_PROPSTAT = 0;
-    private static final int TYPE_HREFSTATUS = 1;
-
-    /**
-     * The type of MultiStatusResponse
-     */
-    private final int type;
-
-    /**
-     * The content the 'href' element for this response
-     */
-    private final String href;
-
-    /**
-     * An optional response description.
-     */
-    private final String responseDescription;
-
-    /**
-     * Type of MultiStatus response: Href + Status
-     */
-    private Status status;
-
-    /**
-     * Type of MultiStatus response: PropStat
-     * Hashmap containing all status
-     */
-    private HashMap statusMap = new HashMap();
-
-    private MultiStatusResponse(String href, String responseDescription, int type) {
-        if (!isValidHref(href)) {
-            throw new IllegalArgumentException("Invalid href ('" + href + "')");
-        }
-        this.href = href;
-        this.responseDescription = responseDescription;
-        this.type = type;
-    }
-
-    /**
-     * Constructs an WebDAV multistatus response
-     *
-     * @param href
-     * @param status
-     * @param responseDescription
-     */
-    public MultiStatusResponse(String href, Status status, String responseDescription) {
-        this(href, responseDescription, TYPE_HREFSTATUS);
-        if (status == null) {
-            throw new IllegalArgumentException("Status must not be null in case of a multistatus reponse that consists of href + status only.");
-        }
-        this.status = status;
-    }
-
-    /**
-     * Constructs an WebDAV multistatus response for a given resource. This
-     * would be used by COPY, MOVE, DELETE, LOCK that require a multistatus
-     * in case of error with a resource other than the resource identified in the
-     * Request-URI.<br>
-     * The response description is set to <code>null</code>.
-     *
-     * @param href
-     * @param statusCode
-     */
-    public MultiStatusResponse(String href, int statusCode) {
-        this(href, statusCode, null);
-    }
-
-    /**
-     * Constructs an WebDAV multistatus response for a given resource. This
-     * would be used by COPY, MOVE, DELETE, LOCK that require a multistatus
-     * in case of error with a resource other than the resource identified in the
-     * Request-URI.
-     *
-     * @param href
-     * @param statusCode
-     * @param responseDescription
-     */
-    public MultiStatusResponse(String href, int statusCode, String responseDescription) {
-        this(href, new Status(statusCode), responseDescription);
-    }
-
-    /**
-     * Constructs an empty WebDAV multistatus response of type 'PropStat'
-     */
-    public MultiStatusResponse(String href, String responseDescription) {
-        this(href, responseDescription, TYPE_PROPSTAT);
-    }
-
-    /**
-     * Constucts a WebDAV multistatus response and retrieves the resource properties
-     * according to the given <code>DavPropertyNameSet</code>.
-     *
-     * @param resource
-     * @param propNameSet
-     */
-    public MultiStatusResponse(DavResource resource, DavPropertyNameSet propNameSet) {
-        this(resource, propNameSet, PROPFIND_BY_PROPERTY);
-    }
-
-    /**
-     * Constucts a WebDAV multistatus response and retrieves the resource properties
-     * according to the given <code>DavPropertyNameSet</code>. It adds all known
-     * property to the '200' set, while unknown properties are added to the '404' set.
-     * <p/>
-     * Note, that the set of property names is ignored in case of a {@link #PROPFIND_ALL_PROP}
-     * and {@link #PROPFIND_PROPERTY_NAMES} propFindType.
-     *
-     * @param resource     The resource to retrieve the property from
-     * @param propNameSet  The property name set as obtained from the request body.
-     * @param propFindType any of the following values: {@link #PROPFIND_ALL_PROP},
-     *                     {@link #PROPFIND_BY_PROPERTY}, {@link #PROPFIND_PROPERTY_NAMES}
-     */
-    public MultiStatusResponse(DavResource resource, DavPropertyNameSet propNameSet,
-                               int propFindType) {
-        this(resource.getHref(), null, TYPE_PROPSTAT);
-
-        // only property names requested
-        if (propFindType == PROPFIND_PROPERTY_NAMES) {
-            PropContainer status200 = getPropContainer(DavServletResponse.SC_OK, true);
-            DavPropertyName[] propNames = resource.getPropertyNames();
-            for (int i = 0; i < propNames.length; i++) {
-                status200.addContent(propNames[i]);
-            }
-            // all or a specified set of property and their values requested.
-        } else {
-            PropContainer status200 = getPropContainer(DavServletResponse.SC_OK, false);
-            // clone set of property, since several resources could use this again
-            propNameSet = new DavPropertyNameSet(propNameSet);
-            // Add requested properties or all non-protected properties
-            DavPropertyIterator iter = resource.getProperties().iterator();
-            while (iter.hasNext()) {
-                DavProperty property = iter.nextProperty();
-                if ((propFindType == PROPFIND_ALL_PROP && !property.isProtected()) || propNameSet.remove(property.getName())) {
-                    status200.addContent(property);
-                }
-            }
-
-            if (!propNameSet.isEmpty() && propFindType != PROPFIND_ALL_PROP) {
-                PropContainer status404 = getPropContainer(DavServletResponse.SC_NOT_FOUND, true);
-                DavPropertyNameIterator iter1 = propNameSet.iterator();
-                while (iter1.hasNext()) {
-                    DavPropertyName propName = iter1.nextPropertyName();
-                    status404.addContent(propName);
-                }
-            }
-        }
-    }
-
-    /**
-     * Returns the href
-     *
-     * @return href
-     * @see MultiStatusResponse#getHref()
-     */
-    public String getHref() {
-        return href;
-    }
-
-    /**
-     * @return responseDescription
-     * @see MultiStatusResponse#getResponseDescription()
-     */
-    public String getResponseDescription() {
-        return responseDescription;
-    }
-
-    /**
-     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(org.w3c.dom.Document)
-     * @param document
-     */
-    public Element toXml(Document document) {
-        Element response = DomUtil.createElement(document, XML_RESPONSE, NAMESPACE);
-        // add '<href>'
-        response.appendChild(DomUtil.hrefToXml(getHref(), document));
-        if (type == TYPE_PROPSTAT) {
-            // add '<propstat>' elements
-            Iterator iter = statusMap.keySet().iterator();
-            while (iter.hasNext()) {
-                Integer statusKey = (Integer) iter.next();
-                Status status = new Status(statusKey.intValue());
-                PropContainer propCont = (PropContainer) statusMap.get(statusKey);
-
-                Element propstat = DomUtil.createElement(document, XML_PROPSTAT, NAMESPACE);
-                propstat.appendChild(propCont.toXml(document));
-                propstat.appendChild(status.toXml(document));
-                response.appendChild(propstat);
-            }
-        } else {
-            // add a single '<status>' element
-            // NOTE: a href+status response cannot be created with 'null' status
-            response.appendChild(status.toXml(document));
-        }
-        // add the optional '<responsedescription>' element
-        String description = getResponseDescription();
-        if (description != null) {
-            Element desc = DomUtil.createElement(document, XML_RESPONSEDESCRIPTION, NAMESPACE);
-            DomUtil.setText(desc, description);
-            response.appendChild(desc);
-        }
-        return response;
-    }
-    //----------------------------------------------< type specific methods >---
-    /**
-     * Adds a property to this response '200' propstat set.
-     *
-     * @param property the property to add
-     */
-    public void add(DavProperty property) {
-        checkType(TYPE_PROPSTAT);
-        PropContainer status200 = getPropContainer(DavServletResponse.SC_OK, false);
-        status200.addContent(property);
-    }
-
-    /**
-     * Adds a property name to this response '200' propstat set.
-     *
-     * @param propertyName the property name to add
-     */
-    public void add(DavPropertyName propertyName) {
-        checkType(TYPE_PROPSTAT);
-        PropContainer status200 = getPropContainer(DavServletResponse.SC_OK, true);
-        status200.addContent(propertyName);
-    }
-
-    /**
-     * Adds a property to this response
-     *
-     * @param property the property to add
-     * @param status   the status of the response set to select
-     */
-    public void add(DavProperty property, int status) {
-        checkType(TYPE_PROPSTAT);
-        PropContainer propCont = getPropContainer(status, false);
-        propCont.addContent(property);
-    }
-
-    /**
-     * Adds a property name to this response
-     *
-     * @param propertyName the property name to add
-     * @param status       the status of the response set to select
-     */
-    public void add(DavPropertyName propertyName, int status) {
-        checkType(TYPE_PROPSTAT);
-        PropContainer propCont = getPropContainer(status, true);
-        propCont.addContent(propertyName);
-    }
-
-    /**
-     *
-     * @param status
-     * @return
-     */
-    private PropContainer getPropContainer(int status, boolean forNames) {
-        Integer statusKey = new Integer(status);
-        PropContainer propContainer;
-        Object entry = statusMap.get(statusKey);
-        if (entry == null) {
-            if (forNames) {
-                propContainer = new DavPropertyNameSet();
-            } else {
-                propContainer = new DavPropertySet();
-            }
-            statusMap.put(statusKey, propContainer);
-        } else {
-            propContainer = (PropContainer) entry;
-                }
-        return propContainer;
-            }
-
-    private void checkType(int type) {
-        if (this.type != type) {
-            throw new IllegalStateException("The given MultiStatusResponse is not of the required type.");
-        }
-    }
-
-    /**
-     * Get properties present in this response for the given status code. In case
-     * this MultiStatusResponse does not represent a 'propstat' response, always
-     * an empty {@link DavPropertySet} will be returned.
-     *
-     * @param status
-     * @return property set
-     */
-    public DavPropertySet getProperties(int status) {
-        Integer key = new Integer(status);
-        if (statusMap.containsKey(key)) {
-            Object mapEntry = statusMap.get(key);
-            if (mapEntry != null && mapEntry instanceof DavPropertySet) {
-                return (DavPropertySet)mapEntry;
-            }
-        }
-        return new DavPropertySet();
-    }
-
-    /**
-     * Get property names present in this response for the given status code. In case
-     * this MultiStatusResponse does not represent a 'propstat' response, always
-     * an empty {@link DavPropertyNameSet} will be returned.
-     *
-     * @param status
-     * @return property names
-     */
-    public DavPropertyNameSet getPropertyNames(int status) {
-        Integer key = new Integer(status);
-        if (statusMap.containsKey(key)) {
-            Object mapEntry = statusMap.get(key);
-            if (mapEntry != null && mapEntry instanceof DavPropertyNameSet) {
-                return (DavPropertyNameSet)mapEntry;
-        }
-                    }
-        return new DavPropertyNameSet();
-    }
-
-    /**
-     * Build a new response object from the given xml element.
-     *
-     * @param responseElement
-     * @return new <code>MultiStatusResponse</code> instance
-     * @throws IllegalArgumentException if the specified element is <code>null</code>
-     * or not a DAV:response element or if the mandatory DAV:href child is
-     * missing.
-     */
-    public static MultiStatusResponse createFromXml(Element responseElement) {
-        if (!DomUtil.matches(responseElement, XML_RESPONSE, NAMESPACE)) {
-            throw new IllegalArgumentException("DAV:response element required.");
-        }
-        String href = DomUtil.getChildTextTrim(responseElement, XML_HREF, NAMESPACE);
-        if (href == null) {
-            throw new IllegalArgumentException("DAV:response element must contain a DAV:href element expected.");
-        }
-        String statusLine = DomUtil.getChildText(responseElement, XML_STATUS, NAMESPACE);
-        String responseDescription = DomUtil.getChildText(responseElement, XML_RESPONSEDESCRIPTION, NAMESPACE);
-
-        MultiStatusResponse response;
-        if (statusLine != null) {
-            Status status = Status.parse(statusLine);
-            response = new MultiStatusResponse(href, status, responseDescription);
-        } else {
-            response = new MultiStatusResponse(href, responseDescription, TYPE_PROPSTAT);
-        // read propstat elements
-            ElementIterator it = DomUtil.getChildren(responseElement, XML_PROPSTAT, NAMESPACE);
-        while (it.hasNext()) {
-                Element propstat = it.nextElement();
-                String propstatus = DomUtil.getChildText(propstat, XML_STATUS, NAMESPACE);
-                Element prop = DomUtil.getChildElement(propstat, XML_PROP, NAMESPACE);
-                if (propstatus != null && prop != null) {
-                    int statusCode = Status.parse(propstatus).getStatusCode();
-                    ElementIterator propIt = DomUtil.getChildren(prop);
-                    while (propIt.hasNext()) {
-                        Element el = propIt.nextElement();
-                        // current elem is now either a dav property xml representation
-                        // or the xml representation of a davpropertyname
-                        if (DomUtil.hasContent(el)) {
-                            // property
-                            DavProperty property = DefaultDavProperty.createFromXml(el);
-                            response.add(property, statusCode);
-                        } else {
-                            // property-name only
-                            DavPropertyName propName = DavPropertyName.createFromXml(el);
-                            response.add(propName, statusCode);
-                        }
-                    }
-                }
-            }
-        }
-        return response;
-    }
-
-    /**
-     * @param href
-     * @return false if the given href is <code>null</code> or empty string.
-     */
-    private static boolean isValidHref(String href) {
-        return href != null && !"".equals(href);
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/Status.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/Status.java
deleted file mode 100644
index 23c609e..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/Status.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.xml.XmlSerializable;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-/**
- * <code>Status</code> encapsulating the 'status' present in multistatus
- * responses.
- */
-public class Status implements DavConstants, XmlSerializable{
-
-    private static Logger log = Logger.getLogger(Status.class);
-
-    private final String version;
-    private final int code;
-    private final String phrase;
-
-    public Status(int code) {
-        version = "HTTP/1.1";
-        this.code = code;
-        phrase = DavException.getStatusPhrase(code);
-    }
-
-    public Status(String version, int code, String phrase) {
-        this.version = version;
-        this.code = code;
-        this.phrase = phrase;
-    }
-
-    public int getStatusCode() {
-        return code;
-    }
-
-    /**
-     * @see XmlSerializable#toXml(Document)
-     */
-    public Element toXml(Document document) {
-        String statusLine = version + " " + code + " " + phrase;
-        Element e = DomUtil.createElement(document, XML_STATUS, NAMESPACE);
-        DomUtil.setText(e, statusLine);
-        return e;
-    }
-
-    /**
-     * Parse the given status line and return a new <code>Status</code> object.
-     *
-     * @param statusLine
-     * @return a new <code>Status</code>
-     */
-    public static Status parse(String statusLine) {
-        if (statusLine == null) {
-            throw new IllegalArgumentException("Unable to parse status line from null xml element.");
-        }
-        Status status;
-
-        // code copied from org.apache.commons.httpclient.StatusLine
-        int length = statusLine.length();
-        int at = 0;
-        int start = 0;
-        try {
-            while (Character.isWhitespace(statusLine.charAt(at))) {
-                ++at;
-                ++start;
-            }
-            if (!"HTTP".equals(statusLine.substring(at, at += 4))) {
-                log.warn("Status-Line '" + statusLine + "' does not start with HTTP");
-            }
-            //handle the HTTP-Version
-            at = statusLine.indexOf(" ", at);
-            if (at <= 0) {
-                log.warn("Unable to parse HTTP-Version from the status line: '" + statusLine + "'");
-            }
-            String version = (statusLine.substring(start, at)).toUpperCase();
-            //advance through spaces
-            while (statusLine.charAt(at) == ' ') {
-                at++;
-            }
-            //handle the Status-Code
-            int code;
-            int to = statusLine.indexOf(" ", at);
-            if (to < 0) {
-                to = length;
-            }
-            try {
-                code = Integer.parseInt(statusLine.substring(at, to));
-            } catch (NumberFormatException e) {
-                throw new IllegalArgumentException("Unable to parse status code from status line: '" + statusLine + "'");
-            }
-            //handle the Reason-Phrase
-            String phrase = "";
-            at = to + 1;
-            if (at < length) {
-                phrase = statusLine.substring(at).trim();
-            }
-
-            status = new Status(version, code, phrase);
-
-        } catch (StringIndexOutOfBoundsException e) {
-            throw new IllegalArgumentException("Status-Line '" + statusLine + "' is not valid");
-        }
-        return status;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/WebdavRequest.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/WebdavRequest.java
deleted file mode 100644
index 9e5bba7..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/WebdavRequest.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav;
-
-import org.apache.jackrabbit.webdav.observation.ObservationDavServletRequest;
-import org.apache.jackrabbit.webdav.ordering.OrderingDavServletRequest;
-import org.apache.jackrabbit.webdav.transaction.TransactionDavServletRequest;
-import org.apache.jackrabbit.webdav.version.DeltaVServletRequest;
-
-/**
- * The empty <code>WebdavRequest</code> interface collects the functionality
- * defined by {@link org.apache.jackrabbit.webdav.DavServletRequest} encapsulting
- * the core Webdav specification (RFC 2518) as well as the various extensions
- * used for observation and transaction support, ordering of collections, search
- * and versioning.
- */
-public interface WebdavRequest extends DavServletRequest,
-        ObservationDavServletRequest, OrderingDavServletRequest,
-        TransactionDavServletRequest, DeltaVServletRequest {
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/WebdavRequestImpl.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/WebdavRequestImpl.java
deleted file mode 100644
index 524c33e..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/WebdavRequestImpl.java
+++ /dev/null
@@ -1,897 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav;
-
-import org.apache.jackrabbit.webdav.header.CodedUrlHeader;
-import org.apache.jackrabbit.webdav.header.DepthHeader;
-import org.apache.jackrabbit.webdav.header.IfHeader;
-import org.apache.jackrabbit.webdav.header.LabelHeader;
-import org.apache.jackrabbit.webdav.header.OverwriteHeader;
-import org.apache.jackrabbit.webdav.header.TimeoutHeader;
-import org.apache.jackrabbit.webdav.lock.LockInfo;
-import org.apache.jackrabbit.webdav.lock.Scope;
-import org.apache.jackrabbit.webdav.lock.Type;
-import org.apache.jackrabbit.webdav.observation.ObservationConstants;
-import org.apache.jackrabbit.webdav.observation.SubscriptionInfo;
-import org.apache.jackrabbit.webdav.ordering.OrderPatch;
-import org.apache.jackrabbit.webdav.ordering.OrderingConstants;
-import org.apache.jackrabbit.webdav.ordering.Position;
-import org.apache.jackrabbit.webdav.property.DavProperty;
-import org.apache.jackrabbit.webdav.property.DavPropertyName;
-import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
-import org.apache.jackrabbit.webdav.property.DavPropertySet;
-import org.apache.jackrabbit.webdav.property.DefaultDavProperty;
-import org.apache.jackrabbit.webdav.transaction.TransactionConstants;
-import org.apache.jackrabbit.webdav.transaction.TransactionInfo;
-import org.apache.jackrabbit.webdav.version.LabelInfo;
-import org.apache.jackrabbit.webdav.version.MergeInfo;
-import org.apache.jackrabbit.webdav.version.OptionsInfo;
-import org.apache.jackrabbit.webdav.version.UpdateInfo;
-import org.apache.jackrabbit.webdav.version.report.ReportInfo;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.apache.jackrabbit.webdav.xml.ElementIterator;
-import org.apache.log4j.Logger;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.xml.sax.SAXException;
-
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletInputStream;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.security.Principal;
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.Locale;
-import java.util.Map;
-
-/**
- * <code>WebdavRequestImpl</code>...
- */
-public class WebdavRequestImpl implements WebdavRequest, DavConstants {
-
-    private static Logger log = Logger.getLogger(WebdavRequestImpl.class);
-    private static final DocumentBuilderFactory BUILDER_FACTORY = DocumentBuilderFactory.newInstance();
-
-    private final HttpServletRequest httpRequest;
-    private final DavLocatorFactory factory;
-    private final IfHeader ifHeader;
-    private final String hrefPrefix;
-
-    private DavSession session;
-
-    private int propfindType = PROPFIND_ALL_PROP;
-    private DavPropertyNameSet propfindProps;
-    private DavPropertySet proppatchSet;
-    private DavPropertyNameSet proppatchRemove;
-
-    /**
-     * Creates a new <code>DavServletRequest</code> with the given parameters.
-     *
-     * @param httpRequest
-     * @param factory
-     */
-    public WebdavRequestImpl(HttpServletRequest httpRequest, DavLocatorFactory factory) {
-        this.httpRequest = httpRequest;
-        this.factory = factory;
-        this.ifHeader = new IfHeader(httpRequest);
-
-        String host = getHeader("Host");
-        String scheme = getScheme();
-        hrefPrefix = scheme + "://" + host + getContextPath();
-    }
-
-    /**
-     * Sets the session field and adds all lock tokens present with either the
-     * Lock-Token header or the If header to the given session object.
-     *
-     * @param session
-     * @see DavServletRequest#setDavSession(DavSession)
-     */
-    public void setDavSession(DavSession session) {
-        this.session = session;
-        // set lock-tokens from header to the current session
-        if (session != null && session.getRepositorySession() != null) {
-            String lt = getLockToken();
-            if (lt != null) {
-                session.addLockToken(lt);
-            }
-            // add all token present in the the If header to the session as well.
-            Iterator it = ifHeader.getAllTokens();
-            while (it.hasNext()) {
-                String ifHeaderToken = (String) it.next();
-                session.addLockToken(ifHeaderToken);
-            }
-        }
-    }
-
-    /**
-     * @see DavServletRequest#getDavSession()
-     */
-    public DavSession getDavSession() {
-        return session;
-    }
-
-    /**
-     * Return a <code>DavResourceLocator</code> representing the request handle.
-     *
-     * @return locator of the requested resource
-     * @see DavServletRequest#getRequestLocator()
-     */
-    public DavResourceLocator getRequestLocator() {
-        String path = getRequestURI();
-        String ctx = getContextPath();
-        if (path.startsWith(ctx)) {
-            path = path.substring(ctx.length());
-        }
-        return factory.createResourceLocator(hrefPrefix, path);
-    }
-
-    /**
-     * Parse the destination header field and return the path of the destination
-     * resource.
-     *
-     * @return path of the destination resource.
-     * @see #HEADER_DESTINATION
-     * @see DavServletRequest#getDestinationLocator
-     */
-    public DavResourceLocator getDestinationLocator() {
-        String destination = httpRequest.getHeader(HEADER_DESTINATION);
-        if (destination != null) {
-            try {
-                URI uri = new URI(destination);
-                if (uri.getAuthority().equals(httpRequest.getHeader("Host"))) {
-                    destination = uri.getRawPath();
-                }
-            } catch (URISyntaxException e) {
-                log.debug("Destination is path is not a valid URI (" + e.getMessage() + ".");
-                int pos = destination.lastIndexOf(":");
-                if (pos > 0) {
-                    destination = destination.substring(destination.indexOf("/", pos));
-                    log.debug("Tried to retrieve resource destination path from invalid URI: " + destination);
-                }
-            }
-            // cut off the context path
-            String contextPath = httpRequest.getContextPath();
-            if (destination.startsWith(contextPath)) {
-                destination = destination.substring(contextPath.length());
-            }
-        }
-        return factory.createResourceLocator(hrefPrefix, destination);
-    }
-
-    /**
-     * Return true if the overwrite header does not inhibit overwriting.
-     *
-     * @return true if the overwrite header requests 'overwriting'
-     * @see #HEADER_OVERWRITE
-     * @see DavServletRequest#isOverwrite()
-     */
-    public boolean isOverwrite() {
-        return new OverwriteHeader(httpRequest).isOverwrite();
-    }
-
-    /**
-     * @see DavServletRequest#getDepth(int)
-     */
-    public int getDepth(int defaultValue) {
-        return DepthHeader.parse(httpRequest, defaultValue).getDepth();
-    }
-
-    /**
-     * @see DavServletRequest#getDepth()
-     */
-    public int getDepth() {
-        return getDepth(DEPTH_INFINITY);
-    }
-
-    /**
-     * Parse the Timeout header and return a long representing the value.
-     * {@link #UNDEFINED_TIMEOUT} is used as default value if no header
-     * is available or if the parsing fails.
-     *
-     * @return milliseconds indicating length of the timeout.
-     * @see DavServletRequest#getTimeout()
-     * @see TimeoutHeader#parse(javax.servlet.http.HttpServletRequest, long)
-     */
-    public long getTimeout() {
-        return TimeoutHeader.parse(httpRequest, UNDEFINED_TIMEOUT).getTimeout();
-    }
-
-    /**
-     * Retrive the lock token from the 'Lock-Token' header.
-     *
-     * @return String representing the lock token sent in the Lock-Token header.
-     * @throws IllegalArgumentException If the value has not the correct format.
-     * @see #HEADER_LOCK_TOKEN
-     * @see DavServletRequest#getLockToken()
-     */
-    public String getLockToken() {
-        return CodedUrlHeader.parse(httpRequest, HEADER_LOCK_TOKEN).getCodedUrl();
-    }
-
-    /**
-     * @return Xml document
-     * @see DavServletRequest#getRequestDocument()
-     */
-    public Document getRequestDocument() {
-        Document requestDocument = null;
-        /*
-        Don't attempt to parse the body if the contentlength header is 0
-        NOTE: a value of -1 indicates that the length is unknown, thus we have to parse the body.
-        NOTE that http1.1 request using chunked transfer coding will therefore not be detected here
-        */
-        if (httpRequest.getContentLength() == 0) {
-            return requestDocument;
-        }
-            // try to parse the request body
-            try {
-                InputStream in = httpRequest.getInputStream();
-                if (in != null) {
-                BUILDER_FACTORY.setNamespaceAware(true);
-                DocumentBuilder docBuilder = BUILDER_FACTORY.newDocumentBuilder();
-                requestDocument = docBuilder.parse(in);
-                }
-            } catch (IOException e) {
-                if (log.isDebugEnabled()) {
-                    log.debug("Unable to build an XML Document from the request body: " + e.getMessage());
-                }
-        } catch (ParserConfigurationException e) {
-                if (log.isDebugEnabled()) {
-                    log.debug("Unable to build an XML Document from the request body: " + e.getMessage());
-            }
-        } catch (SAXException e) {
-            log.debug("Unable to build an XML Document from the request body: " + e.getMessage());
-        }
-        return requestDocument;
-    }
-
-    /**
-     * Returns the type of PROPFIND as indicated by the request body.
-     *
-     * @return type of the PROPFIND request. Default value is {@link #PROPFIND_ALL_PROP allprops}
-     * @see DavServletRequest#getPropFindType()
-     */
-    public int getPropFindType() throws DavException {
-        if (propfindProps == null) {
-            parsePropFindRequest();
-        }
-        return propfindType;
-    }
-
-    /**
-     * Returns the set of properties requested by the PROPFIND body or an
-     * empty set if the {@link #getPropFindType type} is either 'allprop' or
-     * 'propname'.
-     *
-     * @return set of properties requested by the PROPFIND body or an empty set.
-     * @see DavServletRequest#getPropFindProperties()
-     */
-    public DavPropertyNameSet getPropFindProperties() throws DavException {
-        if (propfindProps == null) {
-            parsePropFindRequest();
-        }
-        return propfindProps;
-    }
-
-    /**
-     * Parse the propfind request body in order to determine the type of the propfind
-     * and the set of requested property.
-     * NOTE: An empty 'propfind' request body will be treated as request for all
-     * property according to the specification.
-     */
-    private void parsePropFindRequest() throws DavException {
-        propfindProps = new DavPropertyNameSet();
-        Document requestDocument = getRequestDocument();
-        // propfind httpRequest with empty body or invalid Xml >> retrieve all property
-        // TODO: invalid XML -> spec requires a 'BAD REQUEST' error code
-        if (requestDocument == null) {
-            return;
-        }
-
-        // propfind httpRequest with invalid body
-        Element root = requestDocument.getDocumentElement();
-        if (!XML_PROPFIND.equals(root.getLocalName())) {
-            log.info("PropFind-Request has no <profind> tag.");
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "PropFind-Request has no <profind> tag.");
-        }
-
-        ElementIterator it = DomUtil.getChildren(root);
-        while (it.hasNext()) {
-            Element child = it.nextElement();
-            String nodeName = child.getLocalName();
-            if (XML_PROP.equals(nodeName)) {
-                propfindType = PROPFIND_BY_PROPERTY;
-                propfindProps = new DavPropertyNameSet(child);
-                break;
-            } else if (XML_PROPNAME.equals(nodeName)) {
-                propfindType = PROPFIND_PROPERTY_NAMES;
-                break;
-            } else if (XML_ALLPROP.equals(nodeName)) {
-                propfindType = PROPFIND_ALL_PROP;
-                break;
-            }
-        }
-    }
-
-    /**
-     * Return the list of 'set' entries in the PROPPATCH request body. The list
-     * is empty if the request body could not be parsed or if the request body did
-     * not contain any 'set' elements.
-     *
-     * @return the list of 'set' entries in the PROPPATCH request body
-     * @see DavServletRequest#getPropPatchSetProperties()
-     */
-    public DavPropertySet getPropPatchSetProperties() throws DavException {
-        if (proppatchSet == null) {
-            parsePropPatchRequest();
-        }
-        return proppatchSet;
-    }
-
-    /**
-     * Return the list of 'remove' entries in the PROPPATCH request body. The list
-     * is empty if the request body could not be parsed or if the request body did
-     * not contain any 'remove' elements.
-     *
-     * @return the list of 'remove' entries in the PROPPATCH request body
-     * @see DavServletRequest#getPropPatchRemoveProperties()
-     */
-    public DavPropertyNameSet getPropPatchRemoveProperties() throws DavException {
-        if (proppatchRemove == null) {
-            parsePropPatchRequest();
-        }
-        return proppatchRemove;
-    }
-
-    /**
-     * Parse the PROPPATCH request body.
-     */
-    private void parsePropPatchRequest() throws DavException {
-
-        proppatchSet = new DavPropertySet();
-        proppatchRemove = new DavPropertyNameSet();
-        Document requestDocument = getRequestDocument();
-
-        if (requestDocument == null) {
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "Invalid request body.");
-        }
-
-        Element root = requestDocument.getDocumentElement();
-        if (!DomUtil.matches(root, XML_PROPERTYUPDATE, NAMESPACE)) {
-            // we should also check for correct namespace
-            log.warn("PropPatch-Request has no <propertyupdate> tag.");
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "PropPatch-Request has no <propertyupdate> tag.");
-        }
-
-        ElementIterator it = DomUtil.getChildren(root, XML_SET, NAMESPACE);
-                while (it.hasNext()) {
-            Element propEl = DomUtil.getChildElement(it.nextElement(), XML_PROP, NAMESPACE);
-            if (propEl != null) {
-                ElementIterator properties = DomUtil.getChildren(propEl);
-                while (properties.hasNext()) {
-                   proppatchSet.add(DefaultDavProperty.createFromXml(properties.nextElement()));
-                }
-            }
-        }
-
-        // get <remove> properties
-        it = DomUtil.getChildren(root, XML_REMOVE, NAMESPACE);
-                while (it.hasNext()) {
-            Element propEl = DomUtil.getChildElement(it.nextElement(), XML_PROP, NAMESPACE);
-            if (propEl != null) {
-                ElementIterator names = DomUtil.getChildren(propEl);
-                while (names.hasNext()) {
-                    proppatchRemove.add(DavPropertyName.createFromXml(names.nextElement()));
-                }
-            }
-        }
-    }
-
-    /**
-     * {@link LockInfo} object encapsulating the information passed with a LOCK
-     * request if the LOCK request body was valid. If the request body is
-     * missing a 'refresh lock' request is assumed. The {@link LockInfo}
-     * then only provides timeout and isDeep property and returns true on
-     * {@link org.apache.jackrabbit.webdav.lock.LockInfo#isRefreshLock()}
-     *
-     * @return lock info object or <code>null</code> if an error occured while
-     *         parsing the request body.
-     * @see DavServletRequest#getLockInfo()
-     */
-    public LockInfo getLockInfo() {
-        LockInfo lockInfo = null;
-        boolean isDeep = (getDepth(DEPTH_INFINITY) == DEPTH_INFINITY);
-        Document requestDocument = getRequestDocument();
-        // check if XML request body is present. It SHOULD have one for
-        // 'create Lock' request and missing for a 'refresh Lock' request
-        if (requestDocument != null) {
-            Element root = requestDocument.getDocumentElement();
-            if (root.getLocalName().equals(XML_LOCKINFO)) {
-                lockInfo = new LockInfo(root, getTimeout(), isDeep);
-            } else {
-                log.debug("Lock-Request has no <lockinfo> tag.");
-            }
-        } else {
-            lockInfo = new LockInfo(null, getTimeout(), isDeep);
-        }
-        return lockInfo;
-    }
-
-    /**
-     * Test if the if header matches the given resource. The comparison is
-     * made with the {@link DavResource#getHref()
-     * resource href} and the token returned from an exclusive write lock present on
-     * the resource.<br>
-     * NOTE: If either the If header or the resource is <code>null</code> or if
-     * the resource has not applied an exclusive write lock the preconditions are met.
-     * If in contrast the lock applied to the given resource returns a
-     * <code>null</code> lock token (e.g. for security reasons) or a lock token
-     * that does not match, the method will return false.
-     *
-     * @param resource Webdav resources being operated on
-     * @return true if the test is successful and the preconditions for the
-     *         request processing are fulfilled.
-     * @see DavServletRequest#matchesIfHeader(DavResource)
-     * @see IfHeader#matches(String, String, String)
-     * @see DavResource#hasLock(org.apache.jackrabbit.webdav.lock.Type, org.apache.jackrabbit.webdav.lock.Scope)
-     * @see org.apache.jackrabbit.webdav.lock.ActiveLock#getToken()
-     */
-    public boolean matchesIfHeader(DavResource resource) {
-        // no ifheader, no resource or no write lock on resource
-        // >> preconditions ok so far
-        if (!ifHeader.hasValue() || resource == null || !resource.hasLock(Type.WRITE, Scope.EXCLUSIVE)) {
-            return true;
-        }
-
-        boolean isMatching = false;
-        String lockToken = resource.getLock(Type.WRITE, Scope.EXCLUSIVE).getToken();
-        if (lockToken != null) {
-            isMatching = matchesIfHeader(resource.getHref(), lockToken, getStrongETag(resource));
-        } // else: lockToken is null >> the if-header will not match.
-
-        return isMatching;
-    }
-
-    /**
-     * @see DavServletRequest#matchesIfHeader(String, String, String)
-     * @see IfHeader#matches(String, String, String)
-     */
-    public boolean matchesIfHeader(String href, String token, String eTag) {
-        return ifHeader.matches(href, token, isStrongETag(eTag) ?  eTag : "");
-    }
-
-    /**
-     * Returns the strong etag present on the given resource or empty string
-     * if either the resource does not provide any etag or if the etag is weak.
-     *
-     * @param resource
-     * @return strong etag or empty string.
-     */
-    private String getStrongETag(DavResource resource) {
-        DavProperty prop = resource.getProperty(DavPropertyName.GETETAG);
-        if (prop != null && prop.getValue() != null) {
-            String etag = prop.getValue().toString();
-            if (isStrongETag(etag)) {
-                return etag;
-            }
-        }
-        // no strong etag available
-        return "";
-    }
-
-    /**
-     * Returns true if the given string represents a strong etag.
-     *
-     * @param eTag
-     * @return true, if its a strong etag
-     */
-    private boolean isStrongETag(String eTag) {
-        return eTag != null && eTag.length() > 0 && !eTag.startsWith("W\\");
-    }
-
-    //-----------------------------< TransactionDavServletRequest Interface >---
-    /**
-     * @see org.apache.jackrabbit.webdav.transaction.TransactionDavServletRequest#getTransactionId()
-     */
-    public String getTransactionId() {
-        return CodedUrlHeader.parse(httpRequest, TransactionConstants.HEADER_TRANSACTIONID).getCodedUrl();
-    }
-
-    /**
-     * @see org.apache.jackrabbit.webdav.transaction.TransactionDavServletRequest#getTransactionInfo()
-     */
-    public TransactionInfo getTransactionInfo() {
-        Document requestDocument = getRequestDocument();
-        if (requestDocument != null) {
-            try {
-                return new TransactionInfo(requestDocument.getDocumentElement());
-            } catch (IllegalArgumentException e) {
-                log.error(e.getMessage());
-            }
-        }
-        return null;
-    }
-
-    //-----------------------------< ObservationDavServletRequest Interface >---
-    /**
-     * @see org.apache.jackrabbit.webdav.observation.ObservationDavServletRequest#getSubscriptionId()
-     */
-    public String getSubscriptionId() {
-        return CodedUrlHeader.parse(httpRequest, ObservationConstants.HEADER_SUBSCRIPTIONID).getCodedUrl();
-    }
-
-    /**
-     * @see org.apache.jackrabbit.webdav.observation.ObservationDavServletRequest#getSubscriptionInfo()
-     */
-    public SubscriptionInfo getSubscriptionInfo() {
-        Document requestDocument = getRequestDocument();
-        if (requestDocument != null) {
-            Element root = requestDocument.getDocumentElement();
-            if (ObservationConstants.XML_SUBSCRIPTIONINFO.equals(root.getLocalName())) {
-                int depth = getDepth(DEPTH_0);
-                return new SubscriptionInfo(root, getTimeout(), depth == DEPTH_INFINITY);
-            }
-        }
-        return null;
-    }
-
-    //--------------------------------< OrderingDavServletRequest Interface >---
-    /**
-     * @see org.apache.jackrabbit.webdav.ordering.OrderingDavServletRequest#getOrderingType()
-     */
-    public String getOrderingType() {
-        return getHeader(OrderingConstants.HEADER_ORDERING_TYPE);
-    }
-
-    /**
-     * @see org.apache.jackrabbit.webdav.ordering.OrderingDavServletRequest#getPosition()
-     */
-    public Position getPosition() {
-        String h = getHeader(OrderingConstants.HEADER_POSITION);
-        Position pos = null;
-        if (h != null) {
-            String[] typeNSegment = h.split("\\s");
-            if (typeNSegment.length == 2) {
-                try {
-                    pos = new Position(typeNSegment[0], typeNSegment[1]);
-                } catch (IllegalArgumentException e) {
-                    log.error("Cannot parse Position header: " + e.getMessage());
-                }
-            }
-        }
-        return pos;
-    }
-
-    /**
-     * @return <code>OrderPatch</code> object representing the orderpatch request
-     *         body or <code>null</code> if the
-     * @see org.apache.jackrabbit.webdav.ordering.OrderingDavServletRequest#getOrderPatch()
-     */
-    public OrderPatch getOrderPatch() throws DavException {
-        OrderPatch op = null;
-        Document requestDocument = getRequestDocument();
-        if (requestDocument != null) {
-            Element root = requestDocument.getDocumentElement();
-            try {
-                op = OrderPatch.createFromXml(root);
-            } catch (IllegalArgumentException e) {
-                log.error(e.getMessage());
-                throw new DavException(DavServletResponse.SC_BAD_REQUEST);
-            }
-        } else {
-            log.error("Error while building xml document from ORDERPATH request body.");
-        }
-        return op;
-    }
-
-    //-------------------------------------< DeltaVServletRequest interface >---
-    /**
-     * @see org.apache.jackrabbit.webdav.version.DeltaVServletRequest#getLabel()
-     */
-    public String getLabel() {
-        LabelHeader label = LabelHeader.parse(this);
-        if (label != null) {
-            return label.getLabel();
-        }
-        return null;
-    }
-
-    /**
-     * @see org.apache.jackrabbit.webdav.version.DeltaVServletRequest#getLabelInfo()
-     */
-    public LabelInfo getLabelInfo() {
-        LabelInfo lInfo = null;
-        Document requestDocument = getRequestDocument();
-        if (requestDocument != null) {
-            Element root = requestDocument.getDocumentElement();
-            int depth = getDepth(DEPTH_0);
-            try {
-                lInfo = new LabelInfo(root, depth);
-            } catch (IllegalArgumentException e) {
-                log.error(e.getMessage());
-            }
-        }
-        return lInfo;
-    }
-
-    /**
-     * @see org.apache.jackrabbit.webdav.version.DeltaVServletRequest#getMergeInfo()
-     */
-    public MergeInfo getMergeInfo() {
-        MergeInfo mInfo = null;
-        Document requestDocument = getRequestDocument();
-        if (requestDocument != null) {
-            try {
-                mInfo = new MergeInfo(requestDocument.getDocumentElement());
-            } catch (IllegalArgumentException e) {
-                log.error(e.getMessage());
-            }
-        }
-        return mInfo;
-    }
-
-    /**
-     * @see org.apache.jackrabbit.webdav.version.DeltaVServletRequest#getUpdateInfo()
-     */
-    public UpdateInfo getUpdateInfo() {
-        UpdateInfo uInfo = null;
-        Document requestDocument = getRequestDocument();
-        if (requestDocument != null) {
-            try {
-                uInfo = new UpdateInfo(requestDocument.getDocumentElement());
-            } catch (IllegalArgumentException e) {
-                log.error(e.getMessage());
-            }
-        }
-        return uInfo;
-    }
-
-    /**
-     * @see org.apache.jackrabbit.webdav.version.DeltaVServletRequest#getReportInfo()
-     */
-    public ReportInfo getReportInfo() {
-        ReportInfo rInfo = null;
-        Document requestDocument = getRequestDocument();
-        if (requestDocument != null) {
-            rInfo = new ReportInfo(requestDocument.getDocumentElement(), getDepth(DEPTH_0));
-        }
-        return rInfo;
-    }
-
-    /**
-     * @see org.apache.jackrabbit.webdav.version.DeltaVServletRequest#getOptionsInfo()
-     */
-    public OptionsInfo getOptionsInfo() {
-        OptionsInfo info = null;
-        Document requestDocument = getRequestDocument();
-        if (requestDocument != null) {
-            info = OptionsInfo.createFromXml(requestDocument.getDocumentElement());
-        }
-        return info;
-    }
-
-    //---------------------------------------< HttpServletRequest interface >---
-    public String getAuthType() {
-        return httpRequest.getAuthType();
-    }
-
-    public Cookie[] getCookies() {
-        return httpRequest.getCookies();
-    }
-
-    public long getDateHeader(String s) {
-        return httpRequest.getDateHeader(s);
-    }
-
-    public String getHeader(String s) {
-        return httpRequest.getHeader(s);
-    }
-
-    public Enumeration getHeaders(String s) {
-        return httpRequest.getHeaders(s);
-    }
-
-    public Enumeration getHeaderNames() {
-        return httpRequest.getHeaderNames();
-    }
-
-    public int getIntHeader(String s) {
-        return httpRequest.getIntHeader(s);
-    }
-
-    public String getMethod() {
-        return httpRequest.getMethod();
-    }
-
-    public String getPathInfo() {
-        return httpRequest.getPathInfo();
-    }
-
-    public String getPathTranslated() {
-        return httpRequest.getPathTranslated();
-    }
-
-    public String getContextPath() {
-        return httpRequest.getContextPath();
-    }
-
-    public String getQueryString() {
-        return httpRequest.getQueryString();
-    }
-
-    public String getRemoteUser() {
-        return httpRequest.getRemoteUser();
-    }
-
-    public boolean isUserInRole(String s) {
-        return httpRequest.isUserInRole(s);
-    }
-
-    public Principal getUserPrincipal() {
-        return httpRequest.getUserPrincipal();
-    }
-
-    public String getRequestedSessionId() {
-        return httpRequest.getRequestedSessionId();
-    }
-
-    public String getRequestURI() {
-        return httpRequest.getRequestURI();
-    }
-
-    public StringBuffer getRequestURL() {
-        return httpRequest.getRequestURL();
-    }
-
-    public String getServletPath() {
-        return httpRequest.getServletPath();
-    }
-
-    public HttpSession getSession(boolean b) {
-        return httpRequest.getSession(b);
-    }
-
-    public HttpSession getSession() {
-        return httpRequest.getSession();
-    }
-
-    public boolean isRequestedSessionIdValid() {
-        return httpRequest.isRequestedSessionIdValid();
-    }
-
-    public boolean isRequestedSessionIdFromCookie() {
-        return httpRequest.isRequestedSessionIdFromCookie();
-    }
-
-    public boolean isRequestedSessionIdFromURL() {
-        return httpRequest.isRequestedSessionIdFromURL();
-    }
-
-    public boolean isRequestedSessionIdFromUrl() {
-        return httpRequest.isRequestedSessionIdFromUrl();
-    }
-
-    public Object getAttribute(String s) {
-        return httpRequest.getAttribute(s);
-    }
-
-    public Enumeration getAttributeNames() {
-        return httpRequest.getAttributeNames();
-    }
-
-    public String getCharacterEncoding() {
-        return httpRequest.getCharacterEncoding();
-    }
-
-    public void setCharacterEncoding(String s) throws UnsupportedEncodingException {
-        httpRequest.setCharacterEncoding(s);
-    }
-
-    public int getContentLength() {
-        return httpRequest.getContentLength();
-    }
-
-    public String getContentType() {
-        return httpRequest.getContentType();
-    }
-
-    public ServletInputStream getInputStream() throws IOException {
-        return httpRequest.getInputStream();
-    }
-
-    public String getParameter(String s) {
-        return httpRequest.getParameter(s);
-    }
-
-    public Enumeration getParameterNames() {
-        return httpRequest.getParameterNames();
-    }
-
-    public String[] getParameterValues(String s) {
-        return httpRequest.getParameterValues(s);
-    }
-
-    public Map getParameterMap() {
-        return httpRequest.getParameterMap();
-    }
-
-    public String getProtocol() {
-        return httpRequest.getProtocol();
-    }
-
-    public String getScheme() {
-        return httpRequest.getScheme();
-    }
-
-    public String getServerName() {
-        return httpRequest.getServerName();
-    }
-
-    public int getServerPort() {
-        return httpRequest.getServerPort();
-    }
-
-    public BufferedReader getReader() throws IOException {
-        return httpRequest.getReader();
-    }
-
-    public String getRemoteAddr() {
-        return httpRequest.getRemoteAddr();
-    }
-
-    public String getRemoteHost() {
-        return httpRequest.getRemoteHost();
-    }
-
-    public void setAttribute(String s, Object o) {
-        httpRequest.setAttribute(s, o);
-    }
-
-    public void removeAttribute(String s) {
-        httpRequest.removeAttribute(s);
-    }
-
-    public Locale getLocale() {
-        return httpRequest.getLocale();
-    }
-
-    public Enumeration getLocales() {
-        return httpRequest.getLocales();
-    }
-
-    public boolean isSecure() {
-        return httpRequest.isSecure();
-    }
-
-    public RequestDispatcher getRequestDispatcher(String s) {
-        return httpRequest.getRequestDispatcher(s);
-    }
-
-    public String getRealPath(String s) {
-        return httpRequest.getRealPath(s);
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/WebdavResponse.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/WebdavResponse.java
deleted file mode 100644
index 815fb04..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/WebdavResponse.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav;
-
-import org.apache.jackrabbit.webdav.observation.ObservationDavServletResponse;
-
-/**
- * The empty <code>WebdavResponse</code> interface collects the functionality
- * defined by {@link org.apache.jackrabbit.webdav.DavServletResponse} encapsulting
- * for the core WebDAV specification (RFC 2518) as well as the various extensions
- * used for observation and transaction support, ordering of collections, search
- * and versioning.
- */
-public interface WebdavResponse extends DavServletResponse,
-        ObservationDavServletResponse {
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/WebdavResponseImpl.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/WebdavResponseImpl.java
deleted file mode 100644
index 049bb33..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/WebdavResponseImpl.java
+++ /dev/null
@@ -1,309 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.xml.XmlSerializable;
-import org.apache.jackrabbit.webdav.property.DavPropertySet;
-import org.apache.jackrabbit.webdav.lock.ActiveLock;
-import org.apache.jackrabbit.webdav.lock.LockDiscovery;
-import org.apache.jackrabbit.webdav.observation.Subscription;
-import org.apache.jackrabbit.webdav.observation.SubscriptionDiscovery;
-import org.apache.jackrabbit.webdav.observation.EventDiscovery;
-import org.apache.xml.serialize.OutputFormat;
-import org.apache.xml.serialize.XMLSerializer;
-import org.w3c.dom.Document;
-
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.Cookie;
-import javax.servlet.ServletOutputStream;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.DocumentBuilderFactory;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.ByteArrayOutputStream;
-import java.util.Locale;
-
-/**
- * WebdavResponseImpl implements the <code>WebdavResponse</code> interface.
- */
-public class WebdavResponseImpl implements WebdavResponse {
-
-    private static Logger log = Logger.getLogger(WebdavResponseImpl.class);
-
-    private static final DocumentBuilderFactory BUILDER_FACTORY = DocumentBuilderFactory.newInstance();
-
-    private HttpServletResponse httpResponse;
-
-    /**
-     * Create a new <code>WebdavResponse</code>
-     * 
-     * @param httpResponse
-     */
-    public WebdavResponseImpl(HttpServletResponse httpResponse) {
-        this(httpResponse, false);
-    }
-
-    /**
-     * Create a new <code>WebdavResponse</code>
-     *
-     * @param httpResponse
-     * @param noCache
-     */
-    public WebdavResponseImpl(HttpServletResponse httpResponse, boolean noCache) {
-        this.httpResponse = httpResponse;
-        if (noCache) {
-            /* set cache control headers */
-        addHeader("Pragma", "No-cache");  // http1.0
-        addHeader("Cache-Control", "no-cache"); // http1.1
-    }
-    }
-
-    /**
-     * If the specifid exception provides an error condition an Xml response body
-     * is sent providing more detailed information about the error. Otherwise only
-     * the error code and status phrase is sent back.
-     *
-     * @param exception
-     * @throws IOException
-     * @see DavServletResponse#sendError(org.apache.jackrabbit.webdav.DavException)
-     * @see #sendError(int, String)
-     * @see #sendXmlResponse(XmlSerializable, int)
-     */
-    public void sendError(DavException exception) throws IOException {
-        if (!exception.hasErrorCondition()) {
-            httpResponse.sendError(exception.getErrorCode(), exception.getStatusPhrase());
-        } else {
-            sendXmlResponse(exception, exception.getErrorCode());
-        }
-    }
-
-    /**
-     * Send a multistatus response.
-     *
-     * @param multistatus
-     * @throws IOException
-     * @see DavServletResponse#sendMultiStatus(org.apache.jackrabbit.webdav.MultiStatus)
-     */
-    public void sendMultiStatus(MultiStatus multistatus) throws IOException {
-        sendXmlResponse(multistatus, SC_MULTI_STATUS);
-    }
-
-    /**
-     * Send response body for a lock request intended to create a new lock.
-     *
-     * @param lock
-     * @throws java.io.IOException
-     * @see DavServletResponse#sendLockResponse(org.apache.jackrabbit.webdav.lock.ActiveLock)
-     */
-    public void sendLockResponse(ActiveLock lock) throws IOException {
-        httpResponse.setHeader(DavConstants.HEADER_LOCK_TOKEN, "<" + lock.getToken() + ">");
-	DavPropertySet propSet = new DavPropertySet();
-        propSet.add(new LockDiscovery(lock));
-        sendXmlResponse(propSet, SC_OK);
-    }
-
-    /**
-     * Send response body for a lock request that was intended to refresh one
-     * or several locks.
-     *
-     * @param locks
-     * @throws java.io.IOException
-     * @see DavServletResponse#sendRefreshLockResponse(org.apache.jackrabbit.webdav.lock.ActiveLock[])
-     */
-    public void sendRefreshLockResponse(ActiveLock[] locks) throws IOException {
-        DavPropertySet propSet = new DavPropertySet();
-        propSet.add(new LockDiscovery(locks));
-        sendXmlResponse(propSet, SC_OK);
-    }
-
-    /**
-     * Send Xml response body.
-     *
-     * @param serializable
-     * @param status
-     * @throws IOException
-     * @see DavServletResponse#sendXmlResponse(XmlSerializable, int);
-     */
-    public void sendXmlResponse(XmlSerializable serializable, int status) throws IOException {
-        httpResponse.setStatus(status);
-        if (serializable != null) {
-            ByteArrayOutputStream out = new ByteArrayOutputStream();
-            try {
-                Document doc = BUILDER_FACTORY.newDocumentBuilder().newDocument();
-                doc.appendChild(serializable.toXml(doc));
-                
-                OutputFormat format = new OutputFormat("xml", "UTF-8", true);
-                XMLSerializer serializer = new XMLSerializer(out, format);
-                serializer.setNamespaces(true);
-                serializer.asDOMSerializer().serialize(doc);
-
-            byte[] bytes = out.toByteArray();
-            httpResponse.setContentType("text/xml; charset=UTF-8");
-            httpResponse.setContentLength(bytes.length);
-            httpResponse.getOutputStream().write(bytes);
-
-            } catch (ParserConfigurationException e) {
-                log.error(e.getMessage());
-                throw new IOException(e.getMessage());
-            }
-        }
-    }
-
-    //----------------------------< ObservationDavServletResponse Interface >---
-    /**
-     *
-     * @param subscription
-     * @throws IOException
-     * @see org.apache.jackrabbit.webdav.observation.ObservationDavServletResponse#sendSubscriptionResponse(org.apache.jackrabbit.webdav.observation.Subscription)
-     */
-    public void sendSubscriptionResponse(Subscription subscription) throws IOException {
-	DavPropertySet propSet = new DavPropertySet();
-        propSet.add(new SubscriptionDiscovery(subscription));
-        sendXmlResponse(propSet, SC_OK);
-    }
-
-    /**
-     *
-     * @param eventDiscovery
-     * @throws IOException
-     * @see org.apache.jackrabbit.webdav.observation.ObservationDavServletResponse#sendPollResponse(org.apache.jackrabbit.webdav.observation.EventDiscovery)
-     */
-    public void sendPollResponse(EventDiscovery eventDiscovery) throws IOException {
-        sendXmlResponse(eventDiscovery, SC_OK);
-    }
-
-    //--------------------------------------< HttpServletResponse interface >---
-    public void addCookie(Cookie cookie) {
-        httpResponse.addCookie(cookie);
-    }
-
-    public boolean containsHeader(String s) {
-        return httpResponse.containsHeader(s);
-    }
-
-    public String encodeURL(String s) {
-        return httpResponse.encodeRedirectURL(s);
-    }
-
-    public String encodeRedirectURL(String s) {
-        return httpResponse.encodeRedirectURL(s);
-    }
-
-    public String encodeUrl(String s) {
-        return httpResponse.encodeUrl(s);
-    }
-
-    public String encodeRedirectUrl(String s) {
-        return httpResponse.encodeRedirectURL(s);
-    }
-
-    public void sendError(int i, String s) throws IOException {
-        httpResponse.sendError(i, s);
-    }
-
-    public void sendError(int i) throws IOException {
-        httpResponse.sendError(i);
-    }
-
-    public void sendRedirect(String s) throws IOException {
-        httpResponse.sendRedirect(s);
-    }
-
-    public void setDateHeader(String s, long l) {
-        httpResponse.setDateHeader(s, l);
-    }
-
-    public void addDateHeader(String s, long l) {
-        httpResponse.addDateHeader(s, l);
-    }
-
-    public void setHeader(String s, String s1) {
-        httpResponse.setHeader(s, s1);
-    }
-
-    public void addHeader(String s, String s1) {
-        httpResponse.addHeader(s, s1);
-    }
-
-    public void setIntHeader(String s, int i) {
-        httpResponse.setIntHeader(s, i);
-    }
-
-    public void addIntHeader(String s, int i) {
-        httpResponse.addIntHeader(s, i);
-    }
-
-    public void setStatus(int i) {
-        httpResponse.setStatus(i);
-    }
-
-    public void setStatus(int i, String s) {
-        httpResponse.setStatus(i, s);
-    }
-
-    public String getCharacterEncoding() {
-        return httpResponse.getCharacterEncoding();
-    }
-
-    public ServletOutputStream getOutputStream() throws IOException {
-        return httpResponse.getOutputStream();
-    }
-
-    public PrintWriter getWriter() throws IOException {
-        return httpResponse.getWriter();
-    }
-
-    public void setContentLength(int i) {
-        httpResponse.setContentLength(i);
-    }
-
-    public void setContentType(String s) {
-        httpResponse.setContentType(s);
-    }
-
-    public void setBufferSize(int i) {
-        httpResponse.setBufferSize(i);
-    }
-
-    public int getBufferSize() {
-        return httpResponse.getBufferSize();
-    }
-
-    public void flushBuffer() throws IOException {
-        httpResponse.flushBuffer();
-    }
-
-    public void resetBuffer() {
-        httpResponse.resetBuffer();
-    }
-
-    public boolean isCommitted() {
-        return httpResponse.isCommitted();
-    }
-
-    public void reset() {
-        httpResponse.reset();
-    }
-
-    public void setLocale(Locale locale) {
-        httpResponse.setLocale(locale);
-    }
-
-    public Locale getLocale() {
-        return httpResponse.getLocale();
-    }
-}
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/header/CodedUrlHeader.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/header/CodedUrlHeader.java
deleted file mode 100644
index 4c75401..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/header/CodedUrlHeader.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.header;
-
-import org.apache.log4j.Logger;
-
-import javax.servlet.http.HttpServletRequest;
-
-/**
- * <code>CodedUrlHeader</code>...
- */
-public class CodedUrlHeader implements Header {
-
-    private static Logger log = Logger.getLogger(CodedUrlHeader.class);
-
-    private final String headerName;
-    private final String headerValue;
-
-    public CodedUrlHeader(String headerName, String headerValue) {
-        this.headerName = headerName;
-        if (headerValue != null && !(headerValue.startsWith("<") && headerValue.endsWith(">"))) {
-            headerValue = "<" + headerValue + ">";
-        }
-        this.headerValue = headerValue;
-    }
-
-    /**
-     * Return the name of the header
-     *
-     * @return header name
-     * @see Header#getHeaderName()
-     */
-    public String getHeaderName() {
-	return headerName;
-    }
-
-    /**
-     * Return the value of the header
-     *
-     * @return value
-     * @see Header#getHeaderValue()
-     */
-    public String getHeaderValue() {
-        return headerValue;
-    }
-
-    /**
-     * Returns the token present in the header value or <code>null</code>.
-     * If the header contained multiple tokens separated by ',' the first value
-     * is returned.
-     *
-     * @return token present in the CodedURL header or <code>null</code> if
-     * the header is not present.
-     * @see #getCodedUrls()
-     */
-    public String getCodedUrl() {
-        String[] codedUrls = getCodedUrls();
-        return (codedUrls != null) ? codedUrls[0] : null;
-    }
-    
-    /**
-     * Return an array of coded urls as present in the header value or <code>null</code> if
-     * no value is present.
-     *
-     * @return array of coded urls
-     */
-    public String[] getCodedUrls() {
-        String[] codedUrls = null;
-        if (headerValue != null) {
-            String[] values = headerValue.split(",");
-            codedUrls = new String[values.length];
-            for (int i = 0; i < values.length; i++) {
-                int p1 = values[i].indexOf('<');
-                if (p1<0) {
-                    throw new IllegalArgumentException("Invalid CodedURL header value:" + values[i]);
-                }
-                int p2 = values[i].indexOf('>', p1);
-                if (p2<0) {
-                    throw new IllegalArgumentException("Invalid CodedURL header value:" + values[i]);
-                }
-                codedUrls[i] = values[i].substring(p1+1, p2);
-            }
-	}
-        return codedUrls;
-    }
-
-    /**
-     * Retrieves the header with the given name and builds a new <code>CodedUrlHeader</code>.
-     *
-     * @param request
-     * @param headerName
-     * @return new <code>CodedUrlHeader</code> instance
-     */
-    public static CodedUrlHeader parse(HttpServletRequest request, String headerName) {
-        String headerValue = request.getHeader(headerName);
-        return new CodedUrlHeader(headerName, headerValue);
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/header/DepthHeader.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/header/DepthHeader.java
deleted file mode 100644
index 220e4b3..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/header/DepthHeader.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.header;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.DavConstants;
-
-import javax.servlet.http.HttpServletRequest;
-
-/**
- * <code>DepthHeader</code>...
- */
-public class DepthHeader implements Header, DavConstants {
-
-    private static Logger log = Logger.getLogger(DepthHeader.class);
-
-    private final int depth;
-
-    /**
-     * Create a new <code>DepthHeader</code> from the given integer.
-     *
-     * @param depth
-     */
-    public DepthHeader(int depth) {
-	if (depth == DEPTH_0 || depth == DEPTH_1 || depth == DEPTH_INFINITY) {
-	    this.depth = depth;
-	} else {
-	    throw new IllegalArgumentException("Invalid depth: " + depth);
-	}
-    }
-
-    /**
-     * Create a new <code>DepthHeader</code> with either value {@link #DEPTH_0 0}
-     * or {@link #DEPTH_INFINITY infinity}.
-     * 
-     * @param isDeep
-     */
-    public DepthHeader(boolean isDeep) {
-        this.depth = (isDeep) ? DEPTH_INFINITY : DEPTH_0;
-    }
-
-    /**
-     * @return integer representation of the depth indicated by the given header.
-     */
-    public int getDepth() {
-        return depth;
-    }
-
-    /**
-     * Return {@link DavConstants#HEADER_DEPTH Depth}
-     *
-     * @return {@link DavConstants#HEADER_DEPTH Depth}
-     * @see DavConstants#HEADER_DEPTH
-     * @see Header#getHeaderName()
-     */
-    public String getHeaderName() {
-	return DavConstants.HEADER_DEPTH;
-    }
-
-    /**
-     * Returns the header value.
-     *
-     * @return header value
-     * @see Header#getHeaderValue()
-     */
-    public String getHeaderValue() {
-        if (depth == DavConstants.DEPTH_0 || depth == DavConstants.DEPTH_1) {
-	    return String.valueOf(depth);
-	} else {
-	    return DavConstants.DEPTH_INFINITY_S;
-	}
-    }
-
-    /**
-     * Retrieve the Depth header from the given request object and parse the
-     * value. If no header is present or the value is empty String, the
-     * defaultValue is used ot build a new <code>DepthHeader</code> instance.
-     *
-     * @param request
-     * @param defaultValue
-     * @return a new <code>DepthHeader</code> instance
-     */
-    public static DepthHeader parse(HttpServletRequest request, int defaultValue) {
-        String headerValue = request.getHeader(HEADER_DEPTH);
-        if (headerValue == null || "".equals(headerValue)) {
-	    return new DepthHeader(defaultValue);
-	} else {
-	    return new DepthHeader(depthToInt(headerValue));
-	}
-    }
-
-    /**
-     * Convert the String depth value to an integer.
-     *
-     * @param depth
-     * @return integer representation of the given depth String
-     * @throws IllegalArgumentException if the String does not represent a valid
-     * depth.
-     */
-    private static int depthToInt(String depth) {
-        int d;
-	if (depth.equalsIgnoreCase(DavConstants.DEPTH_INFINITY_S)) {
-	    d = DavConstants.DEPTH_INFINITY;
-	} else if (depth.equals(DavConstants.DEPTH_0+"")) {
-	    d = DavConstants.DEPTH_0;
-	} else if (depth.equals(DavConstants.DEPTH_1+"")) {
-	    d = DavConstants.DEPTH_1;
-	} else {
-	    throw new IllegalArgumentException("Invalid depth value: " + depth);
-	}
-        return d;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/header/Header.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/header/Header.java
deleted file mode 100644
index deae92c..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/header/Header.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.header;
-
-/**
- * <code>Header</code>...
- */
-public interface Header {
-
-    public String getHeaderName();
-
-    public String getHeaderValue();
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/header/IfHeader.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/header/IfHeader.java
deleted file mode 100644
index ab06034..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/header/IfHeader.java
+++ /dev/null
@@ -1,909 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.header;
-
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.log4j.Logger;
-
-import javax.servlet.http.HttpServletRequest;
-import java.io.IOException;
-import java.io.Reader;
-import java.io.StringReader;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * The <code>IfHeader</code> class represents the state lists defined
- * through the HTTP <em>If</em> header, which is specified in RFC 2518 as
- * follows :
- * <pre>
-     If = "If" ":" ( 1*No-tag-list | 1*Tagged-list)
-     No-tag-list = List
-     Tagged-list = Resource 1*List
-     Resource = Coded-URL
-     List = "(" 1*(["Not"](State-etag | "[" entity-tag "]")) ")"
-     State-etag = Coded-URL
-     Coded-URL = "&lt;" absoluteURI "&gt;"
- * </pre>
- * <p>
- * Reformulating this specification into proper EBNF as specified by N. Wirth
- * we get the following productions, which map to the parse METHODS of this
- * class. Any whitespace is ignored except for white space surrounding and
- * within words which is considered significant.
- * <pre>
-     If = "If:" ( Tagged | Untagged ).
-     Tagged = { "&lt;" Word "&gt;" Untagged } .
-     Untagged = { "(" IfList ")" } .
-     IfList = { [ "Not" ] ( ("&lt;" Word "&gt;" ) | ( "[" Word "]" ) ) } .
-     Word = characters .
- * </pre>
- * <p>
- * An <em>If</em> header either contains untagged <em>IfList</em> entries or
- * tagged <em>IfList</em> entries but not a mixture of both. An <em>If</em>
- * header containing tagged entries is said to be of <em>tagged</em> type while
- * an <em>If</em> header containing untagged entries is said to be of
- * <em>untagged</em> type.
- * <p>
- * An <em>IfList</em> is a list of tokens - words enclosed in <em>&lt; &gt;</em>
- * - and etags - words enclosed in <em>[ ]</em>. An <em>IfList</em> matches a
- * (token, etag) tuple if all entries in the list match. If an entry in the list
- * is prefixed with the word <em>Not</em> (parsed case insensitively) the entry
- * must not match the concrete token or etag.
- * <p>
- * Example: The <em>ifList</em> <code>(&lt;token&gt; [etag])</code> only matches
- * if the concret token has the value <code>token</code> and the conrete etag
- * has the value <code>etag</code>. On the other hand, the <em>ifList</em>
- * <code>(Not &lt;notoken&gt;)</code> matches any token which is not
- * <code>notoken</code> (in this case the concrete value of the etag is
- * not taken into consideration).
- *
- * @author Felix Meschberger
- */
-public class IfHeader implements Header {
-
-    /**
-     * default logger
-     */
-    private static final Logger log = Logger.getLogger(IfHeader.class);
-
-    /**
-     * The string representation of the header value
-     */
-    private final String headerValue;
-
-    /**
-     * The list of untagged state entries
-     */
-    private final IfHeaderInterface ifHeader;
-
-    /**
-     * The list of all positive tokens present in the If header.
-     */
-    private List allTokens = new ArrayList();
-    /**
-     * The list of all NOT tokens present in the If header.
-     */
-    private List allNotTokens = new ArrayList();
-
-    /**
-     * Create a Untagged <code>IfHeader</code> if the given lock tokens.
-     *
-     * @param tokens
-     */
-    public IfHeader(String[] tokens) {
-        allTokens.addAll(Arrays.asList(tokens));
-        StringBuffer b = new StringBuffer();
-        for (int i = 0; i < tokens.length; i++) {
-            b.append("(").append("<");
-            b.append(tokens[i]);
-            b.append(">").append(")");
-        }
-        headerValue = b.toString();
-        ifHeader = parse();
-    }
-
-    /**
-     * Parses the <em>If</em> header and creates and internal representation
-     * which is easy to query.
-     *
-     * @param req The request object
-     */
-    public IfHeader(HttpServletRequest req) {
-	headerValue = req.getHeader(DavConstants.HEADER_IF);
-        ifHeader = parse();
-    }
-
-    /**
-     * Return {@link DavConstants#HEADER_IF If}
-     *
-     * @return {@link DavConstants#HEADER_IF If}
-     * @see DavConstants#HEADER_IF
-     */
-    public String getHeaderName() {
-	return DavConstants.HEADER_IF;
-    }
-
-    /**
-     * Return the String representation of the If header present on
-     * the given request or <code>null</code>.
-     *
-     * @return If header value as String or <code>null</code>.
-     */
-    public String getHeaderValue() {
-        return headerValue;
-    }
-
-    /**
-     * Returns true if an If header was present in the given request. False otherwise.
-     *
-     * @return  true if an If header was present.
-     */
-    public boolean hasValue() {
-        return ifHeader != null;
-    }
-
-    /**
-     * Tries to match the contents of the <em>If</em> header with the given
-     * token and etag values with the restriction to only check for the tag.
-     * <p>
-     * If the <em>If</em> header is of untagged type, the untagged <em>IfList</em>
-     * is matched against the token and etag given: A match of the token and
-     * etag is found if at least one of the <em>IfList</em> entries match the
-     * token and etag tupel.
-     *
-     * @param tag The tag to identify the <em>IfList</em> to match the token
-     * and etag against.
-     * @param token The token to compare.
-     * @param etag The ETag value to compare.
-     *
-     * @return If the <em>If</em> header is of untagged type the result is
-     *      <code>true</code> if any of the <em>IfList</em> entries matches
-     *      the token and etag values. For tagged type <em>If</em> header the
-     *      result is <code>true</code> if either no entry for the given tag
-     *      exists in the <em>If</em> header or if the <em>IfList</em> for the
-     *      given tag matches the token and etag given.
-     */
-    public boolean matches(String tag, String token, String etag) {
-        if (ifHeader == null) {
-            log.debug("matches: No If header, assume match");
-            return true;
-        } else {
-            return ifHeader.matches(tag, token, etag);
-        }
-    }
-
-    /**
-     * @return an interator over all tokens present in the if header, that were
-     * not denied by a leading NOT statement.
-     */
-    public Iterator getAllTokens() {
-        return allTokens.iterator();
-    }
-
-    /**
-     * @return an interator over all NOT tokens present in the if header, that
-     * were explicitely denied.
-     */
-    public Iterator getAllNotTokens() {
-        return allNotTokens.iterator();
-    }
-
-    /**
-     * Parse the original header value and build th internal IfHeaderInterface
-     * object that is easy to query.
-     */
-    private IfHeaderInterface parse() {
-        IfHeaderInterface ifHeader;
-        if (headerValue != null && headerValue.length() > 0) {
-            StringReader reader = null;
-            int firstChar = 0;
-
-            try {
-                reader = new StringReader(headerValue);
-                // get the first character to decide - expect '(' or '<'
-                try {
-                    reader.mark(1);
-                    firstChar = readWhiteSpace(reader);
-                    reader.reset();
-                } catch (IOException ignore) {
-                    // may be thrown according to API but is only thrown by the
-                    // StringReader class if the reader is already closed.
-                }
-
-                if (firstChar == '(') {
-                    ifHeader = parseUntagged(reader);
-                } else if (firstChar == '<') {
-                    ifHeader = parseTagged(reader);
-                } else {
-                    logIllegalState("If", firstChar, "(<", null);
-                    ifHeader = null;
-                }
-
-            } finally  {
-                if (reader != null) {
-                    reader.close();
-                }
-            }
-
-        } else {
-            log.debug("IfHeader: No If header in request");
-            ifHeader = null;
-        }
-        return ifHeader;
-    }
-
-    //---------- internal IF header parser -------------------------------------
-    /**
-     * Parses a tagged type <em>If</em> header. This method implements the
-     * <em>Tagged</em> production given in the class comment :
-     * <pre>
-         Tagged = { "<" Word ">" Untagged } .
-     * </pre>
-     *
-     * @param reader
-     * @return
-     */
-    private IfHeaderMap parseTagged(StringReader reader) {
-        IfHeaderMap map = new IfHeaderMap();
-        try {
-            while (true) {
-                // read next non-whitespace
-                int c = readWhiteSpace(reader);
-                if (c < 0) {
-                    // end of input, no more entries
-                    break;
-                } else if (c == '<') {
-                    // start a tag with an IfList
-                    String resource = readWord(reader, '>');
-                    if (resource != null) {
-                        // go to untagged after reading the resource
-                        map.put(resource, parseUntagged(reader));
-                    } else {
-                        break;
-                    }
-                } else {
-                    // unexpected character
-                    // catchup to end of input or start of a tag
-                    logIllegalState("Tagged", c, "<", reader);
-                }
-            }
-        } catch (IOException ioe) {
-            log.error("parseTagged: Problem parsing If header: "+ioe.toString());
-        }
-
-        return map;
-    }
-
-    /**
-     * Parses an untagged type <em>If</em> header. This method implements the
-     * <em>Untagged</em> production given in the class comment :
-     * <pre>
-         Untagged = { "(" IfList ")" } .
-     * </pre>
-     *
-     * @param reader The <code>StringReader</code> to read from for parsing
-     *
-     * @return An <code>ArrayList</code> of {@link IfList} entries.
-     */
-    private IfHeaderList parseUntagged(StringReader reader) {
-        IfHeaderList list = new IfHeaderList();
-        try {
-            while (true) {
-                // read next non-whitespace
-                reader.mark(1);
-                int c = readWhiteSpace(reader);
-                if (c < 0) {
-                    // end of input, no more IfLists
-                    break;
-
-                } else if (c == '(') {
-                    // start of an IfList, parse
-                    list.add(parseIfList(reader));
-
-                } else if (c == '<') {
-                    // start of a tag, return current list
-                    reader.reset();
-                    break;
-
-                } else {
-                    // unexpected character
-                    // catchup to end of input or start of an IfList
-                    logIllegalState("Untagged", c, "(", reader);
-                }
-            }
-        } catch (IOException ioe) {
-            log.error("parseUntagged: Problem parsing If header: "+ioe.toString());
-        }
-        return list;
-    }
-
-    /**
-     * Parses an <em>IfList</em> in the <em>If</em> header. This method
-     * implements the <em>Tagged</em> production given in the class comment :
-     * <pre>
-         IfList = { [ "Not" ] ( ("<" Word ">" ) | ( "[" Word "]" ) ) } .
-     * </pre>
-     *
-     * @param reader The <code>StringReader</code> to read from for parsing
-     *
-     * @return The {@link IfList} for the input <em>IfList</em>.
-     *
-     * @throws IOException if a problem occurrs during reading.
-     */
-    private IfList parseIfList(StringReader reader) throws IOException {
-        IfList res = new IfList();
-        boolean positive = true;
-        String word;
-
-        ReadLoop:
-        while (true) {
-            int nextChar = readWhiteSpace(reader);
-            switch (nextChar) {
-                case 'N':
-                case 'n':
-                    // read not
-
-                    // check whether o or O
-                    int not = reader.read();
-                    if (not != 'o' && not != 'O') {
-                        logIllegalState("IfList-Not", not, "o", null);
-                        break;
-                    }
-
-                    // check whether t or T
-                    not = reader.read();
-                    if (not !='t' || not != 'T') {
-                        logIllegalState("IfList-Not", not, "t", null);
-                        break;
-                    }
-
-                    // read Not ok
-                    positive = false;
-                    break;
-
-                case '<':
-                    // state token
-                    word = readWord(reader, '>');
-                    if (word != null) {
-                        res.add(new IfListEntryToken(word, positive));
-                        // also add the token to the list of all tokens
-                        if (positive) {
-                        allTokens.add(word);
-                        } else {
-                            allNotTokens.add(word);
-                        }
-                        positive = true;
-                    }
-                    break;
-
-                case '[':
-                    // etag
-                    word = readWord(reader, ']');
-                    if (word != null) {
-                        res.add(new IfListEntryEtag(word, positive));
-                        positive = true;
-                    }
-                    break;
-
-                case ')':
-                    // correct end of list, end the loop
-                    log.debug("parseIfList: End of If list, terminating loop");
-                    break ReadLoop;
-
-                default:
-                    logIllegalState("IfList", nextChar, "nN<[)", reader);
-
-                    // abort loop if EOF
-                    if (nextChar < 0) {
-                        break ReadLoop;
-                    }
-
-                    break;
-            }
-        }
-
-        // return the current list anyway
-        return res;
-    }
-
-    /**
-     * Returns the first non-whitespace character from the reader or -1 if
-     * the end of the reader is encountered.
-     *
-     * @param reader The <code>Reader</code> to read from
-     *
-     * @return The first non-whitespace character or -1 in case of EOF.
-     *
-     * @throws IOException if a problem occurrs during reading.
-     */
-    private int readWhiteSpace(Reader reader) throws IOException {
-        int c = reader.read();
-        while (c >= 0 && Character.isWhitespace((char) c)) {
-             c = reader.read();
-        }
-        return c;
-    }
-
-    /**
-     * Reads from the input until the end character is encountered and returns
-     * the string upto but not including this end character. If the end of input
-     * is reached before reading the end character <code>null</code> is
-     * returned.
-     * <p>
-     * Note that this method does not support any escaping.
-     *
-     * @param reader The <code>Reader</code> to read from
-     * @param end The ending character limitting the word.
-     *
-     * @return The string read upto but not including the ending character or
-     *      <code>null</code> if the end of input is reached before the ending
-     *      character has been read.
-     *
-     * @throws IOException if a problem occurrs during reading.
-     */
-    private String readWord(Reader reader, char end) throws IOException {
-        StringBuffer buf = new StringBuffer();
-
-        // read the word value
-        int c = reader.read();
-        for (; c >= 0 && c != end; c=reader.read()) {
-            buf.append((char) c);
-        }
-
-        // check whether we succeeded
-        if (c < 0) {
-            log.error("readWord: Unexpected end of input reading word");
-            return null;
-        }
-
-        // build the string and return it
-        return buf.toString();
-    }
-
-    /**
-     * Logs an unexpected character with the corresponding state and list of
-     * expected characters. If the reader parameter is not null, characters
-     * are read until either the end of the input is reached or any of the
-     * characters in the expChar string is read.
-     *
-     * @param state The name of the current parse state. This method logs this
-     *      name in the message. The intended value would probably be the
-     *      name of the EBNF production during which the error occurrs.
-     * @param effChar The effective character read.
-     * @param expChar The list of characters acceptable in the current state.
-     * @param reader The reader to be caught up to any of the expected
-     *      characters. If <code>null</code> the input is not caught up to
-     *      any of the expected characters (of course ;-).
-     */
-    private void logIllegalState(String state, int effChar, String expChar,
-                                 StringReader reader) {
-
-        // format the effective character to be logged
-        String effString = (effChar < 0) ? "<EOF>" : String.valueOf((char) effChar);
-
-        // log the error
-        log.error("logIllegalState: Unexpected character '"+effString+" in state "+state+", expected any of "+expChar);
-
-        // catch up if a reader is given
-        if (reader != null && effChar >= 0) {
-            try {
-                log.debug("logIllegalState: Catch up to any of "+expChar);
-                do {
-                    reader.mark(1);
-                    effChar = reader.read();
-                } while (effChar >= 0 && expChar.indexOf(effChar) < 0);
-                if (effChar >= 0) {
-                    reader.reset();
-                }
-            } catch (IOException ioe) {
-                log.error("logIllegalState: IO Problem catching up to any of "+expChar);
-            }
-        }
-    }
-
-    //---------- internal If header structure ----------------------------------
-
-    /**
-     * The <code>IfListEntry</code> abstract class is the base class for
-     * entries in an <em>IfList</em> production. This abstract base class
-     * provides common functionality to both types of entries, namely tokens
-     * enclosed in angle brackets (<code>&lt; &gt;</code>) and etags enclosed
-     * in square brackets (<code>[ ]</code>).
-     */
-    private static abstract class IfListEntry {
-
-        /**
-         * The entry string value - the semantics of this value depends on the
-         * implementing class.
-         */
-        protected final String value;
-
-        /** Flag to indicate, whether this is a positive match or not */
-        protected final boolean positive;
-
-        /** The cached result of the {@link #toString} method. */
-        protected String stringValue;
-
-        /**
-         * Sets up the final fields of this abstract class. The meaning of
-         * value parameter depends solely on the implementing class. From the
-         * point of view of this abstract class, it is simply a string value.
-         *
-         * @param value The string value of this instance
-         * @param positive <code>true</code> if matches are positive
-         */
-        protected IfListEntry(String value, boolean positive) {
-            this.value = value;
-            this.positive = positive;
-        }
-
-        /**
-         * Matches the value from the parameter to the internal string value.
-         * If the parameter and the {@link #value} field match, the method
-         * returns <code>true</code> for positive matches and <code>false</code>
-         * for negative matches.
-         * <p>
-         * This helper method can be called by implementations to evaluate the
-         * concrete match on the correct value parameter. See
-         * {@link #match(String, String)} for the external API method.
-         *
-         * @param value The string value to compare to the {@link #value}
-         *      field.
-         *
-         * @return <code>true</code> if the value parameter and the
-         *      {@link #value} field match and the {@link #positive} field is
-         *      <code>true</code> or if the values do not match and the
-         *      {@link #positive} field is <code>false</code>.
-         */
-        protected boolean match(String value) {
-            return positive == this.value.equals(value);
-        }
-
-        /**
-         * Matches the entry's value to the the token or etag. Depending on the
-         * concrete implementation, only one of the parameters may be evaluated
-         * while the other may be ignored.
-         * <p>
-         * Implementing METHODS may call the helper method {@link #match(String)}
-         * for the actual matching.
-         *
-         * @param token The token value to compare
-         * @param etag The etag value to compare
-         *
-         * @return <code>true</code> if the token/etag matches the <em>IfList</em>
-         *      entry.
-         */
-        public abstract boolean match(String token, String etag);
-
-        /**
-         * Returns a short type name for the implementation. This method is
-         * used by the {@link #toString} method to build the string representation
-         * if the instance.
-         *
-         * @return The type name of the implementation.
-         */
-        protected abstract String getType();
-
-	/**
-	 * Returns the value of this entry.
-	 *
-	 * @return the value
-	 */
-	protected String getValue() {
-	    return value;
-	}
-
-        /**
-         * Returns the String represenation of this entry. This method uses the
-         * {@link #getType} to build the string representation.
-         *
-         * @return the String represenation of this entry.
-         */
-        public String toString() {
-            if (stringValue == null) {
-                stringValue = getType() + ": " + (positive?"":"!") + value;
-            }
-            return stringValue;
-        }
-    }
-
-    /**
-     * The <code>IfListEntryToken</code> extends the {@link IfListEntry}
-     * abstract class to represent an entry for token matching.
-     */
-    private static class IfListEntryToken extends IfListEntry {
-
-        /**
-         * Creates a token matching entry.
-         *
-         * @param token The token value pertinent to this instance.
-         * @param positive <code>true</code> if this is a positive match entry.
-         */
-        IfListEntryToken(String token, boolean positive) {
-            super(token, positive);
-        }
-
-        /**
-         * Matches the token parameter to the stored token value and returns
-         * <code>true</code> if the values match and if the match is positive.
-         * <code>true</code> is also returned for negative matches if the values
-         * do not match.
-         *
-         * @param token The token value to compare
-         * @param etag The etag value to compare, which is ignored in this
-         *      implementation.
-         *
-         * @return <code>true</code> if the token matches the <em>IfList</em>
-         *      entry's token value.
-         */
-        public boolean match(String token, String etag) {
-            return super.match(token);
-        }
-
-        /**
-         * Returns the type name of this implementation, which is fixed to
-         * be <em>Token</em>.
-         *
-         * @return The fixed string <em>Token</em> as the type name.
-         */
-        protected String getType() {
-            return "Token";
-        }
-    }
-
-    /**
-     * The <code>IfListEntryToken</code> extends the {@link IfListEntry}
-     * abstract class to represent an entry for etag matching.
-     */
-    private static class IfListEntryEtag extends IfListEntry {
-
-        /**
-         * Creates an etag matching entry.
-         *
-         * @param etag The etag value pertinent to this instance.
-         * @param positive <code>true</code> if this is a positive match entry.
-         */
-        IfListEntryEtag(String etag, boolean positive) {
-            super(etag, positive);
-        }
-
-        /**
-         * Matches the etag parameter to the stored etag value and returns
-         * <code>true</code> if the values match and if the match is positive.
-         * <code>true</code> is also returned for negative matches if the values
-         * do not match.
-         *
-         * @param token The token value to compare, which is ignored in this
-         *      implementation.
-         * @param etag The etag value to compare
-         *
-         * @return <code>true</code> if the etag matches the <em>IfList</em>
-         *      entry's etag value.
-         */
-        public boolean match(String token, String etag) {
-            return super.match(etag);
-        }
-
-        /**
-         * Returns the type name of this implementation, which is fixed to
-         * be <em>ETag</em>.
-         *
-         * @return The fixed string <em>ETag</em> as the type name.
-         */
-        protected String getType() {
-            return "ETag";
-        }
-    }
-
-    /**
-     * The <code>IfList</code> class extends the <code>ArrayList</code> class
-     * with the limitation to only support adding {@link IfListEntry} objects
-     * and adding a {@link #match} method.
-     * <p>
-     * This class is a container for data contained in the <em>If</em>
-     * production <em>IfList</em>
-     * <pre>
-         IfList = { [ "Not" ] ( ("<" Word ">" ) | ( "[" Word "]" ) ) } .
-     * </pre>
-     * <p>
-     */
-    private static class IfList extends ArrayList {
-
-        /**
-         * Throws an <code>IllegalStateException</code> because only
-         * {@link IfListEntry} objects are supported in this list.
-         *
-         * @param o The <code>Object</code> to add.
-         * @return <code>true</code> if successfull
-         *
-         * @throws IllegalStateException because only {@link IfListEntry}
-         *      objects are supported in this list.
-         */
-        public boolean add(Object o) {
-            throw new IllegalArgumentException("Only IfListEntry instances allowed");
-        }
-
-        /**
-         * Throws an <code>IllegalStateException</code> because only
-         * {@link IfListEntry} objects are supported in this list.
-         *
-         * @param index The position at which to add the object.
-         * @param element The <code>Object</code> to add.
-         *
-         * @throws IllegalStateException because only {@link IfListEntry}
-         *      objects are supported in this list.
-         */
-        public void add(int index, Object element) {
-            throw new IllegalArgumentException("Only IfListEntry instances allowed");
-        }
-
-        /**
-         * Adds the {@link IfListEntry} at the end of the list.
-         *
-         * @param entry The {@link IfListEntry} to add to the list
-         *
-         * @return <code>true</code> (as per the general contract of
-         *      Collection.add).
-         */
-        public boolean add(IfListEntry entry) {
-            return super.add(entry);
-        }
-
-        /**
-         * Adds the {@link IfListEntry} at the indicated position of the list.
-         *
-         * @param index
-         * @param entry
-         *
-         * @throws IndexOutOfBoundsException if index is out of range
-         *      <code>(index &lt; 0 || index &gt; size())</code>.
-         */
-        public void add(int index, IfListEntry entry) {
-            super.add(index, entry);
-        }
-
-        /**
-         * Returns <code>true</code> if all {@link IfListEntry} objects in the
-         * list match the given token and etag. If the list is entry, it is
-         * considered to match the token and etag.
-         *
-         * @param token The token to compare.
-         * @param etag The etag to compare.
-         *
-         * @return <code>true</code> if all entries in the list matche the
-         *      given tag and token.
-         */
-        public boolean match(String token, String etag) {
-            log.debug("match: Trying to match token="+token+", etag="+etag);
-            for (int i=0; i < size(); i++) {
-                IfListEntry ile = (IfListEntry) get(i);
-                if (!ile.match(token, etag)) {
-                    log.debug("match: Entry "+String.valueOf(i)+"-"+ile+" does not match");
-                    return false;
-                }
-            }
-            // invariant: all entries matched
-
-            return true;
-        }
-    }
-
-    /**
-     * The <code>IfHeaderInterface</code> interface abstracts away the difference of
-     * tagged and untagged <em>If</em> header lists. The single method provided
-     * by this interface is to check whether a request may be applied to a
-     * resource with given token and etag.
-     */
-    private static interface IfHeaderInterface {
-
-        /**
-         * Matches the resource, token, and etag against this
-         * <code>IfHeaderInterface</code> instance.
-         *
-         * @param resource The resource to match this instance against. This
-         *      must be absolute URI of the resource as defined in Section 3
-         *      (URI Syntactic Components) of RFC 2396 Uniform Resource
-         *      Identifiers (URI): Generic Syntax.
-         * @param token The resource's lock token to match
-         * @param etag The resource's etag to match
-         *
-         * @return <code>true</code> if the header matches the resource with
-         *      token and etag, which means that the request is applicable
-         *      to the resource according to the <em>If</em> header.
-         */
-        public boolean matches(String resource, String token, String etag);
-    }
-
-    /**
-     * The <code>IfHeaderList</code> clss implements the {@link IfHeaderInterface}
-     * interface to support untagged lists of {@link IfList}s. This class
-     * implements the data container for the production :
-     * <pre>
-         Untagged = { "(" IfList ")" } .
-     * </pre>
-     */
-    private static class IfHeaderList extends ArrayList implements IfHeaderInterface {
-
-        /**
-         * Matches a list of {@link IfList}s against the token and etag. If any of
-         * the {@link IfList}s matches, the method returns <code>true</code>.
-         * On the other hand <code>false</code> is only returned if non of the
-         * {@link IfList}s match.
-         *
-         * @param resource The resource to match, which is ignored by this
-         *      implementation. A value of <code>null</code> is therefor
-         *      acceptable.
-         * @param token The token to compare.
-         * @param etag The ETag value to compare.
-         *
-         * @return <code>True</code> if any of the {@link IfList}s matches the token
-         *      and etag, else <code>false</code> is returned.
-         */
-        public boolean matches(String resource, String token, String etag) {
-            log.debug("matches: Trying to match token="+token+", etag="+etag);
-
-            for (int i=0; i < size(); i++) {
-                IfList il = (IfList) get(i);
-                if (il.match(token, etag)) {
-                    log.debug("matches: Found match with "+il);
-                    return true;
-                }
-            }
-            // invariant: no match found
-
-            return false;
-        }
-    }
-
-    /**
-     * The <code>IfHeaderMap</code> clss implements the {@link IfHeaderInterface}
-     * interface to support tagged lists of {@link IfList}s. This class
-     * implements the data container for the production :
-     * <pre>
-         Tagged = { "<" Word ">" "(" IfList ")" } .
-     * </pre>
-     */
-    private static class IfHeaderMap extends HashMap implements IfHeaderInterface {
-
-        /**
-         * Matches the token and etag for the given resource. If the resource is
-         * not mentioned in the header, a match is assumed and <code>true</code>
-         * is returned in this case.
-         *
-         * @param resource The absolute URI of the resource for which to find
-         *      a match.
-         * @param token The token to compare.
-         * @param etag The etag to compare.
-         *
-         * @return <code>true</code> if either no entry exists for the resource
-         *      or if the entry for the resource matches the token and etag.
-         */
-        public boolean matches(String resource, String token, String etag) {
-            log.debug("matches: Trying to match resource="+resource+", token="+token+","+etag);
-
-            IfHeaderList list = (IfHeaderList) get(resource);
-            if (list == null) {
-                log.debug("matches: No entry for tag "+resource+", assuming match");
-                return true;
-            } else {
-                return list.matches(resource, token, etag);
-            }
-        }
-    }
-}
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/header/LabelHeader.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/header/LabelHeader.java
deleted file mode 100644
index e57d988..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/header/LabelHeader.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.header;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.util.Text;
-import org.apache.jackrabbit.webdav.version.DeltaVConstants;
-import org.apache.jackrabbit.webdav.WebdavRequest;
-
-/**
- * <code>LabelHeader</code>...
- */
-public class LabelHeader implements Header {
-
-    private static Logger log = Logger.getLogger(LabelHeader.class);
-
-    private final String label;
-
-    public LabelHeader(String label) {
-        if (label == null) {
-            throw new IllegalArgumentException("null is not a valid label.");
-        }
-        this.label = label;
-    }
-
-    public String getLabel() {
-        return label;
-    }
-
-    public String getHeaderName() {
-        return DeltaVConstants.HEADER_LABEL;
-    }
-
-    public String getHeaderValue() {
-        return Text.escape(label);
-    }
-
-    public static LabelHeader parse(WebdavRequest request) {
-        String hv = request.getHeader(DeltaVConstants.HEADER_LABEL);
-        if (hv == null) {
-            return null;
-        } else {
-            return new LabelHeader(Text.unescape(hv));
-        }
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/header/OverwriteHeader.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/header/OverwriteHeader.java
deleted file mode 100644
index 9847a81..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/header/OverwriteHeader.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.header;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.DavConstants;
-
-import javax.servlet.http.HttpServletRequest;
-
-/**
- * <code>OverwriteHeader</code>...
- */
-public class OverwriteHeader implements Header {
-
-    private static Logger log = Logger.getLogger(OverwriteHeader.class);
-
-    public static final String OVERWRITE_TRUE = "T";
-    public static final String OVERWRITE_FALSE = "F";
-
-    private boolean doOverwrite;
-
-    public OverwriteHeader(boolean doOverwrite) {
-        this.doOverwrite = doOverwrite;
-    }
-
-    public OverwriteHeader(HttpServletRequest request) {
-        String overwriteHeader = request.getHeader(DavConstants.HEADER_OVERWRITE);
-        if (overwriteHeader != null) {
-            doOverwrite = overwriteHeader.equalsIgnoreCase(OVERWRITE_TRUE);
-        }
-    }
-
-    public String getHeaderName() {
-        return DavConstants.HEADER_OVERWRITE;
-    }
-
-    public String getHeaderValue() {
-        return (doOverwrite) ? OVERWRITE_TRUE : OVERWRITE_FALSE;
-    }
-
-    public boolean isOverwrite() {
-        return doOverwrite;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/header/TimeoutHeader.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/header/TimeoutHeader.java
deleted file mode 100644
index 82a1bbd..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/header/TimeoutHeader.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.header;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.DavConstants;
-
-import javax.servlet.http.HttpServletRequest;
-
-/**
- * <code>TimeoutHeader</code>...
- */
-public class TimeoutHeader implements Header, DavConstants {
-
-    private static Logger log = Logger.getLogger(TimeoutHeader.class);
-
-    private final long timeout;
-
-    public TimeoutHeader(long timeout) {
-        this.timeout = timeout;
-    }
-
-    public String getHeaderName() {
-        return DavConstants.HEADER_TIMEOUT;
-    }
-
-    public String getHeaderValue() {
-        return String.valueOf(timeout);
-    }
-
-    public long getTimeout() {
-        return timeout;
-    }
-
-    /**
-     * Parse the request timeout header and convert the timeout value
-     * into a long indicating the number of milliseconds until expiration time
-     * is reached.<br>
-     * NOTE: If the requested timeout is 'infinite' {@link Long.MAX_VALUE}
-     * is returned. If the header is missing or is in an invalid format that
-     * cannot be parsed, the default value is returned.
-     *
-     * @param request
-     * @param defaultValue
-     * @return long representing the timeout present in the header or the default
-     * value if the header is missing or could not be parsed.
-     */
-    public static TimeoutHeader parse(HttpServletRequest request, long defaultValue) {
-        String timeoutStr = request.getHeader(HEADER_TIMEOUT);
-        long timeout = defaultValue;
-        if (timeoutStr != null && timeoutStr.length() > 0) {
-            int secondsInd = timeoutStr.indexOf("Second-");
-            if (secondsInd >= 0) {
-                secondsInd += 7; // read over "Second-"
-                int i = secondsInd;
-                while (i < timeoutStr.length() && Character.isDigit(timeoutStr.charAt(i))) {
-                    i++;
-                }
-                try {
-                    timeout = 1000L * Long.parseLong(timeoutStr.substring(secondsInd, i));
-                } catch (NumberFormatException ignore) {
-                    // ignore and return 'undefined' timeout
-                    log.error("Invalid timeout format: " + timeoutStr);
-                }
-            } else if (timeoutStr.equalsIgnoreCase(TIMEOUT_INFINITE)) {
-                timeout = INFINITE_TIMEOUT;
-            }
-        }
-        return new TimeoutHeader(timeout);
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/io/InputContext.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/io/InputContext.java
deleted file mode 100644
index c2a8c80..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/io/InputContext.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.io;
-
-import java.io.InputStream;
-
-/**
- * <code>InputContext</code>...
- */
-public interface InputContext {
-
-    /**
-     * Return true, if there are any data to be imported (and not only properties)
-     *
-     * @return
-     */
-    public boolean hasStream();
-
-    /**
-     * Returns the input stream of the resource to import.
-     *
-     * @return the input stream.
-     */
-    public InputStream getInputStream();
-
-    /**
-     * Returns the modification time of the resource or the current time if
-     * the modification time has not been set.
-     *
-     * @return the modification time.
-     */
-    public long getModificationTime();
-
-    /**
-     * Returns the content language or <code>null</code>
-     *
-     * @return contentLanguage
-     */
-    public String getContentLanguage();
-
-    /**
-     * Returns the length of the data or -1 if the contentlength could not be
-     * determined.
-     *
-     * @return the content length
-     */
-    public long getContentLength();
-
-    /**
-     * Return the content type or <code>null</code>
-     *
-     * @return
-     */
-    public String getContentType();
-
-    /**
-     * Returns the value of the given property or <code>null</code> if this property does
-     * not exist.
-     *
-     * @param propertyName
-     * @return String property value or <code>null</code>
-     */
-    public String getProperty(String propertyName);
-}
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/io/InputContextImpl.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/io/InputContextImpl.java
deleted file mode 100644
index 4dcca83..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/io/InputContextImpl.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.io;
-
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.log4j.Logger;
-
-import javax.servlet.http.HttpServletRequest;
-import java.io.InputStream;
-import java.util.Date;
-
-/**
- * <code>InputContextImpl</code> class encapsulates the <code>InputStream</code>
- * and some header values as present in the POST, PUT or MKCOL request.
- */
-public class InputContextImpl implements InputContext {
-
-    private static Logger log = Logger.getLogger(InputContextImpl.class);
-
-    private final HttpServletRequest request;
-    private final InputStream in;
-
-    public InputContextImpl(HttpServletRequest request, InputStream in) {
-        if (request == null) {
-            throw new IllegalArgumentException("DavResource and Request must not be null.");
-        }
-
-        this.request = request;
-        this.in = in;
-    }
-
-    public boolean hasStream() {
-        return in != null;
-    }
-
-    /**
-     * Returns the input stream of the resource to import.
-     *
-     * @return the input stream.
-     */
-    public InputStream getInputStream() {
-        return in;
-    }
-
-    public long getModificationTime() {
-        return new Date().getTime();
-    }
-
-    /**
-     * Returns the content language or <code>null</code>.
-     *
-     * @return contentLanguage
-     */
-    public String getContentLanguage() {
-        return request.getHeader(DavConstants.HEADER_CONTENT_LANGUAGE);
-    }
-
-    public long getContentLength() {
-        int length = request.getIntHeader(DavConstants.HEADER_CONTENT_LENGTH);
-        return Long.parseLong(length + "");
-    }
-
-    public String getContentType() {
-        return request.getHeader(DavConstants.HEADER_CONTENT_TYPE);
-    }
-
-    public String getProperty(String propertyName) {
-        return request.getHeader(propertyName);
-    }
-}
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/io/OutputContext.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/io/OutputContext.java
deleted file mode 100644
index 77413c5..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/io/OutputContext.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.io;
-
-import java.io.OutputStream;
-
-/**
- * <code>OutputContext</code>...
- */
-public interface OutputContext {
-
-    /**
-     * Return true if the given export context can provide an output stream
-     */
-    public boolean hasStream();
-
-    /**
-     * Return the output stream to be used for the export or <code>null</code>
-     *
-     * @return
-     */
-    public OutputStream getOutputStream();
-
-    /**
-     * Sets the content language.
-     *
-     * @param contentLanguage
-     */
-    public void setContentLanguage(String contentLanguage);
-
-    /**
-     * Sets the length of the data.
-     *
-     * @param contentLength the content length
-     */
-    public void setContentLength(long contentLength);
-
-    /**
-     * Set the content type for the resource content
-     *
-     * @param contentType
-     */
-    public void setContentType(String contentType);
-    
-    /**
-     * Sets the modification time of the resource
-     *
-     * @param modificationTime the modification time
-     */
-    public void setModificationTime(long modificationTime);
-
-    /**
-     * Sets the ETag of the resource. A successfull export command
-     * may set this member.
-     *
-     * @param etag the ETag
-     */
-    public void setETag(String etag);
-
-    /**
-     * Allows to set additional properties that are not covered by an extra setter
-     * method.
-     *
-     * @param propertyName
-     * @param propertyValue
-     */
-    public void setProperty(String propertyName, String propertyValue);
-}
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/io/OutputContextImpl.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/io/OutputContextImpl.java
deleted file mode 100644
index bcd7aa1..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/io/OutputContextImpl.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.io;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.DavConstants;
-
-import javax.servlet.http.HttpServletResponse;
-import java.io.OutputStream;
-
-/**
- * <code>OutputContextImpl</code>...
- */
-public class OutputContextImpl implements OutputContext {
-
-    private static Logger log = Logger.getLogger(OutputContextImpl.class);
-
-    private final HttpServletResponse response;
-    private final OutputStream out;
-
-    public OutputContextImpl(HttpServletResponse response, OutputStream out) {
-        if (response == null) {
-            throw new IllegalArgumentException("Response must not be null.");
-        }
-
-        this.response = response;
-        this.out = out;
-    }
-
-    public boolean hasStream() {
-        return out != null;
-    }
-
-    public OutputStream getOutputStream() {
-        return out;
-    }
-
-    public void setContentLanguage(String contentLanguage) {
-        if (contentLanguage != null) {
-            response.setHeader(DavConstants.HEADER_CONTENT_LANGUAGE, contentLanguage);
-        }
-    }
-
-    public void setContentLength(long contentLength) {
-        int length = Integer.parseInt(contentLength + "");
-        if (length >= 0) {
-            response.setContentLength(length);
-        }
-    }
-
-    public void setContentType(String contentType) {
-        if (contentType != null) {
-            response.setContentType(contentType);
-        }
-    }
-
-    public void setModificationTime(long modificationTime) {
-        if (modificationTime >= 0) {
-            response.addDateHeader(DavConstants.HEADER_LAST_MODIFIED, modificationTime);
-        }
-    }
-
-    public void setETag(String etag) {
-        if (etag != null) {
-            response.setHeader(DavConstants.HEADER_ETAG, etag);
-        }
-    }
-
-    public void setProperty(String propertyName, String propertyValue) {
-        if (propertyName != null && propertyValue != null) {
-            response.setHeader(propertyName, propertyValue);
-        }
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/AbstractActiveLock.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/AbstractActiveLock.java
deleted file mode 100644
index f568198..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/AbstractActiveLock.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.lock;
-
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-/**
- * <code>AbstractActiveLock</code>...
- */
-public abstract class AbstractActiveLock implements ActiveLock, DavConstants {
-
-    /**
-     * Returns the default Xml representation of the 'activelock' element
-     * as defined by RFC 2518.
-     *
-     * @return Xml representation
-     * @param document
-     */
-    public Element toXml(Document document) {
-        Element activeLock = DomUtil.createElement(document, XML_ACTIVELOCK, NAMESPACE);
-
-        // lockscope property
-        activeLock.appendChild(getScope().toXml(document));
-        // locktype property
-        activeLock.appendChild(getType().toXml(document));
-        // depth
-        activeLock.appendChild(DomUtil.depthToXml(isDeep(), document));
-        // timeout
-        long timeout = getTimeout();
-        if (!isExpired() && timeout != UNDEFINED_TIMEOUT) {
-            activeLock.appendChild(DomUtil.timeoutToXml(timeout, document));
-        }
-
-        // owner
-        if (getOwner() != null) {
-            DomUtil.addChildElement(activeLock, XML_OWNER, NAMESPACE, getOwner());
-        }
-
-        // locktoken
-        if (getToken() != null) {
-            Element lToken = DomUtil.addChildElement(activeLock, XML_LOCKTOKEN, NAMESPACE);
-            lToken.appendChild(DomUtil.hrefToXml(getToken(), document));
-        }
-        return activeLock;
-    }
-
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/AbstractLockEntry.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/AbstractLockEntry.java
deleted file mode 100644
index 8b86556..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/AbstractLockEntry.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.lock;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-/**
- * <code>AbstractLockEntry</code> provides the generic {@link org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml} method.
- */
-public abstract class AbstractLockEntry implements LockEntry, DavConstants {
-
-    private static Logger log = Logger.getLogger(AbstractLockEntry.class);
-
-    /**
-     * Returns the Xml representation of this <code>LockEntry</code>.
-     *
-     * @return Xml representation
-     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
-     * @param document
-     */
-    public Element toXml(Document document) {
-        Element entry = DomUtil.createElement(document, XML_LOCKENTRY, NAMESPACE);
-        entry.appendChild(getScope().toXml(document));
-        entry.appendChild(getType().toXml(document));
-        return entry;
-    }
-
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/ActiveLock.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/ActiveLock.java
deleted file mode 100644
index 8d1e78d..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/ActiveLock.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.lock;
-
-import org.apache.jackrabbit.webdav.xml.XmlSerializable;
-
-/**
- * <code>ActiveLock</code> encapsulates the lock information for a
- * {@link org.apache.jackrabbit.webdav.DavResource}.
- */
-public interface ActiveLock extends XmlSerializable {
-
-    /**
-     * Return true, if the given token matches the lock token present in this
-     * lock thus indicating that any lock relevant operation should not fail
-     * due to a lock.
-     *
-     * @param lockToken to be checked
-     * @return true if the given lock token matches.
-     */
-    public boolean isLockedByToken(String lockToken);
-
-    /**
-     * Returns true, if this lock is already expired.
-     *
-     * @return true if the lock is expired
-     */
-    public boolean isExpired();
-
-    /**
-     * Return the lock token.
-     *
-     * @return token string representing the lock token.
-     */
-    public String getToken();
-
-    /**
-     * Return the name (or id) of the lock owner.
-     *
-     * @return name (or id) of the lock owner.
-     */
-    public String getOwner();
-
-    /**
-     * Set the name (or id) of the lock owner
-     *
-     * @param owner
-     */
-    public void setOwner(String owner);
-
-    /**
-     * Return the number of milliseconds the lock will live until it is expired
-     * or -1 if the timeout is not available (or the client is not allowed
-     * to retrieve it).
-     *
-     * @return
-     */
-    public long getTimeout();
-
-    /**
-     * Defines the number of milliseconds until the timeout is reached.
-     *
-     * @param timeout
-     */
-    public void setTimeout(long timeout);
-
-    /**
-     * Return true if the lock is deep.
-     *
-     * @return true if the lock is deep.
-     */
-    public boolean isDeep();
-
-    /**
-     * Set the lock deepness.
-     *
-     * @param isDeep
-     */
-    public void setIsDeep(boolean isDeep);
-
-    /**
-     * Return the type of this lock.
-     *
-     * @return type
-     */
-    public Type getType();
-
-    /**
-     * Return the scope of this lock.
-     *
-     * @return scope
-     */
-    public Scope getScope();
-}
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/DefaultActiveLock.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/DefaultActiveLock.java
deleted file mode 100644
index cce792f..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/DefaultActiveLock.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.lock;
-
-import org.apache.jackrabbit.uuid.UUID;
-import org.apache.jackrabbit.webdav.DavConstants;
-
-/**
- * <code>DefaultActiveLock</code> implements the <code>ActiveLock</code> interface
- * and represents an exclusive write lock with a random uuid lock token.
- * Lock owner, timeout and depth is retrieved from the {@link LockInfo} object
- * passed in the constructor. If the lockinfo is null, the following default
- * values are set:<pre>
- * - timeout is set to infinity.
- * - isDeep is set to true.
- * <pre>
- */
-public class DefaultActiveLock extends AbstractActiveLock {
-
-    private final String token = DavConstants.OPAQUE_LOCK_TOKEN_PREFIX + UUID.randomUUID().toString();
-    private String owner;
-    private boolean isDeep = true; // deep by default
-    private long expirationTime = DavConstants.INFINITE_TIMEOUT; // never expires by default;
-
-    /**
-     * Create a new <code>DefaultActiveLock</code> with default values.
-     */
-    public DefaultActiveLock() {
-    }
-
-    /**
-     * Create a new lock
-     *
-     * @param lockInfo
-     * @throws IllegalArgumentException if either scope or type is invalid.
-     */
-    public DefaultActiveLock(LockInfo lockInfo) {
-        if (lockInfo != null) {
-            if (!(Type.WRITE.equals(lockInfo.getType()) && Scope.EXCLUSIVE.equals(lockInfo.getScope()))) {
-               throw new IllegalArgumentException("Only 'exclusive write' lock is allowed scope/type pair.");
-            }
-            owner = lockInfo.getOwner();
-            isDeep = lockInfo.isDeep();
-            setTimeout(lockInfo.getTimeout());
-        }
-    }
-
-    /**
-     * @see ActiveLock#isLockedByToken(String)
-     */
-    public boolean isLockedByToken(String lockToken) {
-	return (token != null) && token.equals(lockToken);
-    }
-
-    /**
-     * @see ActiveLock#isExpired()
-     */
-    public boolean isExpired() {
-	return System.currentTimeMillis() > expirationTime;
-    }
-
-    /**
-     * @see ActiveLock#getToken()
-     */
-    public String getToken() {
-	return token;
-    }
-
-    /**
-     * @see ActiveLock#getOwner()
-     */
-    public String getOwner() {
-	return owner;
-    }
-
-    /**
-     * @see ActiveLock#setOwner(String)
-     */
-    public void setOwner(String owner) {
-	this.owner = owner;
-    }
-
-    /**
-     * @see ActiveLock#getTimeout()
-     */
-    public long getTimeout() {
-	return expirationTime - System.currentTimeMillis();
-    }
-
-    /**
-     * @see ActiveLock#setTimeout(long)
-     */
-    public void setTimeout(long timeout) {
-	if (timeout > 0) {
-	    expirationTime = System.currentTimeMillis() + timeout;
-	}
-    }
-
-    /**
-     * @see ActiveLock#isDeep()
-     */
-    public boolean isDeep() {
-	return isDeep;
-    }
-
-    /**
-     * @see ActiveLock#setIsDeep(boolean)
-     */
-    public void setIsDeep(boolean isDeep) {
-	this.isDeep = isDeep;
-    }
-
-    /**
-     * This is always a write lock.
-     *
-     * @return the lock type
-     * @see Type#WRITE
-     */
-    public Type getType() {
-        return Type.WRITE;
-    }
-
-    /**
-     * This is always an exclusive lock.
-     *
-     * @return the lock scope.
-     * @see Scope#EXCLUSIVE
-     */
-    public Scope getScope() {
-        return Scope.EXCLUSIVE;
-    }
-}
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/LockDiscovery.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/LockDiscovery.java
deleted file mode 100644
index f8da505..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/LockDiscovery.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.lock;
-
-import org.apache.jackrabbit.webdav.property.DavPropertyName;
-import org.apache.jackrabbit.webdav.property.AbstractDavProperty;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Iterator;
-
-/**
- * The <code>LockDiscovery</code> class encapsulates the webdav lock discovery
- * property that is sent in the request body (PROPFIND and LOCK) and received
- * in a LOCK response body.
- */
-public class LockDiscovery extends AbstractDavProperty {
-
-    /**
-     * Listing of existing locks applied to the resource this discovery was
-     * requested for. Each entry reveals, who has a lock, what type of lock he has,
-     * the timeout type and the time remaining on the timeout, and the lock-type.
-     * NOTE, that any of the information listed may be not availble for the
-     * server is free to withhold any or all of this information.
-     */
-    private List activeLocks = new ArrayList();
-
-    /**
-     * Creates a new empty LockDiscovery property
-     */
-    public LockDiscovery() {
-        super(DavPropertyName.LOCKDISCOVERY, false);
-    }
-
-    /**
-     * Create a new LockDiscovery property
-     *
-     * @param lock
-     */
-    public LockDiscovery(ActiveLock lock) {
-        super(DavPropertyName.LOCKDISCOVERY, false);
-        addActiveLock(lock);
-    }
-
-    /**
-     * Create a new LockDiscovery property
-     *
-     * @param locks
-     */
-    public LockDiscovery(ActiveLock[] locks) {
-        super(DavPropertyName.LOCKDISCOVERY, false);
-        for (int i = 0; i < locks.length; i++) {
-            addActiveLock(locks[i]);
-        }
-    }
-
-    private void addActiveLock(ActiveLock lock) {
-        if (lock != null) {
-            activeLocks.add(lock);
-        }
-    }
-
-    /**
-     * Returns the list of active locks.
-     *
-     * @return list of active locks
-     * @see org.apache.jackrabbit.webdav.property.DavProperty#getValue()
-     */
-    public Object getValue() {
-        return activeLocks;
-    }
-
-    /**
-     * Creates a JDOM  <code>&lt;lockdiscovery&gt;</code> element in order to respond to a LOCK
-     * request or to the lockdiscovery property of a PROPFIND request.<br>
-     * NOTE: if the {@link #activeLocks} list is empty an empty lockdiscovery
-     * property is created ( <code>&lt;lockdiscovery/&gt;</code>)
-     * @return A JDOM element of the &lt;active> lock tag.
-     * @param document
-     */
-    public Element toXml(Document document) {
-        Element lockdiscovery = getName().toXml(document);
-        Iterator it = activeLocks.iterator();
-        while (it.hasNext()) {
-            ActiveLock lock = (ActiveLock) it.next();
-            lockdiscovery.appendChild(lock.toXml(document));
-	}
-	return lockdiscovery;
-    }
-
-}
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/LockEntry.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/LockEntry.java
deleted file mode 100644
index 4415eb5..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/LockEntry.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.lock;
-
-import org.apache.jackrabbit.webdav.xml.XmlSerializable;
-
-/**
- * <code>LockEntry</code>...
- */
-public interface LockEntry extends XmlSerializable {
-
-    /**
-     * Returns the type of this lock entry
-     *
-     * @return type of this lock entry.
-     */
-    public Type getType();
-
-    /**
-     * Returns the scope of this lock entry.
-     *
-     * @return scope of this lock entry.
-     */
-    public Scope getScope();
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/LockInfo.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/LockInfo.java
deleted file mode 100644
index 0651ae3..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/LockInfo.java
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.lock;
-
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.xml.XmlSerializable;
-import org.apache.jackrabbit.webdav.xml.ElementIterator;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-/**
- * <code>LockInfo</code> is a simple utility class encapsulating the information
- * passed with a LOCK request. It combines both the request body (which if present
- * is required to by a 'lockinfo' Xml element) and the lock relevant request
- * headers '{@link DavConstants#HEADER_TIMEOUT Timeout}' and
- * '{@link DavConstants#HEADER_DEPTH Depth}'.<br>
- * Note that is class is not intended to perform any validation of the information
- * given, since this left to those objects responsible for the lock creation
- * on the requested resource.
- */
-public class LockInfo implements DavConstants, XmlSerializable {
-
-    private Type type;
-    private Scope scope;
-    private String owner;
-    private boolean isDeep;
-    private long timeout;
-
-    private boolean isRefreshLock;
-
-    /**
-     * Create a new <code>LockInfo</code> used for refreshing an existing lock.
-     * 
-     * @param timeout
-     */
-    public LockInfo(long timeout) {
-        this.timeout = (timeout > 0) ? timeout : INFINITE_TIMEOUT;
-        this.isRefreshLock = true;
-    }
-
-    /**
-     * Create a new <code>LockInfo</code>
-     *
-     * @param scope
-     * @param type
-     * @param owner
-     * @param timeout
-     * @param isDeep
-     */
-    public LockInfo(Scope scope, Type type, String owner, long timeout, boolean isDeep) {
-        this.timeout = (timeout > 0) ? timeout : INFINITE_TIMEOUT;
-        this.isDeep = isDeep;
-
-        if (scope == null || type == null) {
-            this.isRefreshLock = true;
-        } else {
-            this.scope = scope;
-            this.type = type;
-            this.owner = owner;
-        }
-    }
-
-    /**
-     * Create a new <code>LockInfo</code> object from the given information. If
-     * <code>liElement</code> is <code>null</code> this lockinfo is assumed to
-     * be issued from a 'Refresh Lock' request.
-     *
-     * @param liElement 'lockinfo' element present in the request body of a LOCK request
-     * or <code>null</code> if the request was intended to refresh an existing lock.
-     * @param timeout Requested timespan until the lock should expire. A LOCK
-     * request MUST contain a '{@link DavConstants#HEADER_TIMEOUT Timeout}'
-     * according to RFC 2518.
-     * @param isDeep boolean value indicating whether the lock should be applied
-     * with depth infinity or only to the requested resource.
-     * @throws IllegalArgumentException if the <code>liElement</code> is not
-     * <code>null</null> but does not start with an 'lockinfo' element.
-     */
-    public LockInfo(Element liElement, long timeout, boolean isDeep) {
-        this.timeout = (timeout > 0) ? timeout : INFINITE_TIMEOUT;
-        this.isDeep = isDeep;
-
-        if (liElement != null) {
-            if (!DomUtil.matches(liElement, XML_LOCKINFO, NAMESPACE)) {
-                throw new IllegalArgumentException("'DAV:lockinfo' element expected.");
-            }
-
-            ElementIterator it = DomUtil.getChildren(liElement);
-            while (it.hasNext()) {
-                Element child = it.nextElement();
-                String childName = child.getLocalName();
-                if (XML_LOCKTYPE.equals(childName)) {
-                    type = Type.createFromXml(child);
-                } else if (XML_LOCKSCOPE.equals(childName)) {
-                    scope = Scope.createFromXml(child);
-                } else if (XML_OWNER.equals(childName)) {
-                    // first try if 'owner' is inside a href element
-                    owner = DomUtil.getChildTextTrim(child, XML_HREF, NAMESPACE);
-                    if (owner==null) {
-                        // otherwise: assume owner is a simple text element
-                        owner = DomUtil.getTextTrim(child);
-                    }
-                }
-            }
-            isRefreshLock = false;
-        } else {
-            isRefreshLock = true;
-        }
-    }
-
-    /**
-     * Returns the lock type or <code>null</null> if no 'lockinfo' element was
-     * passed to the constructor or did not contain an 'type' element and the
-     * type has not been set otherwise.
-     *
-     * @return type or <code>null</code>
-     */
-    public Type getType() {
-        return type;
-    }
-
-    /**
-     * Set the lock type.
-     *
-     * @param type
-     */
-    public void setType(Type type) {
-        this.type = type;
-    }
-
-    /**
-     * Return the lock scope or <code>null</null> if no 'lockinfo' element was
-     * passed to the constructor or did not contain an 'scope' element and the
-     * scope has not been set otherwise.
-     *
-     * @return scope or <code>null</code>
-     */
-    public Scope getScope() {
-        return scope;
-    }
-
-    /**
-     * Set the lock scope.
-     *
-     * @param scope
-     */
-    public void setScope(Scope scope) {
-        this.scope = scope;
-    }
-
-    /**
-     * Return the owner indicated by the corresponding child element from the
-     * 'lockinfo' element or <code>null</null> if no 'lockinfo' element was
-     * passed to the constructor or did not contain an 'owner' element.
-     *
-     * @return owner or <code>null</code>
-     */
-    public String getOwner() {
-        return owner;
-    }
-
-    /**
-     * Returns true if the lock must be applied with depth infinity.
-     *
-     * @return true if a deep lock must be created.
-     */
-    public boolean isDeep() {
-        return isDeep;
-    }
-
-    /**
-     * Returns the time until the lock is requested to expire.
-     *
-     * @return time until the lock should expire.
-     */
-    public long getTimeout() {
-        return timeout;
-    }
-
-    /**
-     * Returns true if this <code>LockInfo</code> was created for a LOCK
-     * request intended to refresh an existing lock rather than creating a
-     * new one.
-     *
-     * @return true if the corresponding LOCK request was intended to refresh
-     * an existing lock.
-     */
-    public boolean isRefreshLock() {
-        return isRefreshLock;
-    }
-
-    /**
-     * Returns the xml representation of this lock info.<br>
-     * NOTE however, that the depth and the timeout are not included
-     * in the xml. They will be passed to the server using the corresponding
-     * request headers.
-     *
-     * @param document
-     * @return xml representation of this lock info.
-     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
-     */
-    public Element toXml(Document document) {
-        if (isRefreshLock) {
-            return null;
-        } else {
-            Element lockInfo = DomUtil.createElement(document, XML_LOCKINFO, NAMESPACE);
-            lockInfo.appendChild(scope.toXml(document));
-            lockInfo.appendChild(type.toXml(document));
-            if (owner != null) {
-                DomUtil.addChildElement(lockInfo, XML_OWNER, NAMESPACE, owner);
-            }
-            return lockInfo;
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/LockManager.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/LockManager.java
deleted file mode 100644
index 3f415af..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/LockManager.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.lock;
-
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavResource;
-
-/**
- * The <code>LockManager</code> interface. 
- */
-public interface LockManager {
-
-    /**
-     * Create a new lock for the given {@link org.apache.jackrabbit.webdav.DavResource resource}.
-     *
-     * @param lockInfo
-     * @param resource
-     * @return
-     * @throws DavException
-     */
-    public ActiveLock createLock(LockInfo lockInfo, DavResource resource)
-            throws DavException;
-
-    /**
-     * Refresh the lock identified by the given lockToken and initially created
-     * on the specified resouce. The update information can be retrieved from
-     * the lockInfo object passes.
-     *
-     * @param lockInfo
-     * @param lockToken
-     * @param resource
-     * @return
-     * @throws DavException
-     */
-    public ActiveLock refreshLock(LockInfo lockInfo, String lockToken, DavResource resource)
-            throws DavException;
-
-    /**
-     * Release the lock identified by the given lockToken and initially created
-     * on the specified resouce.
-     *
-     * @param lockToken
-     * @param resource
-     * @throws DavException
-     */
-    public void releaseLock(String lockToken, DavResource resource)
-            throws DavException;
-
-    /**
-     * Retrieve the lock with the given type and scope that is applied to the
-     * given resource. The lock may be either initially created on this resource
-     * or might be inherited from an ancestor resource that hold a deep lock.
-     * If no such lock applies to the given resource <code>null</code> must be
-     * returned.
-     *
-     * @param type
-     * @param scope
-     * @param resource
-     * @return lock with the given type and scope applied to the resource or
-     * <code>null</code> if no lock applies.
-     */
-    public ActiveLock getLock(Type type, Scope scope, DavResource resource);
-
-    /**
-     * Returns true, if the the manager contains a lock for the given
-     * resource, that is hold by the specified token.
-     *
-     * @param lockToken
-     * @param resource
-     * @return true if the resource is locked by the specified token.
-     */
-    public boolean hasLock(String lockToken, DavResource resource);
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/Scope.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/Scope.java
deleted file mode 100644
index 87dfec0..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/Scope.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.lock;
-
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.xml.XmlSerializable;
-import org.apache.jackrabbit.webdav.xml.Namespace;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-import java.util.Map;
-import java.util.HashMap;
-
-/**
- * The <code>Scope</code> class abstracts the lock scope as defined by RFC 2518.
- */
-public class Scope implements XmlSerializable {
-
-    private static final Map scopes = new HashMap();
-
-    public static final Scope EXCLUSIVE = Scope.create(DavConstants.XML_EXCLUSIVE, DavConstants.NAMESPACE);
-    public static final Scope SHARED = Scope.create(DavConstants.XML_SHARED, DavConstants.NAMESPACE);
-
-    private final String localName;
-    private final Namespace namespace;
-
-    /**
-     * Private constructor
-     *
-     * @param localName
-     * @param namespace
-     */
-    private Scope(String localName, Namespace namespace) {
-        this.localName = localName;
-        this.namespace = namespace;
-    }
-
-    /**
-     * Return the Xml representation of the lock scope object as present in
-     * the LOCK request and response body and in the {@link LockDiscovery}.
-     *
-     * @return Xml representation
-     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
-     */
-    public Element toXml(Document document) {
-        Element lockScope = DomUtil.createElement(document, DavConstants.XML_LOCKSCOPE, DavConstants.NAMESPACE);
-        DomUtil.addChildElement(lockScope, localName, namespace);
-        return lockScope;
-    }
-
-    /**
-     * Returns <code>true</code> if this Scope is equal to the given one.
-     *
-     * @param obj
-     * @return
-     */
-    public boolean equals(Object obj) {
-        if (this == obj) {
-            return true;
-        }
-        if (obj instanceof Scope) {
-            Scope other = (Scope) obj;
-            return localName.equals(other.localName) && namespace.equals(other.namespace);
-        }
-        return false;
-    }
-
-    /**
-     * Create a <code>Scope</code> object from the given Xml element.
-     *
-     * @param lockScope
-     * @return Scope object.
-     */
-    public static Scope createFromXml(Element lockScope) {
-        if (lockScope != null && DavConstants.XML_LOCKSCOPE.equals(lockScope.getLocalName())) {
-            // we have the parent element and must retrieve the scope first
-            lockScope = DomUtil.getFirstChildElement(lockScope);
-        }
-        if (lockScope == null) {
-            throw new IllegalArgumentException("'null' is not a valid lock scope entry.");
-        }
-        Namespace namespace = Namespace.getNamespace(lockScope.getPrefix(), lockScope.getNamespaceURI());
-        return create(lockScope.getLocalName(), namespace);
-    }
-
-    /**
-     * Create a <code>Scope</code> object from the given name and namespace.
-     *
-     * @param localName
-     * @param namespace
-     * @return Scope object.
-     */
-    public static Scope create(String localName, Namespace namespace) {
-        String key = DomUtil.getQualifiedName(localName, namespace);
-        if (scopes.containsKey(key)) {
-            return (Scope) scopes.get(key);
-        } else {
-            Scope scope = new Scope(localName, namespace);
-            scopes.put(key, scope);
-            return scope;
-        }
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/SimpleLockManager.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/SimpleLockManager.java
deleted file mode 100644
index ccfdc81..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/SimpleLockManager.java
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.lock;
-
-import java.util.HashMap;
-import java.util.Iterator;
-
-import org.apache.jackrabbit.util.Text;
-import org.apache.jackrabbit.webdav.DavResource;
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavServletResponse;
-import org.apache.jackrabbit.webdav.DavResourceIterator;
-
-/**
- * Simple manager for webdav locks.<br>
- */
-public class SimpleLockManager implements LockManager {
-
-    /** map of locks */
-    private HashMap locks = new HashMap();
-
-    /**
-     *
-     * @param lockToken
-     * @param resource
-     * @return
-     * @see LockManager#hasLock(String, org.apache.jackrabbit.webdav.DavResource)
-     */
-    public boolean hasLock(String lockToken, DavResource resource) {
-	ActiveLock lock = (ActiveLock) locks.get(resource.getResourcePath());
-	if (lock != null && lock.getToken().equals(lockToken)) {
-	    return true;
-	}
-	return false;
-    }
-
-    /**
-     * Returns the lock applying to the given resource or <code>null</code> if
-     * no lock can be found.
-     *
-     * @param type
-     * @param scope
-     * @param resource
-     * @return lock that applies to the given resource or <code>null</code>.
-     */
-    public synchronized ActiveLock getLock(Type type, Scope scope, DavResource resource) {
-	if (!(Type.WRITE.equals(type) && Scope.EXCLUSIVE.equals(scope))) {
-	    return null;
-	}
-        return getLock(resource.getResourcePath());
-    }
-
-    /**
-     * Recursivly tries to find the lock
-     *
-     * @param path
-     * @return
-     */
-    private ActiveLock getLock(String path) {
-	ActiveLock lock = (ActiveLock) locks.get(path);
-        if (lock != null) {
-            // check if not expired
-            if (lock.isExpired()) {
-                lock = null;
-            }
-        }
-        if (lock == null) {
-            // check, if child of deep locked parent
-            if (!path.equals("/")) {
-                ActiveLock parentLock = getLock(Text.getRelativeParent(path, 1));
-                if (parentLock != null && parentLock.isDeep()) {
-                    lock = parentLock;
-                }
-            }
-        }
-        return lock;
-    }
-
-    /**
-     * Adds the lock for the given resource, replacing any existing lock.
-     *
-     * @param lockInfo
-     * @param resource being the lock holder
-     */
-    public synchronized ActiveLock createLock(LockInfo lockInfo,
-                                              DavResource resource)
-	    throws DavException {
-	if (lockInfo == null || resource == null) {
-	    throw new IllegalArgumentException("Neither lockInfo nor resource must be null.");
-	}
-
-	String resourcePath = resource.getResourcePath();
-	// test if there is already a lock present on this resource
-        ActiveLock lock = (ActiveLock) locks.get(resourcePath);
-        if (lock != null && lock.isExpired()) {
-            locks.remove(resourcePath);
-            lock = null;
-        }
-        if (lock != null) {
-	    throw new DavException(DavServletResponse.SC_LOCKED, "Resource '" + resource.getResourcePath() + "' already holds a lock.");
-	}
-	// test if the new lock would conflict with any lock inherited from the
-	// collection or with a lock present on any member resource.
-	Iterator it = locks.keySet().iterator();
-	while (it.hasNext()) {
-	    String key = (String) it.next();
-	    // TODO: is check for lock on internal-member correct?
-	    if (Text.isDescendant(key, resourcePath)) {
-		ActiveLock l = (ActiveLock) locks.get(key);
-		if (l.isDeep() || (key.equals(Text.getRelativeParent(resourcePath, 1)) && !resource.isCollection())) {
-		    throw new DavException(DavServletResponse.SC_LOCKED, "Resource '" + resource.getResourcePath() + "' already inherits a lock by its collection.");
-		}
-	    } else if (Text.isDescendant(resourcePath, key)) {
-		if (lockInfo.isDeep() || isInternalMember(resource, key)) {
-		    throw new DavException(DavServletResponse.SC_CONFLICT, "Resource '" + resource.getResourcePath() + "' cannot be locked due to a lock present on the member resource '" + key + "'.");
-		}
-
-	    }
-	}
-	lock = new DefaultActiveLock(lockInfo);
-	locks.put(resource.getResourcePath(), lock);
-	return lock;
-    }
-
-    /**
-     *
-     * @param lockInfo
-     * @param lockToken
-     * @param resource
-     * @return
-     * @throws DavException
-     * @see DavResource#refreshLock(org.apache.jackrabbit.webdav.lock.LockInfo, String)
-     */
-    public ActiveLock refreshLock(LockInfo lockInfo, String lockToken, DavResource resource)
-	    throws DavException {
-	ActiveLock lock = getLock(lockInfo.getType(), lockInfo.getScope(), resource);
-	if (lock == null) {
-	    throw new DavException(DavServletResponse.SC_PRECONDITION_FAILED);
-	} else if (!lock.getToken().equals(lockToken)) {
-	    throw new DavException(DavServletResponse.SC_LOCKED);
-	}
-        lock.setTimeout(lockInfo.getTimeout());
-	return lock;
-    }
-
-    /**
-     * Remove the lock hold by the given resource.
-     *
-     * @param lockToken
-     * @param resource that is the lock holder
-     */
-    public synchronized void releaseLock(String lockToken, DavResource resource)
-	    throws DavException {
-	if (!locks.containsKey(resource.getResourcePath())) {
-	    throw new DavException(DavServletResponse.SC_PRECONDITION_FAILED);
-	}
-	ActiveLock lock = (ActiveLock) locks.get(resource.getResourcePath());
-	if (lock.getToken().equals(lockToken)) {
-	    locks.remove(resource.getResourcePath());
-	} else {
-	    throw new DavException(DavServletResponse.SC_LOCKED);
-	}
-    }
-
-    /**
-     * Return true, if the resource with the given memberPath is a internal
-     * non-collection member of the given resource, thus affected by a
-     * non-deep lock present on the resource.
-     *
-     * @param resource
-     * @param memberPath
-     * @return
-     */
-    private static boolean isInternalMember(DavResource resource, String memberPath) {
-	if (resource.getResourcePath().equals(Text.getRelativeParent(memberPath, 1))) {
-	    // find the member with the given path
-	    DavResourceIterator it = resource.getMembers();
-	    while (it.hasNext()) {
-		DavResource member = it.nextResource();
-		if (member.getResourcePath().equals(memberPath)) {
-		    // return true if that member is not a collection
-		    return !member.isCollection();
-		}
-	    }
-	}
-	return false;
-    }
-}
-
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/SupportedLock.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/SupportedLock.java
deleted file mode 100644
index f42ceb3..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/SupportedLock.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.lock;
-
-import org.apache.jackrabbit.webdav.property.DavPropertyName;
-import org.apache.jackrabbit.webdav.property.AbstractDavProperty;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-
-/**
- * The <code>SupportedLock</code> class encapsulates the lock capabilties
- * of a resource. It is mainly responsible for generating the &lt;supportedlock>
- * property.
- */
-public class SupportedLock extends AbstractDavProperty {
-
-    /** the list of lock entries */
-    private final ArrayList entries = new ArrayList();
-
-    /**
-     * Creates a new empty SupportedLock property.
-     */
-    public SupportedLock() {
-        super(DavPropertyName.SUPPORTEDLOCK, false);
-    }
-
-    /**
-     * Adds a capability to this lock support.
-     *
-     * @param type Can currently only be 'write'
-     * @param scope Can currently only be 'exclusive' or 'shared'
-     *
-     * @throws IllegalArgumentException If an argument contains invalid string
-     */
-    public void addEntry(Type type, Scope scope) {
-        entries.add(new WriteLockEntry(type, scope));
-    }
-
-    /**
-     * Adds a capability to this lock support.
-     *
-     * @param entry specifying the type of lock that is supported by this entry.
-     * @see LockEntry
-     */
-    public void addEntry(LockEntry entry) {
-        if (entry == null) {
-            throw new IllegalArgumentException("The lock entry cannot be null.");
-        }
-        entries.add(entry);
-    }
-
-    /**
-     * Returns true if this a lock with the given type and scope is supported.
-     *
-     * @param type
-     * @param scope
-     * @return true if applying a lock with the given type and scope is basically
-     * supported.
-     */
-    public boolean isSupportedLock(Type type, Scope scope) {
-        Iterator it = entries.iterator();
-        while (it.hasNext()) {
-            LockEntry le = (LockEntry) it.next();
-            if (le.getType().equals(type) && le.getScope().equals(scope)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Returns an iterator over all supported locks.
-     *
-     * @return an iterator over all supported locks
-     */
-    public Iterator getSupportedLocks() {
-        return entries.iterator();
-    }
-
-    /**
-     * Creates a JDOM element that represents the &lt;supportedlock> tag.
-     * 
-     * @return A JDOM element of this lock support.
-     * @param document
-     */
-    public Element toXml(Document document) {
-        Element support = getName().toXml(document);
-        Iterator iter = entries.iterator();
-        while (iter.hasNext()) {
-            LockEntry le = (LockEntry) iter.next();
-            support.appendChild(le.toXml(document));
-        }
-	return support;
-    }
-
-    /**
-     * Returns the list of supported lock entries.
-     *
-     * @return list of supported lock.
-     * @see org.apache.jackrabbit.webdav.property.DavProperty#getValue()
-     */
-    public Object getValue() {
-        return entries;
-    }
-
-    /**
-     * Class representing the default lock entries defined by
-     * <a href="http://www.ietf.org/rfc/rfc2518.txt">RFC 2518</a>.
-     */
-    private final static class WriteLockEntry extends AbstractLockEntry {
-
-        /** the lock scope */
-        private final Scope scope;
-
-        /**
-         * Creates a new WriteLockEntry
-         *
-         * @param type Can currently only be
-         * {@link Type#WRITE write}
-         * @param scope Can currently only be {@link Scope#EXCLUSIVE exclusive}
-         * or {@link Scope#SHARED shared}.
-         *
-         * @throws IllegalArgumentException If an argument contains invalid string
-         */
-        WriteLockEntry(Type type, Scope scope) {
-            if (!Type.WRITE.equals(type)) {
-                throw new IllegalArgumentException("Invalid Type:" + type);
-            }
-            if (!Scope.EXCLUSIVE.equals(scope) && !Scope.SHARED.equals(scope)) {
-                throw new IllegalArgumentException("Invalid scope:" +scope);
-            }
-            this.scope = scope;
-        }
-
-        /**
-         * @return always returns {@link Type#WRITE write}.
-         * @see LockEntry#getType()
-         */
-        public Type getType() {
-            return Type.WRITE;
-        }
-
-        /**
-         * @return returns {@link Scope#EXCLUSIVE} or {@link Scope#SHARED}.
-         * @see LockEntry#getScope()
-         */
-        public Scope getScope() {
-            return scope;
-        }
-    }
-}
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/Type.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/Type.java
deleted file mode 100644
index f3a4d16..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/Type.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.lock;
-
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.apache.jackrabbit.webdav.xml.Namespace;
-import org.apache.jackrabbit.webdav.xml.XmlSerializable;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * The <code>Type</code> class encapsulates the lock type as defined by RFC 2518.
- */
-public class Type implements XmlSerializable {
-
-    private static Map types = new HashMap();
-
-    public static final Type WRITE = Type.create(DavConstants.XML_WRITE, DavConstants.NAMESPACE);
-
-    private final String localName;
-    private final Namespace namespace;
-
-    /**
-     * Private constructor.
-     *
-     * @param name
-     * @param namespace
-     */
-    private Type(String name, Namespace namespace) {
-        this.localName = name;
-        this.namespace = namespace;
-    }
-
-    /**
-     * Returns the Xml representation of this lock <code>Type</code>.
-     *
-     * @return Xml representation
-     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
-     */
-    public Element toXml(Document document) {
-        Element lockType = DomUtil.createElement(document, DavConstants.XML_LOCKTYPE, DavConstants.NAMESPACE);
-        DomUtil.addChildElement(lockType, localName, namespace);
-        return lockType;
-    }
-
-    /**
-     * Returns <code>true</code> if this Type is equal to the given one.
-     *
-     * @param obj
-     * @return
-     */
-    public boolean equals(Object obj) {
-	if (this == obj) {
-	    return true;
-	}
-	if (obj instanceof Type) {
-	    Type other = (Type) obj;
-	    return localName.equals(other.localName) && namespace.equals(other.namespace);
-	}
-	return false;
-    }
-
-    /**
-     * Create a <code>Type</code> object from the given Xml element.
-     *
-     * @param lockType
-     * @return <code>Type</code> object.
-     */
-    public static Type createFromXml(Element lockType) {
-        if (lockType != null && DavConstants.XML_LOCKTYPE.equals(lockType.getLocalName())) {
-            // we have the parent element and must retrieve the type first
-            lockType = DomUtil.getFirstChildElement(lockType);
-        }
-        if (lockType == null) {
-            throw new IllegalArgumentException("'null' is not valid lock type entry.");
-        }
-        Namespace namespace = Namespace.getNamespace(lockType.getPrefix(), lockType.getNamespaceURI());
-        return create(lockType.getLocalName(), namespace);
-    }
-
-    /**
-     * Create a <code>Type</code> object from the given localName and namespace.
-     *
-     * @param localName
-     * @param namespace
-     * @return <code>Type</code> object.
-     */
-    public static Type create(String localName, Namespace namespace) {
-        String key = DomUtil.getQualifiedName(localName, namespace);
-        if (types.containsKey(key)) {
-            return (Type) types.get(key);
-        } else {
-            Type type = new Type(localName, namespace);
-            types.put(key, type);
-            return type;
-        }
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/package.html b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/package.html
deleted file mode 100644
index b189cbf..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/lock/package.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<body>
-Provides interfaces and classes for locking related issues.
-</body>
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/EventBundle.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/EventBundle.java
deleted file mode 100644
index 74b9b06..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/EventBundle.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.observation;
-
-import org.apache.jackrabbit.webdav.xml.XmlSerializable;
-
-/**
- * <code>EventBundle</code> defines an empty interface used to represent a bundle
- * of events.
- *
- * @see EventDiscovery#addEventBundle(EventBundle) 
- */
-public interface EventBundle extends XmlSerializable {
-
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/EventDiscovery.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/EventDiscovery.java
deleted file mode 100644
index 726394d..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/EventDiscovery.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.observation;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.xml.XmlSerializable;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Iterator;
-
-/**
- * <code>EventDiscovery</code> represents the request body of a successfull
- * POLL request. It reveals all events that occured since the last POLL. The
- * definition what events that particular subscription is interested in was
- * specified with the initial SUBSCRIPTION that started the event listening.
- */
-public class EventDiscovery implements ObservationConstants, XmlSerializable {
-
-    private static Logger log = Logger.getLogger(EventDiscovery.class);
-
-    private List bundles = new ArrayList();
-
-    /**
-     * Add the Xml representation of an single 'eventBundle' listing the
-     * events that resulted from a change in the server, filtered by the
-     * restrictions present in the corresponding subscription.
-     *
-     * @param eventBundle
-     * @see Subscription
-     */
-    public void addEventBundle(EventBundle eventBundle) {
-        if (eventBundle != null) {
-            bundles.add(eventBundle);
-        }
-    }
-
-    /**
-     * Returns the Xml representation of this <code>EventDiscovery</code> as
-     * being present in the POLL response body.
-     *
-     * @return Xml representation
-     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
-     * @param document
-     */
-    public Element toXml(Document document) {
-        Element ed = DomUtil.createElement(document, XML_EVENTDISCOVERY, NAMESPACE);
-        Iterator it = bundles.iterator();
-        while (it.hasNext()) {
-            EventBundle bundle = (EventBundle)it.next();
-            ed.appendChild(bundle.toXml(document));
-        }
-        return ed;
-    }
-
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/EventType.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/EventType.java
deleted file mode 100644
index 36db5ab..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/EventType.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.observation;
-
-import org.apache.jackrabbit.webdav.xml.XmlSerializable;
-import org.apache.jackrabbit.webdav.xml.Namespace;
-
-/**
- * <code>EventType</code>...
- */
-public interface EventType extends XmlSerializable {
-
-    public String getName();
-
-    public Namespace getNamespace();
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/Filter.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/Filter.java
deleted file mode 100644
index 4d38240..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/Filter.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.observation;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.xml.XmlSerializable;
-import org.apache.jackrabbit.webdav.xml.Namespace;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-/**
- * <code>Filter</code>...
- */
-public class Filter implements XmlSerializable {
-
-    private static Logger log = Logger.getLogger(Filter.class);
-
-    private final String filterName;
-    private final Namespace filterNamespace;
-    private final String filterValue;
-
-    public Filter(String filterName, Namespace filterNamespace, String filterValue) {
-        if (filterName == null) {
-            throw new IllegalArgumentException("filterName must not be null.");
-        }
-        this.filterName = filterName;
-        this.filterNamespace = filterNamespace;
-        this.filterValue = filterValue;
-    }
-
-    public Filter(Element filterElem) {
-        filterName = filterElem.getLocalName();
-        filterNamespace = DomUtil.getNamespace(filterElem);
-        filterValue = DomUtil.getTextTrim(filterElem);
-    }
-
-    public String getName() {
-        return filterName;
-    }
-
-    public Namespace getNamespace() {
-        return filterNamespace;
-    }
-
-    public String getValue() {
-        return filterValue;
-    }
-
-    public boolean isMatchingFilter(String localName, Namespace namespace) {
-        boolean matchingNsp = (filterNamespace == null) ? namespace == null : filterNamespace.equals(namespace);
-        return filterName.equals(localName) && matchingNsp;
-    }
-
-    public Element toXml(Document document) {
-        return DomUtil.createElement(document, filterName, filterNamespace, filterValue);
-    }
-
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/ObservationConstants.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/ObservationConstants.java
deleted file mode 100644
index 77cf717..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/ObservationConstants.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.observation;
-
-import org.apache.jackrabbit.webdav.property.DavPropertyName;
-import org.apache.jackrabbit.webdav.xml.Namespace;
-
-/**
- * <code>ObservationConstants</code> interface provide constants for request
- * and response headers, Xml elements and property names used for handling
- * observation over WebDAV. There exists no public standard for this
- * functionality.
- */
-public interface ObservationConstants {
-
-    /**
-     * The namespace
-     */
-    public static final Namespace NAMESPACE = Namespace.getNamespace("dcr", "http://www.day.com/jcr/webdav/1.0");
-
-    /**
-     * The SubscriptionId request header<br>
-     */
-    public static final String HEADER_SUBSCRIPTIONID = "SubscriptionId";
-
-    /**
-     * subscription Xml element<br>
-     * Mandatory element inside the {@link #SUBSCRIPTIONDISCOVERY subscriptiondiscovery}
-     * property indicating the event listeners present for this session.<br>
-     * NOTE, that this will not reveal any subscription made by another session.
-     */
-    public static final String XML_SUBSCRIPTION = "subscription";
-    
-    /**
-     * Xml elements
-     */
-    public static final String XML_SUBSCRIPTIONINFO = "subscriptioninfo";
-
-    public static final String XML_EVENTTYPE = "eventtype";
-    public static final String XML_NOLOCAL = "nolocal";
-    public static final String XML_FILTER = "filter";
-    public static final String XML_SUBSCRIPTIONID = "subscriptionid";
-    public static final String XML_UUID = "uuid";
-    public static final String XML_NODETYPE_NAME = "nodetype-name";
-
-    public static final String XML_EVENTDISCOVERY = "eventdiscovery";
-    public static final String XML_EVENTBUNDLE = "eventbundle";
-    public static final String XML_EVENT = "event";
-    public static final String XML_EVENTUSERID = "eventuserid";
-
-    /**
-     * Element representing the 'nodeadded' event type.
-     * @see javax.jcr.observation.Event#NODE_ADDED
-     */
-    public static final String EVENT_NODEADDED = "nodeadded";
-
-    /**
-     * Element representing the 'noderemoved' event type.
-     * @see javax.jcr.observation.Event#NODE_REMOVED
-     */
-    public static final String EVENT_NODEREMOVED = "noderemoved";
-
-    /**
-     * Element representing the 'propertyadded' event type.
-     * @see javax.jcr.observation.Event#PROPERTY_ADDED
-     */
-    public static final String EVENT_PROPERTYADDED = "propertyadded";
-
-    /**
-     * Element representing the 'propertyremoved' event type.
-     * @see javax.jcr.observation.Event#PROPERTY_REMOVED
-     */
-    public static final String EVENT_PROPERTYREMOVED = "propertyremoved";
-
-    /**
-     * Element representing the 'propertychanged' event type.
-     * @see javax.jcr.observation.Event#PROPERTY_CHANGED
-     */
-    public static final String EVENT_PROPERTYCHANGED = "propertychanged";
-
-    /**
-     * The protected subscription discovery property is used to find out about
-     * existing subscriptions present on the specified resource.
-     */
-    public static final DavPropertyName SUBSCRIPTIONDISCOVERY = DavPropertyName.create("subscriptiondiscovery", NAMESPACE);
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/ObservationDavServletRequest.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/ObservationDavServletRequest.java
deleted file mode 100644
index f6c5377..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/ObservationDavServletRequest.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.observation;
-
-import org.apache.jackrabbit.webdav.DavServletRequest;
-
-/**
- * <code>ObservationDavServletRequest</code> provides extensions to the
- * {@link DavServletRequest} interface used for dealing with observation.
- */
-public interface ObservationDavServletRequest extends DavServletRequest {
-
-    /**
-     * Return the {@link ObservationConstants#HEADER_SUBSCRIPTIONID SubscriptionId header}
-     * or <code>null</code> if no such header is present.
-     *
-     * @return the {@link ObservationConstants#HEADER_SUBSCRIPTIONID SubscriptionId header}
-     */
-    public String getSubscriptionId();
-
-    /**
-     * Return a {@link SubscriptionInfo} object representing the subscription
-     * info present in the SUBSCRIBE request body or <code>null</code> if
-     * retrieving the subscription info fails.
-     *
-     * @return subscription info object encapsulating the SUBSCRIBE request body
-     * or <code>null</code> if the subscription info cannot be built.
-     */
-    public SubscriptionInfo getSubscriptionInfo();
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/ObservationDavServletResponse.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/ObservationDavServletResponse.java
deleted file mode 100644
index 8a68b97..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/ObservationDavServletResponse.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.observation;
-
-import org.apache.jackrabbit.webdav.DavServletResponse;
-
-import java.io.IOException;
-
-/**
- * <code>ObservationDavServletResponse</code> provides extensions to the
- * {@link DavServletResponse} interface used for dealing with observation.
- */
-public interface ObservationDavServletResponse extends DavServletResponse {
-
-    /**
-     * Send the response to a successful SUBSCRIBE request.
-     *
-     * @param subsription that needs to be represented in the response body.
-     * @throws IOException
-     */
-    public void sendSubscriptionResponse(Subscription subsription) throws IOException;
-
-    /**
-     * Send the response to a sucessful POLL request.
-     *
-     * @param eventdiscovery {@link EventDiscovery} object to be returned in
-     * the response body.
-     * @throws IOException
-     */
-    public void sendPollResponse(EventDiscovery eventdiscovery) throws IOException;
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/ObservationResource.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/ObservationResource.java
deleted file mode 100644
index c1af6ba..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/ObservationResource.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.observation;
-
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavResource;
-import org.apache.jackrabbit.webdav.DavSession;
-
-/**
- * <code>ObservationResource</code> extends the {@link DavResource} interface by
- * observation relevant METHODS.
- */
-public interface ObservationResource extends DavResource {
-
-    public String COMPLIANCE_CLASS = "observation";
-    public String METHODS = "SUBSCRIBE, UNSUBSCRIBE, POLL";
-
-    /**
-     * Initializes this resource.
-     *
-     * @param subsMgr subscription manager object
-     */
-    public void init(SubscriptionManager subsMgr);
-
-    /**
-     * Retrieve the <code>DavSession</code> associated with this resource.
-     *
-     * @return session object associated with this resource.
-     */
-    public DavSession getSession();
-
-    /**
-     * Subscribe this resource for event listening defined by the specified
-     * subscription info. A subscriptionId may be specified in case an existing
-     * subscription should be modified.
-     *
-     * @param info <code>SubscriptionInfo</code> object as defined by the
-     * request body and headers.
-     * @param subscriptionId or <code>null</code> if the
-     * {@link ObservationConstants#HEADER_SUBSCRIPTIONID SubscriptionId} header
-     * is missing.
-     * @return <code>Subscription</code> object in case the subscription was
-     * successful.
-     */
-    public Subscription subscribe(SubscriptionInfo info, String subscriptionId) throws DavException;
-
-    /**
-     * Unsubscribe the event listener with the given SubscriptionId.
-     *
-     * @param subscriptionId as present in the {@link ObservationConstants#HEADER_SUBSCRIPTIONID
-     * SubscriptionId} header.
-     */
-    public void unsubscribe(String subscriptionId) throws DavException;
-
-    /**
-     * Retrieve the list of events that where recorded for the event listener
-     * with the given SubscriptionId.
-     *
-     * @param subscriptionId as present in the
-     * {@link ObservationConstants#HEADER_SUBSCRIPTIONID SubscriptionId} header.
-     * @return <code>EventDiscovery</code> object
-     */
-    public EventDiscovery poll(String subscriptionId) throws DavException;
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/Subscription.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/Subscription.java
deleted file mode 100644
index a9828de..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/Subscription.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.observation;
-
-import org.apache.jackrabbit.webdav.xml.XmlSerializable;
-
-/**
- * <code>Subscription</code> represents public representation of the event
- * listener created (or modified) by a successful SUBSCRIBE request.<br>
- * Please note that this interface extends the <code>XmlSerializable</code>
- * interface. Tthe Xml representation of a <code>Subscription</code> is
- * returned in the response to a successful SUBSCRIBE request as well
- * as in a PROPFIND request. In both cases the subscription is packed into
- * a {@link SubscriptionDiscovery} property object.
- */
-public interface Subscription extends XmlSerializable {
-
-    /**
-     * Returns the id of this subscription, that must be used for unsubscribing
-     * as well as for event discovery later on.
-     *
-     * @return subscriptionId
-     */
-    public String getSubscriptionId();
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/SubscriptionDiscovery.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/SubscriptionDiscovery.java
deleted file mode 100644
index b289c5f..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/SubscriptionDiscovery.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.observation;
-
-import org.apache.jackrabbit.webdav.property.AbstractDavProperty;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-/**
- * <code>SubscriptionDiscovery</code> encapsulates the 'subscriptiondiscovery'
- * property of a webdav resource.
- */
-public class SubscriptionDiscovery extends AbstractDavProperty {
-
-    Subscription[] subscriptions = new Subscription[0];
-
-    /**
-     * Create a new <code>SubscriptionDiscovery</code> that lists the given
-     * subscriptions.
-     *
-     * @param subscriptions
-     */
-    public SubscriptionDiscovery(Subscription[] subscriptions) {
-        super(ObservationConstants.SUBSCRIPTIONDISCOVERY, true);
-        if (subscriptions != null) {
-            this.subscriptions = subscriptions;
-        }
-    }
-
-    /**
-     * Create a new <code>SubscriptionDiscovery</code> that contains a single
-     * subscription entry.
-     * 
-     * @param subscription
-     */
-    public SubscriptionDiscovery(Subscription subscription) {
-        super(ObservationConstants.SUBSCRIPTIONDISCOVERY, true);
-        if (subscription != null) {
-            this.subscriptions = new Subscription[]{subscription};
-        }
-    }
-
-    /**
-     * Returns an array of {@link Subscription}s.
-     *
-     * @return an array of {@link Subscription}s
-     * @see org.apache.jackrabbit.webdav.property.DavProperty#getValue()
-     */
-    public Object getValue() {
-        return subscriptions;
-    }
-
-    /**
-     * Returns the Xml representation of the subscription discovery.
-     *
-     * @return Xml representation
-     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
-     * @param document
-     */
-    public Element toXml(Document document) {
-        Element elem = getName().toXml(document);
-        for (int i = 0; i < subscriptions.length; i++) {
-            elem.appendChild(subscriptions[i].toXml(document));
-        }
-        return elem;
-    }
-
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/SubscriptionInfo.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/SubscriptionInfo.java
deleted file mode 100644
index 130aad0..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/SubscriptionInfo.java
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.observation;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.xml.XmlSerializable;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.apache.jackrabbit.webdav.xml.ElementIterator;
-import org.apache.jackrabbit.webdav.xml.Namespace;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * <code>SubscriptionInfo</code> class encapsulates the subscription info
- * that forms the request body of a SUBSCRIBE request.<br>
- * The following xml layout is defined for the subscription info:
- * <pre>
- * &lt;!ELEMENT subscriptioninfo ( eventtype, nolocal?, filter? ) &gt;
- * &lt;!ELEMENT eventtype ANY &gt;
- *
- * ANY defines any sequence of elements where at least one defines a valid
- * eventtype. Note that a single eventtype must not occur multiple times.
-
- * &lt;!ELEMENT nolocal EMPTY &gt;
- * &lt;!ELEMENT filter ANY &gt;
- *
- * ANY: any sequence of elements identifying a filter for event listening but
- * at least a single element.
- * </pre>
- * @see ObservationConstants#XML_SUBSCRIPTIONINFO
- */
-public class SubscriptionInfo implements ObservationConstants, XmlSerializable {
-
-    private static Logger log = Logger.getLogger(SubscriptionInfo.class);
-
-    private final EventType[] eventTypes;
-    private final Filter[] filters;
-    private final boolean noLocal;
-    private final boolean isDeep;
-    private final long timeout;
-
-    /**
-     * Create a new <code>SubscriptionInfo</code>
-     *
-     * @param eventTypes
-     * @param isDeep
-     * @param timeout
-     */
-    public SubscriptionInfo(EventType[] eventTypes, boolean isDeep, long timeout) {
-        this(eventTypes, null, false, isDeep, timeout);
-    }
-
-    /**
-     * Create a new <code>SubscriptionInfo</code>
-     *
-     * @param eventTypes
-     * @param filters
-     * @param noLocal
-     * @param isDeep
-     * @param timeout
-     */
-    public SubscriptionInfo(EventType[] eventTypes, Filter[] filters, boolean noLocal, boolean isDeep, long timeout) {
-        if (eventTypes == null || eventTypes.length == 0) {
-            throw new IllegalArgumentException("'subscriptioninfo' must at least indicate a single event type.");
-        }
-
-        this.eventTypes = eventTypes;
-        this.noLocal = noLocal;
-
-        if (filters != null) {
-            this.filters = filters;
-        } else {
-            this.filters = new Filter[0];
-        }
-
-        this.isDeep = isDeep;
-        this.timeout = timeout;
-    }
-
-    /**
-     * Create a new <code>SubscriptionInfo</code>
-     *
-     * @param reqInfo Xml element present in the request body.
-     * @param timeout as defined by the {@link org.apache.jackrabbit.webdav.DavConstants#HEADER_TIMEOUT timeout header}.
-     * @param isDeep as defined by the {@link org.apache.jackrabbit.webdav.DavConstants#HEADER_DEPTH depth header}.
-     * @throws IllegalArgumentException if the reqInfo element does not contain the mandatory elements.
-     */
-    public SubscriptionInfo(Element reqInfo, long timeout, boolean isDeep) {
-        if (!DomUtil.matches(reqInfo, XML_SUBSCRIPTIONINFO, NAMESPACE)) {
-            throw new IllegalArgumentException("Element with name 'subscriptioninfo' expected");
-        }
-        List typeList = new ArrayList();
-        Element el = DomUtil.getChildElement(reqInfo, XML_EVENTTYPE, NAMESPACE);
-        if (el != null) {
-            ElementIterator it = DomUtil.getChildren(el);
-            while (it.hasNext()) {
-                Element typeElem = it.nextElement();
-                EventType et = new SimpleEventType(typeElem.getLocalName(), DomUtil.getNamespace(typeElem));
-                typeList.add(et);
-            }
-        } else {
-            throw new IllegalArgumentException("'subscriptioninfo' must contain an 'eventtype' child element.");
-        }
-
-        if (typeList.isEmpty()) {
-            throw new IllegalArgumentException("'subscriptioninfo' must at least indicate a single event type.");
-        }
-        eventTypes = (EventType[]) typeList.toArray(new EventType[typeList.size()]);
-
-        List filters = new ArrayList();
-        el = DomUtil.getChildElement(reqInfo, XML_FILTER, NAMESPACE);
-        if (el != null) {
-            ElementIterator it = DomUtil.getChildren(el);
-            while (it.hasNext()) {
-                Filter f = new Filter(it.nextElement());
-                filters.add(f);
-            }
-        }
-        this.filters = (Filter[])filters.toArray(new Filter[filters.size()]);
-
-        this.noLocal = DomUtil.hasChildElement(reqInfo, XML_NOLOCAL, NAMESPACE);
-        this.isDeep = isDeep;
-        this.timeout = timeout;
-    }
-
-    /**
-     * Return array of event type names present in the subscription info.
-     *
-     * @return array of String defining the names of the events this subscription
-     * should listen to.
-     *
-     */
-    public EventType[] getEventTypes() {
-        return eventTypes;
-    }
-
-    /**
-     * Return all filters defined for this <code>SubscriptionInfo</code>
-     *
-     * @return all filters or an empty Filter array.
-     */
-    public Filter[] getFilters() {
-        return filters;
-    }
-
-    /**
-     * Return array of filters with the specified name.
-     *
-     * @param localName the filter elments must provide.
-     * @param namespace
-     * @return array containing the text of the filter elements with the given
-     * name.
-     */
-    public Filter[] getFilters(String localName, Namespace namespace) {
-        List l = new ArrayList();
-                for (int i = 0; i < filters.length; i++) {
-            if (filters[i].isMatchingFilter(localName, namespace)) {
-               l.add(filters[i]);
-                }
-            }
-        return (Filter[])l.toArray(new Filter[l.size()]);
-    }
-
-    /**
-     * Returns true if the {@link #XML_NOLOCAL} element is present in this
-     * subscription info.
-     *
-     * @return if {@link #XML_NOLOCAL} element is present.
-     */
-    public boolean isNoLocal() {
-        return noLocal;
-    }
-
-    /**
-     * Returns true if the {@link org.apache.jackrabbit.webdav.DavConstants#HEADER_DEPTH
-     * depths header} defined a depth other than '0'.
-     *
-     * @return true if this subscription info was created with <code>isDeep</code>
-     * true.
-     */
-    public boolean isDeep() {
-        return isDeep;
-    }
-
-    /**
-     * Return the timeout as retrieved from the request.
-     *
-     * @return timeout.
-     */
-    public long getTimeOut() {
-        return timeout;
-    }
-
-    /**
-     * Xml representation of this <code>SubscriptionInfo</code>.
-     *
-     * @return Xml representation
-     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
-     * @param document
-     */
-    public Element toXml(Document document) {
-        Element subscrInfo = DomUtil.createElement(document, XML_SUBSCRIPTIONINFO, NAMESPACE);
-        Element eventType = DomUtil.addChildElement(subscrInfo, XML_EVENTTYPE, NAMESPACE);
-        for (int i = 0; i < eventTypes.length; i++) {
-            eventType.appendChild(eventTypes[i].toXml(document));
-        }
-
-        if (filters.length > 0) {
-            Element filter = DomUtil.addChildElement(subscrInfo, XML_FILTER, NAMESPACE);
-            for (int i = 0; i < filters.length; i++) {
-                filter.appendChild(filters[i].toXml(document));
-            }
-        }
-
-        if (noLocal) {
-            DomUtil.addChildElement(subscrInfo, XML_NOLOCAL, NAMESPACE);
-        }
-        return subscrInfo;
-    }
-
-    //--------------------------------------------------------< inner class >---
-    /**
-     * Simple EventType implementation that only consists of a qualified event
-     * name.
-     */
-    private class SimpleEventType implements EventType {
-
-        private String localName;
-        private Namespace namespace;
-
-        SimpleEventType(String localName, Namespace namespace) {
-            this.localName = localName;
-            this.namespace = namespace;
-        }
-
-        public Element toXml(Document document) {
-            return DomUtil.createElement(document, localName, namespace);
-        }
-
-        public String getName() {
-            return localName;
-        }
-
-        public Namespace getNamespace() {
-            return namespace;
-        }
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/SubscriptionManager.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/SubscriptionManager.java
deleted file mode 100644
index 71d0a4e..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/SubscriptionManager.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.observation;
-
-import org.apache.jackrabbit.webdav.DavException;
-
-/**
- * <code>SubscriptionManager</code> interface.
- */
-public interface SubscriptionManager {
-
-    /**
-     * Retrieve the {@link org.apache.jackrabbit.webdav.observation.SubscriptionDiscovery} object for the given
-     * resource. Note, that the discovery object will be empty if there are
-     * no subscriptions present.
-     *
-     * @param resource
-     */
-    public SubscriptionDiscovery getSubscriptionDiscovery(ObservationResource resource);
-
-    /**
-     * Create a new <code>Subscription</code> or update an existing <code>Subscription</code>..
-     *
-     * @param info
-     * @param subscriptionId
-     * @param resource
-     * @return <code>Subscription</code> that has been created or updated
-     * @throws DavException if the subscription fails
-     */
-    public Subscription subscribe(SubscriptionInfo info, String subscriptionId,
-                                  ObservationResource resource)
-            throws DavException;
-
-    /**
-     * Unsubscribe the <code>Subscription</code> with the given id.
-     *
-     * @param subscriptionId
-     * @param resource
-     * @throws DavException
-     */
-    public void unsubscribe(String subscriptionId, ObservationResource resource)
-            throws DavException;
-
-    /**
-     * Retrieve the list of events that occured since the last poll.
-     *
-     * @param subscriptionId indentifier for the subscription
-     * @param resource
-     * @return
-     */
-    public EventDiscovery poll(String subscriptionId, ObservationResource resource)
-            throws DavException;
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/package.html b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/package.html
deleted file mode 100644
index 7ab0680..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/observation/package.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<body>
-Contains interfaces and classes related to observation, which is not covered
-by the WebDAV protocol.
-</body>
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/ordering/OrderPatch.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/ordering/OrderPatch.java
deleted file mode 100644
index 0094bf6..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/ordering/OrderPatch.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.ordering;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.xml.XmlSerializable;
-import org.apache.jackrabbit.webdav.xml.ElementIterator;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-import java.util.List;
-import java.util.ArrayList;
-
-/**
- * <code>OrderPatch</code> represents the mandatory request body of an
- * ORDERPATCH request. RFC 3648 defines the following structure for it:<br>
- * <pre>
- * &lt;!ELEMENT orderpatch (ordering-type?, order-member*) &gt;
- * &lt;!ELEMENT order-member (segment, position) &gt;
- * &lt;!ELEMENT position (first | last | before | after) &gt;
- * &lt;!ELEMENT segment (#PCDATA) &gt;
- * &lt;!ELEMENT first EMPTY &gt;
- * &lt;!ELEMENT last EMPTY &gt;
- * &lt;!ELEMENT before segment &gt;
- * &lt;!ELEMENT after segment &gt;
- * </pre>
- */
-public class OrderPatch implements OrderingConstants, XmlSerializable {
-
-    private static Logger log = Logger.getLogger(OrderPatch.class);
-
-    private Member[] instructions;
-    private String orderingType;
-
-    /**
-     * Create a new <code>OrderPath</code> object.
-     *
-     * @param orderingType
-     * @param instruction
-     */
-    public OrderPatch(String orderingType, Member instruction) {
-        this(orderingType, new Member[] {instruction});
-    }
-
-    /**
-     * Create a new <code>OrderPath</code> object.
-     *
-     * @param orderingType
-     * @param instructions
-     */
-    public OrderPatch(String orderingType, Member[] instructions) {
-        if (orderingType == null || instructions == null) {
-            throw new IllegalArgumentException("ordering type and instructions cannot be null.");
-        }
-        this.orderingType = orderingType;
-        this.instructions = instructions;
-    }
-
-    /**
-     * Return the ordering type.
-     *
-     * @return ordering type
-     */
-    public String getOrderingType() {
-        return orderingType;
-    }
-
-    /**
-     * Return an array of {@link Member} objects defining the re-ordering
-     * instructions to be applied to the requested resource.
-     *
-     * @return ordering instructions.
-     */
-    public Member[] getOrderInstructions() {
-        return instructions;
-    }
-
-    //------------------------------------------< XmlSerializable interface >---
-    /**
-     *
-     * @return
-     * @param document
-     */
-    public Element toXml(Document document) {
-        Element orderPatch = DomUtil.createElement(document, XML_ORDERPATCH, NAMESPACE);
-        // add DAV:ordering-type below DAV:orderpatch
-        Element otype = DomUtil.addChildElement(orderPatch, XML_ORDERING_TYPE, NAMESPACE);
-        otype.appendChild(DomUtil.hrefToXml(orderingType, document));
-        // add DAV:member elements below DAV:orderpatch
-        for (int i = 0; i < instructions.length; i++) {
-            orderPatch.appendChild(instructions[i].toXml(document));
-        }
-        return null;
-    }
-
-    //------------------------------------------------------< static method >---
-    /**
-     * Create a new <code>OrderPath</code> object.
-     *
-     * @param orderPatchElement
-     * @throws IllegalArgumentException if the specified Xml element was not valid.
-     */
-    public static OrderPatch createFromXml(Element orderPatchElement) {
-        if (!DomUtil.matches(orderPatchElement, XML_ORDERPATCH, NAMESPACE)) {
-            throw new IllegalArgumentException("ORDERPATH request body must start with an 'orderpatch' element.");
-        }
-
-        // retrieve the href of the orderingtype element
-        String orderingType;
-        Element otype = DomUtil.getChildElement(orderPatchElement, XML_ORDERING_TYPE, NAMESPACE);
-        if (otype != null) {
-            orderingType = DomUtil.getChildText(otype, DavConstants.XML_HREF, DavConstants.NAMESPACE);
-        } else {
-            throw new IllegalArgumentException("ORDERPATH request body must contain an 'ordering-type' child element.");
-        }
-
-        // set build the list of ordering instructions
-        List tmpList = new ArrayList();
-        ElementIterator it = DomUtil.getChildren(orderPatchElement, XML_ORDER_MEMBER, NAMESPACE);
-        while (it.hasNext()) {
-            Element el = it.nextElement();
-            try {
-                // retrieve text 'DAV:segment' child of this DAV:order-member element
-                String segment = DomUtil.getChildText(el, XML_SEGMENT, NAMESPACE);
-                // retrieve the 'DAV:position' child element
-                Position pos = Position.createFromXml(DomUtil.getChildElement(el, XML_POSITION, NAMESPACE));
-                Member om = new Member(segment, pos);
-                tmpList.add(om);
-            } catch (IllegalArgumentException e) {
-                log.error("Invalid element in 'orderpatch' request body: " + e.getMessage());
-            }
-        }
-        Member[] instructions = (Member[]) tmpList.toArray(new Member[tmpList.size()]);
-        return new OrderPatch(orderingType, instructions);
-    }
-
-    //--------------------------------------------------------------------------
-    /**
-     * Internal class <code>Member</code> represents the 'Order-Member' children
-     * elements of an 'OrderPatch' request body present in the ORDERPATCH request.
-     */
-    public static class Member implements XmlSerializable {
-
-        private String memberHandle;
-        private Position position;
-
-        /**
-         * Create a new <code>Member</code> object.
-         *
-         * @param memberHandle
-         * @param position
-         */
-        public Member(String memberHandle, Position position) {
-            this.memberHandle = memberHandle;
-            this.position = position;
-        }
-
-        /**
-         * Return the handle of the internal member to be reordered.
-         *
-         * @return handle of the internal member.
-         */
-        public String getMemberHandle() {
-            return memberHandle;
-        }
-
-        /**
-         * Return the position where the internal member identified by the
-         * member handle should be placed.
-         *
-         * @return position for the member after the request.
-         * @see #getMemberHandle()
-         */
-        public Position getPosition() {
-            return position;
-        }
-
-        //--------------------------------------< XmlSerializable interface >---
-        /**
-         * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
-         */
-        public Element toXml(Document document) {
-            Element memberElem = DomUtil.createElement(document, XML_ORDER_MEMBER, NAMESPACE);
-            DomUtil.addChildElement(memberElem, XML_SEGMENT, NAMESPACE, memberHandle);
-            memberElem.appendChild(position.toXml(document));
-            return memberElem;
-        }
-
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/ordering/OrderingConstants.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/ordering/OrderingConstants.java
deleted file mode 100644
index 2f2f83b..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/ordering/OrderingConstants.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.ordering;
-
-import org.apache.jackrabbit.webdav.property.DavPropertyName;
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.xml.Namespace;
-
-/**
- * <code>OrderingConstants</code> provide constants for request and response
- * headers, Xml elements and property names defined by
- * <a href="http://www.ietf.org/rfc/rfc3648.txt">RFC 3648</a>.
- */
-public interface OrderingConstants {
-
-    /**
-     * The namespace
-     */
-    public static final Namespace NAMESPACE = DavConstants.NAMESPACE;
-
-    /**
-     * The "Ordering-Type" request header.
-     */
-    public static final String HEADER_ORDERING_TYPE = "Ordering-Type";
-
-    /**
-     * When a new member is added to a collection with a client-maintained
-     * ordering (for example, with PUT, COPY, or MKCOL), its position in the
-     * ordering can be set with the new Position header.<br><br>
-     * <code>
-     * Position = "Position" ":" ("first" | "last" | (("before" | "after") segment))
-     * </code>
-     * <br><br>NOTE: segment is defined in section 3.3 of RFC2396.
-     */
-    public static final String HEADER_POSITION = "Position";
-
-    /**
-     * Xml elements used for reordering internal members of a collection.
-     */
-    public static final String XML_ORDERPATCH = "orderpatch";
-    public static final String XML_ORDERING_TYPE = "ordering-type";
-    public static final String XML_ORDER_MEMBER = "order-member";
-    public static final String XML_POSITION = "position";
-    public static final String XML_SEGMENT = "segment";
-
-    public static final String XML_FIRST = "first";
-    public static final String XML_LAST = "last";
-    public static final String XML_BEFORE = "before";
-    public static final String XML_AFTER = "after";
-
-    /**
-     * Constant representing the DAV:custom ordering type URI, which indicates
-     * that the collection is not ordered.
-     */
-    public static final String ORDERING_TYPE_CUSTOM = "DAV:custom";
-
-    /**
-     * Constant representing the DAV:unordered ordering type URI, which indicates
-     * that the collection is to be ordered, but the semantics of the ordering
-     * is not being advertised.
-     */
-    public static final String ORDERING_TYPE_UNORDERED = "DAV:unordered";
-
-    /**
-     * The DAV:ordering-type property indicates whether the collection is
-     * ordered and, if so, uniquely identifies the semantics of the ordering.
-     *
-     * @see OrderingType
-     */
-    public static final DavPropertyName ORDERING_TYPE = DavPropertyName.create("ordering-type", DavConstants.NAMESPACE);
-
-    /**
-     * Required live property for resources that honor the 'ordered-collections'
-     * compliance class defined by RFC 3648.<br>
-     * The supported-method-set property has been introduced with RFC 3253.
-     *
-     * @see org.apache.jackrabbit.webdav.version.DeltaVConstants#SUPPORTED_METHOD_SET
-     */
-    public static final DavPropertyName SUPPORTED_METHOD_SET = DavPropertyName.create("supported-method-set", DavConstants.NAMESPACE);
-
-    /**
-     * Required live property for resources that honor the 'ordered-collections'
-     * compliance class defined by RFC 3648.<br>
-     * The supported-live-property-set property has been introduced with RFC 3253.
-     *
-     * @see org.apache.jackrabbit.webdav.version.DeltaVConstants#SUPPORTED_LIVE_PROPERTY_SET
-     */
-    public static final DavPropertyName SUPPORTED_LIVE_PROPERTY_SET = DavPropertyName.create("supported-live-property-set", DavConstants.NAMESPACE);
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/ordering/OrderingDavServletRequest.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/ordering/OrderingDavServletRequest.java
deleted file mode 100644
index 99b9a8b..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/ordering/OrderingDavServletRequest.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.ordering;
-
-import org.apache.jackrabbit.webdav.DavServletRequest;
-import org.apache.jackrabbit.webdav.DavException;
-
-/**
- * <code>OrderingDavServletRequest</code> provides extensions to the
- * {@link DavServletRequest} interface used for ordering members of orderable
- * collections.
- */
-public interface OrderingDavServletRequest extends DavServletRequest {
-
-    /**
-     * Returns the {@link OrderingConstants#HEADER_ORDERING_TYPE Ordering-Type header}.
-     *
-     * @return the String value of the {@link OrderingConstants#HEADER_ORDERING_TYPE Ordering-Type header}.
-     */
-    public String getOrderingType();
-
-    /**
-     * Return a <code>Position</code> object encapsulating the {@link OrderingConstants#HEADER_POSITION
-     * Position header} field or <code>null</code> if no Position header is present
-     * or does not contain a valid format.
-     *
-     * @return <code>Position</code> object encapsulating the {@link OrderingConstants#HEADER_POSITION
-     * Position header}
-     */
-    public Position getPosition();
-
-    /**
-     * Return a <code>OrderPatch</code> object encapsulating the request body
-     * of an ORDERPATCH request or <code>null</code> if the request body was
-     * either missing or could not be parsed.
-     *
-     * @return <code>OrderPatch</code> object encapsulating the request body.
-     */
-    public OrderPatch getOrderPatch() throws DavException;
-
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/ordering/OrderingResource.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/ordering/OrderingResource.java
deleted file mode 100644
index 32a8063..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/ordering/OrderingResource.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.ordering;
-
-import org.apache.jackrabbit.webdav.DavResource;
-import org.apache.jackrabbit.webdav.DavException;
-
-/**
- * <code>OrderingResource</code> extends the {@link DavResource} interface by
- * METHODS relating to ordering functionality defined by
- * <a href="http://www.ietf.org/rfc/rfc3648.txt">RFC 3648</a>.
- */
-public interface OrderingResource extends DavResource {
-
-    public String COMPLIANCE_CLASS = "ordered-collections";
-    public String METHODS = "ORDERPATCH";
-
-    /**
-     * Returns true if this resources allows ordering of its internal members.
-     *
-     * @return true if internal members are orderable.
-     */
-    public boolean isOrderable();
-
-    /**
-     * Reorders the internal members of this resource according to the
-     * instructions present in the specified {@link OrderPatch} object.
-     *
-     * @param orderPatch as present in the ORDERPATCH request body.
-     * @throws DavException
-     */
-    public void orderMembers(OrderPatch orderPatch) throws DavException;
-
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/ordering/OrderingType.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/ordering/OrderingType.java
deleted file mode 100644
index 4f86249..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/ordering/OrderingType.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.ordering;
-
-import org.apache.jackrabbit.webdav.property.HrefProperty;
-
-/**
- * <code>OrderingType</code> represents the {@link #ORDERING_TYPE
- * DAV:ordering-type} property as defined by
- * <a href="http://www.ietf.org/rfc/rfc3648.txt">RFC 3648</a>. This property is
- * protected cannot be set using PROPPATCH. Its value may only be set by
- * including the Ordering-Type header with a MKCOL request or by submitting an
- * ORDERPATCH request.
- *
- * @see org.apache.jackrabbit.webdav.property.DavProperty#isProtected()
- */
-public class OrderingType extends HrefProperty implements OrderingConstants {
-
-    /**
-     * Creates a <code>OrderingType</code> with the default type (e.g. default
-     * value). The default value is specified to be {@link #ORDERING_TYPE_UNORDERED}.
-     */
-    public OrderingType() {
-        this(null);
-    }
-
-    /**
-     * Create an <code>OrderingType</code> with the given ordering.<br>
-     * NOTE: the ordering-type property is defined to be protected.
-     *
-     * @param href
-     * @see org.apache.jackrabbit.webdav.property.DavProperty#isProtected()
-     */
-    public OrderingType(String href) {
-        // spec requires that the default value is 'DAV:unordered'
-        super(ORDERING_TYPE, (href != null) ? href : ORDERING_TYPE_UNORDERED, true);
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/ordering/Position.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/ordering/Position.java
deleted file mode 100644
index 9c7f67a..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/ordering/Position.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.ordering;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.xml.XmlSerializable;
-import org.apache.jackrabbit.webdav.xml.ElementIterator;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-import java.util.Set;
-import java.util.HashSet;
-
-/**
- * <code>Position</code> encapsulates the position in ordering information
- * contained in a Webdav request. This includes both the
- * {@link OrderingConstants#HEADER_POSITION Position header} and the position
- * Xml element present in the request body of an ORDERPATCH request.
- *
- * @see OrderingConstants#HEADER_POSITION
- * @see OrderingConstants#XML_POSITION
- * @see OrderPatch
- */
-public class Position implements OrderingConstants, XmlSerializable {
-
-    private static Logger log = Logger.getLogger(Position.class);
-
-    private static final Set VALID_TYPES = new HashSet();
-    static {
-        VALID_TYPES.add(XML_FIRST);
-        VALID_TYPES.add(XML_LAST);
-        VALID_TYPES.add(XML_AFTER);
-        VALID_TYPES.add(XML_BEFORE);
-    }
-
-    private final String type;
-    private final String segment;
-
-    /**
-     * Create a new <code>Position</code> object with the specified type.
-     * Since any type except for {@link #XML_FIRST first} and {@link #XML_LAST last}
-     * must be combined with a segment, only the mentioned types are valid
-     * arguments.
-     *
-     * @param type {@link #XML_FIRST first} or {@link #XML_LAST last}
-     * @throws IllegalArgumentException if the given type is other than {@link #XML_FIRST}
-     * or {@link #XML_LAST}.
-     */
-    public Position(String type) {
-        if (!VALID_TYPES.contains(type)) {
-            throw new IllegalArgumentException("Invalid type: " + type);
-        }
-        if (!(XML_FIRST.equals(type) || XML_LAST.equals(type))) {
-            throw new IllegalArgumentException("If type is other than 'first' or 'last' a segment must be specified");
-        }
-        this.type = type;
-        this.segment = null;
-    }
-
-    /**
-     * Create a new <code>Position</code> object with the specified type and
-     * segment.
-     *
-     * @param type
-     * @param segment
-     * @throws IllegalArgumentException if the specified type and segment do not
-     * form a valid pair.
-     */
-    public Position(String type, String segment) {
-        if (!VALID_TYPES.contains(type)) {
-            throw new IllegalArgumentException("Invalid type: " + type);
-    }
-        if ((XML_AFTER.equals(type) || XML_BEFORE.equals(type)) && (segment == null || "".equals(segment))) {
-            throw new IllegalArgumentException("If type is other than 'first' or 'last' a segment must be specified");
-        }
-        this.type = type;
-        this.segment = segment;
-    }
-
-    /**
-     * Return the type of this <code>Position</code> object, which may be any
-     * of the following valid types: {@link #XML_FIRST first},
-     * {@link #XML_LAST last}, {@link #XML_AFTER after}, {@link #XML_BEFORE before}
-     *
-     * @return type
-     */
-    public String getType() {
-        return type;
-    }
-
-    /**
-     * Returns the segment used to create this <code>Position</code> object or
-     * <code>null</code> if no segment is present with the type.
-     *
-     * @return segment or <code>null</code>
-     * @see #getType()
-     */
-    public String getSegment() {
-        return segment;
-    }
-
-    //------------------------------------------< XmlSerializable interface >---
-    /**
-     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
-     * @param document
-     */
-    public Element toXml(Document document) {
-        Element pos = DomUtil.createElement(document, XML_POSITION, NAMESPACE);
-        DomUtil.addChildElement(pos, type, NAMESPACE, segment);
-        return pos;
-    }
-
-    //-----------------------------------------------------< static methods >---
-    /**
-     * Create a new <code>Position</code> object from the specified position
-     * element. The element must fulfill the following structure:<br>
-     * <pre>
-     * &lt;!ELEMENT position (first | last | before | after) &gt;
-     * &lt;!ELEMENT segment (#PCDATA) &gt;
-     * &lt;!ELEMENT first EMPTY &gt;
-     * &lt;!ELEMENT last EMPTY &gt;
-     * &lt;!ELEMENT before segment &gt;
-     * &lt;!ELEMENT after segment &gt;
-     * </pre>
-     *
-     * @param positionElement Xml element defining the position.
-     * @throws IllegalArgumentException if the given Xml element is not valid.
-     */
-    public static Position createFromXml(Element positionElement) {
-        if (!DomUtil.matches(positionElement, XML_POSITION, NAMESPACE)) {
-            throw new IllegalArgumentException("The 'DAV:position' element required.");
-        }
-        ElementIterator it = DomUtil.getChildren(positionElement);
-        while (it.hasNext()) {
-            Element el = it.nextElement();
-            String type = el.getLocalName();
-            // read the text of DAV:segment child element inside the type
-            String segmentText = DomUtil.getChildText(el, XML_SEGMENT, NAMESPACE);
-            // stop after the first iteration
-            new Position(type, segmentText);
-        }
-        throw new IllegalArgumentException("The 'DAV:position' element required with exact one child indicating the type.");
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/ordering/package.html b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/ordering/package.html
deleted file mode 100644
index d59cfbe..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/ordering/package.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<body>
-Contains interfaces and classes used to cover the functionality defined by the
-<a href="http://www.ietf.org/rfc/rfc3648.txt">RFC 3648: Web Distributed Authoring
-and Versioning (WebDAV) Ordered Collections Protocol </a>.
-</body>
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/property/AbstractDavProperty.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/property/AbstractDavProperty.java
deleted file mode 100644
index 46ed58e..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/property/AbstractDavProperty.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.property;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.xml.XmlSerializable;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.Document;
-
-import java.util.Iterator;
-import java.util.Collection;
-
-/**
- * <code>AbstractDavProperty</code> provides generic METHODS used by various
- * implementations of the {@link DavProperty} interface.
- */
-public abstract class AbstractDavProperty implements DavProperty {
-
-    private static Logger log = Logger.getLogger(AbstractDavProperty.class);
-
-    private final DavPropertyName name;
-    private final boolean isProtected;
-
-    /**
-     * Create a new <code>AbstractDavProperty</code> with the given {@link DavPropertyName}
-     * and a boolean flag indicating whether this property is protected.
-     * 
-     * @param name
-     * @param isProtected
-     */
-    public AbstractDavProperty(DavPropertyName name, boolean isProtected) {
-        this.name = name;
-        this.isProtected = isProtected;
-    }
-
-    /**
-     * Computes the hash code using this propertys name and value.
-     *
-     * @return the hash code
-     */
-    public int hashCode() {
-        int hashCode = getName().hashCode();
-        if (getValue() != null) {
-            hashCode += getValue().hashCode();
-        }
-        return hashCode % Integer.MAX_VALUE;
-    }
-
-    /**
-     * Checks if this property has the same {@link DavPropertyName name}
-     * and value as the given one.
-     *
-     * @param obj the object to compare to
-     * @return <code>true</code> if the 2 objects are equal;
-     *         <code>false</code> otherwise
-     */
-    public boolean equals(Object obj) {
-        if (obj instanceof DavProperty) {
-            DavProperty prop = (DavProperty) obj;
-            boolean equalName = getName().equals(prop.getName());
-            boolean equalValue = (getValue() == null) ? prop.getValue() == null : getValue().equals(prop.getValue());
-            return equalName && equalValue;
-        }
-        return false;
-    }
-
-
-    /**
-     * Return a JDOM element representation of this property. The value of the
-     * property will be added as text or as child element.
-     * <pre>
-     * new DavProperty("displayname", "WebDAV Directory").toXml
-     * gives a element like:
-     * &lt;D:displayname&gt;WebDAV Directory&lt;/D:displayname&gt;
-     *
-     * new DavProperty("resourcetype", new Element("collection")).toXml
-     * gives a element like:
-     * &lt;D:resourcetype&gt;&lt;D:collection/&gt;&lt;/D:resourcetype&gt;
-     *
-     * Element[] customVals = { new Element("bla", customNamespace), new Element("bli", customNamespace) };
-     * new DavProperty("custom-property", customVals, customNamespace).toXml
-     * gives an element like
-     * &lt;Z:custom-property&gt;
-     *    &lt;Z:bla/&gt;
-     *    &lt;Z:bli/&gt;
-     * &lt;/Z:custom-property&gt;
-     * </pre>
-     *
-     * @return a JDOM element of this property
-     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
-     * @param document
-     */
-    public Element toXml(Document document) {
-	Element elem = getName().toXml(document);
-        Object value = getValue();
-        // todo: improve....
-	if (value != null) {
-	    if (value instanceof XmlSerializable) {
-                elem.appendChild(((XmlSerializable)value).toXml(document));
-            } else if (value instanceof Node) {
-                Node n = document.importNode((Node)value, true);
-		elem.appendChild(n);
-	    } else if (value instanceof Node[]) {
-                for (int i = 0; i < ((Node[])value).length; i++) {
-                    Node n = document.importNode(((Node[])value)[i], true);
-                    elem.appendChild(n);
-                }
-            } else if (value instanceof Collection) {
-                Iterator it = ((Collection)value).iterator();
-                while (it.hasNext()) {
-                    Object entry = it.next();
-                    if (entry instanceof XmlSerializable) {
-                        elem.appendChild(((XmlSerializable)entry).toXml(document));
-                    } else if (entry instanceof Node) {
-                        Node n = document.importNode((Node)entry, true);
-                        elem.appendChild(n);
-                    } else {
-                        DomUtil.setText(elem, entry.toString());
-                    }
-                }
-            } else {
-                DomUtil.setText(elem, value.toString());
-	    }
-	}
-	return elem;
-    }
-
-    /**
-     * Returns the name of this property.
-     *
-     * @return name
-     * @see DavProperty#getName()
-     */
-    public DavPropertyName getName() {
-        return name;
-    }
-
-    /**
-     * Returns true if this property is protected or computed.
-     *
-     * @return true if this is a protected (or computed) property.
-     * @see org.apache.jackrabbit.webdav.property.DavProperty#isProtected()
-     */
-    public boolean isProtected() {
-        return isProtected;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/property/DavProperty.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/property/DavProperty.java
deleted file mode 100644
index ccad682..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/property/DavProperty.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.property;
-
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.xml.XmlSerializable;
-
-/**
- * The <code>Property</code> class represents a Property of a WebDAV
- * resource. The {@link #hashCode()} and {@link #equals(Object)} METHODS are
- * overridden in a way, that the name and value of the property are
- * respected. this means, an property is equal to another, if the names
- * and values are equal.<br>
- * The XML representation of a <code>DavProperty</code>:
-     * <pre>
-     * new DavProperty("displayname", "WebDAV Directory").toXml
-     * gives a element like:
-     * &lt;D:displayname&gt;WebDAV Directory&lt;/D:displayname&gt;
-     *
-     * new DavProperty("resourcetype", new Element("collection")).toXml
-     * gives a element like:
-     * &lt;D:resourcetype&gt;&lt;D:collection/&gt;&lt;/D:resourcetype&gt;
-     *
-     * Element[] customVals = { new Element("bla", customNamespace), new Element("bli", customNamespace) };
-     * new DavProperty("custom-property", customVals, customNamespace).toXml
-     * gives an element like
-     * &lt;Z:custom-property&gt;
-     *    &lt;Z:bla/&gt;
-     *    &lt;Z:bli/&gt;
-     * &lt;/Z:custom-property&gt;
-     * </pre>
-     */
-public interface DavProperty extends XmlSerializable, DavConstants {
-
-    /**
-     * Returns the name of this property
-     * 
-     * @return the name of this property
-     */
-    public DavPropertyName getName();
-
-    /**
-     * Returns the value of this property
-     *
-     * @return the value of this property
-     */
-    public Object getValue();
-
-    /**
-     * Return true if this property is protected. A protected property
-     * will not be returned in a {@link DavConstants#PROPFIND_ALL_PROP DAV:allprop}
-     * PROPFIND request and cannot be set/removed with a PROPPATCH request.
-     *
-     * @return true, if this property is protected.
-     */
-    public boolean isProtected();
-}
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/property/DavPropertyIterator.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/property/DavPropertyIterator.java
deleted file mode 100644
index 0428362..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/property/DavPropertyIterator.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.property;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-/**
- * The <code>DavPropertyIterator</code> extends the <code>Iterator</code> by
- * a property specific <code>next()</code> method.
- */
-public interface DavPropertyIterator extends Iterator {
-    /**
-     * Returns the next <code>Property</code> in the interation.
-     *
-     * @return the next <code>Property</code> in the iteration.
-     * @throws java.util.NoSuchElementException if iteration has no more elements.
-     */
-    public DavProperty nextProperty() throws NoSuchElementException;
-}
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/property/DavPropertyName.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/property/DavPropertyName.java
deleted file mode 100644
index 3e0233a..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/property/DavPropertyName.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.property;
-
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.xml.XmlSerializable;
-import org.apache.jackrabbit.webdav.xml.Namespace;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-import java.util.HashMap;
-
-/**
- * The <code>DavPropertyName</code> class reflects a Webdav property name. It
- * holds together the actualy name of the property and its namespace.
- */
-public class DavPropertyName implements DavConstants, XmlSerializable {
-
-    /** internal 'cache' of created property names */
-    private static final HashMap cache = new HashMap();
-
-    /* some standard webdav property (that have #PCDATA) */
-    public static final DavPropertyName CREATIONDATE = DavPropertyName.create(PROPERTY_CREATIONDATE);
-    public static final DavPropertyName DISPLAYNAME = DavPropertyName.create(PROPERTY_DISPLAYNAME);
-    public static final DavPropertyName GETCONTENTLANGUAGE = DavPropertyName.create(PROPERTY_GETCONTENTLANGUAGE);
-    public static final DavPropertyName GETCONTENTLENGTH = DavPropertyName.create(PROPERTY_GETCONTENTLENGTH);
-    public static final DavPropertyName GETCONTENTTYPE = DavPropertyName.create(PROPERTY_GETCONTENTTYPE);
-    public static final DavPropertyName GETETAG = DavPropertyName.create(PROPERTY_GETETAG);
-    public static final DavPropertyName GETLASTMODIFIED = DavPropertyName.create(PROPERTY_GETLASTMODIFIED);
-
-    /* some standard webdav property (that have other elements) */
-    public static final DavPropertyName LOCKDISCOVERY = DavPropertyName.create(PROPERTY_LOCKDISCOVERY);
-    public static final DavPropertyName RESOURCETYPE = DavPropertyName.create(PROPERTY_RESOURCETYPE);
-    public static final DavPropertyName SOURCE = DavPropertyName.create(PROPERTY_SOURCE);
-    public static final DavPropertyName SUPPORTEDLOCK = DavPropertyName.create(PROPERTY_SUPPORTEDLOCK);
-
-    /* property use by microsoft that are not specified in the RFC 2518 */
-    public static final DavPropertyName ISCOLLECTION = DavPropertyName.create("iscollection");
-
-    /** the name of the property */
-    private final String name;
-
-    /** the namespace of the property */
-    private final Namespace namespace;
-
-    /**
-     * Creates a new <code>DavPropertyName</code> with the given name and
-     * Namespace.
-     *
-     * @param name The local name of the new property name
-     * @param namespace The namespace of the new property name
-     *
-     * @return The WebDAV property name
-     */
-    public synchronized static DavPropertyName create(String name, Namespace namespace) {
-
-        // get (or create) map for the given namespace
-        HashMap map = (HashMap) cache.get(namespace);
-        if (map == null) {
-            map = new HashMap();
-            cache.put(namespace, map);
-        }
-        // get (or create) property name object 
-        DavPropertyName ret = (DavPropertyName) map.get(name);
-        if (ret == null) {
-            if (namespace.equals(NAMESPACE)) {
-                // ensure prefix for default 'DAV:' namespace
-                namespace = NAMESPACE;
-            }
-            ret = new DavPropertyName(name, namespace);
-            map.put(name, ret);
-        }
-        return ret;
-    }
-
-    /**
-     * Creates a new <code>DavPropertyName</code> with the given local name
-     * and the default WebDAV {@link DavConstants#NAMESPACE namespace}.
-     *
-     * @param name The local name of the new property name
-     *
-     * @return The WebDAV property name
-     */
-    public synchronized static DavPropertyName create(String name) {
-        return create(name, NAMESPACE);
-    }
-
-    /**
-     * Create a new <code>DavPropertyName</code> with the name and namespace
-     * of the given Xml element.
-     *
-     * @param nameElement
-     * @return <code>DavPropertyName</code> instance
-     */
-    public synchronized static DavPropertyName createFromXml(Element nameElement) {
-	if (nameElement == null) {
-	    throw new IllegalArgumentException("Cannot build DavPropertyName from a 'null' element.");
-	}
-	String ns = nameElement.getNamespaceURI();
-	if (ns == null) {
-	    return create(nameElement.getLocalName(), Namespace.EMPTY_NAMESPACE);
-	} else {
-	    return create(nameElement.getLocalName(), Namespace.getNamespace(nameElement.getPrefix(), ns));
-	}
-    }
-
-    /**
-     * Creates a new <code>DavPropertyName</code> with the given name and
-     * Namespace.
-     *
-     * @param name The local name of the new property name
-     * @param namespace The namespace of the new property name
-     */
-    private DavPropertyName(String name, Namespace namespace) {
-        if (name == null || namespace == null) {
-            throw new IllegalArgumentException("Name and namespace must not be 'null' for a DavPropertyName.");
-        }
-        this.name = name;
-        this.namespace = namespace;
-    }
-
-    /**
-     * Return the name of this <code>DavPropertyName</code>.
-     *
-     * @return name
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * Return the namespace of this <code>DavPropertyName</code>.
-     *
-     * @return namespace
-     */
-    public Namespace getNamespace() {
-        return namespace;
-    }
-
-    /**
-     * Computes the hash code using this propertys name and namespace.
-     *
-     * @return the hash code
-     */
-    public int hashCode() {
-        return (name.hashCode() + namespace.hashCode()) % Integer.MAX_VALUE;
-    }
-
-    /**
-     * Checks if this property has the same name and namespace as the
-     * given one.
-     *
-     * @param obj the object to compare to
-     *
-     * @return <code>true</code> if the 2 objects are equal;
-     *         <code>false</code> otherwise
-     */
-    public boolean equals(Object obj) {
-        if (obj instanceof DavPropertyName) {
-            DavPropertyName propName = (DavPropertyName) obj;
-            return  name.equals(propName.name) && namespace.equals(propName.namespace);
-        }
-        return false;
-    }
-
-    /**
-     * Returns a string representation of this property suitable for debugging
-     *
-     * @return a human readable string representation
-     */
-    public String toString() {
-        return DomUtil.getQualifiedName(name, namespace);
-    }
-
-    /**
-     * Creates a JDOM element with the name and namespace of this
-     * DavPropertyName.
-     *
-     * @return A JDOM Element.
-     * @param document
-     */
-    public Element toXml(Document document) {
-        return DomUtil.createElement(document, name, namespace);
-    }
-
-}
-
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/property/DavPropertyNameIterator.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/property/DavPropertyNameIterator.java
deleted file mode 100644
index 3fda342..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/property/DavPropertyNameIterator.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.property;
-
-import java.util.Iterator;
-
-/**
- * <code>DavPropertyNameIterator</code>...
- */
-public interface DavPropertyNameIterator extends Iterator {
-
-    public DavPropertyName nextPropertyName();
-
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/property/DavPropertyNameSet.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/property/DavPropertyNameSet.java
deleted file mode 100644
index fb0f8c1..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/property/DavPropertyNameSet.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.property;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.xml.ElementIterator;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.w3c.dom.Element;
-
-import java.util.HashSet;
-import java.util.Collection;
-import java.util.Iterator;
-
-/**
- * <code>DavPropertyNameSet</code> represents a Set of {@link DavPropertyName}
- * objects.
- */
-public class DavPropertyNameSet extends PropContainer {
-
-    private static Logger log = Logger.getLogger(DavPropertyNameSet.class);
-    private final HashSet set = new HashSet();
-
-    /**
-     * Create a new empty set.
-     */
-    public DavPropertyNameSet() {
-    }
-
-    /**
-     * Create a new <code>DavPropertyNameSet</code> with the given initial values.
-     *
-     * @param initialSet
-     */
-    public DavPropertyNameSet(DavPropertyNameSet initialSet) {
-        addAll(initialSet);
-    }
-
-    /**
-     * Create a new <code>DavPropertyNameSet</code> from the given DAV:prop
-     * element.
-     *
-     * @param propElement
-     * @throws IllegalArgumentException if the specified element is <code>null</code>
-     * or is not a DAV:prop element.
-     */
-    public DavPropertyNameSet(Element propElement) {
-        if (!DomUtil.matches(propElement, XML_PROP, NAMESPACE)) {
-            throw new IllegalArgumentException("'DAV:prop' element expected.");
-        }
-
-        // fill the set
-        ElementIterator it = DomUtil.getChildren(propElement);
-        while (it.hasNext()) {
-            add(DavPropertyName.createFromXml(it.nextElement()));
-        }
-    }
-
-    /**
-     * Adds the specified {@link DavPropertyName} object to this
-     * set if it is not already present.
-     *
-     * @param propertyName element to be added to this set.
-     * @return <tt>true</tt> if the set did not already contain the specified
-     * element.
-     */
-    public boolean add(DavPropertyName propertyName) {
-        return set.add(propertyName);
-    }
-
-    /**
-     * Add the property names contained in the specified set to this set.
-     *
-     * @param propertyNames
-     * @return true if the set has been modified by this call.
-     */
-    public boolean addAll(DavPropertyNameSet propertyNames) {
-        return set.addAll(propertyNames.getContent());
-    }
-
-    /**
-     * Removes the specified {@link DavPropertyName} object from this set.
-     *
-     * @param propertyName
-     * @return true if the given property name could be removed.
-     * @see HashSet#remove(Object)
-     */
-    public boolean remove(DavPropertyName propertyName) {
-        return set.remove(propertyName);
-    }
-
-    /**
-     * @return Iterator over all <code>DavPropertyName</code>s contained in this
-     * set.
-     */
-    public DavPropertyNameIterator iterator() {
-        return new PropertyNameIterator();
-    }
-
-    //------------------------------------------------------< PropContainer >---
-    /**
-     * @see PropContainer#contains(DavPropertyName)
-     */
-    public boolean contains(DavPropertyName name) {
-        return set.contains(name);
-    }
-
-    /**
-     * @param contentEntry NOTE that an instance of <code>DavPropertyName</code>
-     * in order to successfully add the given entry.
-     * @return true if contentEntry is an instance of <code>DavPropertyName</code>
-     * that could be added to this set. False otherwise.
-     * @see PropContainer#addContent(Object)
-     */
-    public boolean addContent(Object contentEntry) {
-        if (contentEntry instanceof DavPropertyName) {
-            return add((DavPropertyName)contentEntry);
-        }
-            return false;
-        }
-
-    /**
-     * @see PropContainer#isEmpty()
-     */
-    public boolean isEmpty() {
-        return set.isEmpty();
-    }
-
-    /**
-     * @see PropContainer#getContentSize()
-     */
-    public int getContentSize() {
-        return set.size();
-    }
-
-    /**
-     * @see PropContainer#getContent()
-     */
-    public Collection getContent() {
-        return set;
-    }
-
-    //--------------------------------------------------------< inner class >---
-    private class PropertyNameIterator implements DavPropertyNameIterator {
-
-        private Iterator iter;
-
-        private PropertyNameIterator() {
-            this.iter = set.iterator();
-        }
-
-        public DavPropertyName nextPropertyName() {
-            return (DavPropertyName)iter.next();
-        }
-
-        public void remove() {
-            iter.remove();
-        }
-
-        public boolean hasNext() {
-            return iter.hasNext();
-        }
-
-        public Object next() {
-            return iter.next();
-        }
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/property/DavPropertySet.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/property/DavPropertySet.java
deleted file mode 100644
index 212e5cc..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/property/DavPropertySet.java
+++ /dev/null
@@ -1,290 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.property;
-
-import org.apache.jackrabbit.webdav.xml.Namespace;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-/**
- * The <code>DavPropertySet</code> class represents a set of WebDAV
- * property.
- */
-public class DavPropertySet extends PropContainer {
-
-    /**
-     * the set of property
-     */
-    private final Map map = new HashMap();
-
-    /**
-     * Adds a new property to this set.
-     *
-     * @param property The property to add
-     *
-     * @return The previously assigned property or <code>null</code>.
-     */
-    public DavProperty add(DavProperty property) {
-        return (DavProperty) map.put(property.getName(), property);
-    }
-
-    /**
-     *
-     * @param pset Properties to add
-     */
-    public void addAll(DavPropertySet pset) {
-	map.putAll(pset.map);
-    }
-
-    /**
-     * Retrieves the property with the specified <code>name</code> and the
-     * default WebDAV {@link org.apache.jackrabbit.webdav.DavConstants#NAMESPACE namespace}.
-     *
-     * @param name The name of the property to retrieve
-     *
-     * @return The desired property or <code>null</code>
-     */
-    public DavProperty get(String name) {
-    	return get(DavPropertyName.create(name));
-    }
-
-    /**
-     * Retrieves the property with the specified <code>name</code> and
-     * <code>namespace</code>.
-     *
-     * @param name The name of the property to retrieve
-     * @param namespace The namespace of the property to retrieve
-     *
-     * @return The desired property or <code>null</code>
-     */
-    public DavProperty get(String name, Namespace namespace) {
-        return get(DavPropertyName.create(name, namespace));
-    }
-
-    /**
-     * Retrieves the property with the specified <code>name</code>
-     *
-     * @param name The webdav property name of the property to retrieve
-     *
-     * @return The desired property or <code>null</code>
-     */
-    public DavProperty get(DavPropertyName name) {
-    	return (DavProperty) map.get(name);
-    }
-
-
-    /**
-     * Removes the indicated property from this set.
-     *
-     * @param name The webdav property name to remove
-     *
-     * @return The removed property or <code>null</code>
-     */
-    public DavProperty remove(DavPropertyName name) {
-        return (DavProperty) map.remove(name);
-    }
-
-    /**
-     * Removes the property with the specified <code>name</code> and the
-     * default WebDAV {@link org.apache.jackrabbit.webdav.DavConstants#NAMESPACE namespace}.
-     *
-     * @param name The name of the property to remove
-     *
-     * @return The removed property or <code>null</code>
-     */
-    public DavProperty remove(String name) {
-        return remove(DavPropertyName.create(name));
-    }
-
-    /**
-     * Removes the property with the specified <code>name</code> and
-     * <code>namespace</code> from this set.
-     *
-     * @param name The name of the property to remove
-     * @param namespace The namespace of the property to remove
-     *
-     * @return The removed property or <code>null</code>
-     */
-    public DavProperty remove(String name, Namespace namespace) {
-        return remove(DavPropertyName.create(name, namespace));
-    }
-
-    /**
-     * Returns an iterator over all property in this set.
-     *
-     * @return An iterator over {@link DavProperty}.
-     */
-    public DavPropertyIterator iterator() {
-        return new PropIter();
-    }
-
-    /**
-     * Returns an iterator over all those property in this set, that have the
-     * indicated <code>namespace</code>.
-     *
-     * @param namespace The namespace of the property in the iteration.
-     *
-     * @return An iterator over {@link DavProperty}.
-     */
-    public DavPropertyIterator iterator(Namespace namespace) {
-        return new PropIter(namespace);
-    }
-
-    /**
-     * Return the names of all properties present in this set.
-     *
-     * @return array of {@link DavPropertyName property names} present in this set.
-     */
-    public DavPropertyName[] getPropertyNames() {
-        Set keySet = map.keySet();
-	return (DavPropertyName[]) keySet.toArray(new DavPropertyName[keySet.size()]);
-    }
-
-    //------------------------------------------------------< PropContainer >---
-    /**
-     * Checks if this set contains the property with the specified name.
-     *
-     * @param name The name of the property
-     * @return <code>true</code> if this set contains the property;
-     *         <code>false</code> otherwise.
-     * @see PropContainer#contains(DavPropertyName)
-     */
-    public boolean contains(DavPropertyName name) {
-        return map.containsKey(name);
-    }
-
-    /**
-     * @param contentEntry NOTE, that the given object must be an instance of
-     * <code>DavProperty</code> in order to be successfully added to this set.
-     * @return true if the specified object is an instance of <code>DavProperty</code>
-     * and false otherwise.
-     * @see PropContainer#addContent(Object)
-     */
-    public boolean addContent(Object contentEntry) {
-        if (contentEntry instanceof DavProperty) {
-            add((DavProperty)contentEntry);
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * @see PropContainer#isEmpty()
-     */
-    public boolean isEmpty() {
-        return map.isEmpty();
-    }
-
-    /**
-     * @see PropContainer#getContentSize()
-     */
-    public int getContentSize() {
-        return map.size();
-    }
-
-    /**
-     * @see PropContainer#getContent()
-     */
-    public Collection getContent() {
-        return map.values();
-    }
-
-    //---------------------------------------------------------- Inner class ---
-    /**
-     * Implementation of a DavPropertyIterator that returns webdav property.
-     * Additionally, it can only return property with the given namespace.
-     */
-    private class PropIter implements DavPropertyIterator {
-
-        /** the namespace to match agains */
-        private final Namespace namespace;
-
-        /** the internal iterator */
-        private final Iterator iterator;
-
-        /** the next property to return */
-        private DavProperty next;
-
-        /**
-         * Creates a new property iterator.
-         */
-        private PropIter() {
-            this(null);
-        }
-
-        /**
-         * Creates a new iterator with the given namespace
-         * @param namespace The namespace to match against
-         */
-	private PropIter(Namespace namespace) {
-            this.namespace = namespace;
-            iterator = map.values().iterator();
-            seek();
-        }
-
-        /**
-         * @see DavPropertyIterator#nextProperty();
-         */
-        public DavProperty nextProperty() throws NoSuchElementException {
-            if (next==null) {
-                throw new NoSuchElementException();
-            }
-            DavProperty ret = next;
-            seek();
-            return ret;
-        }
-
-        /**
-         * @see DavPropertyIterator#hasNext();
-         */
-        public boolean hasNext() {
-            return next!=null;
-        }
-
-        /**
-         * @see DavPropertyIterator#next();
-         */
-        public Object next() {
-            return nextProperty();
-        }
-
-        /**
-         * @see DavPropertyIterator#remove();
-         */
-        public void remove() {
-            throw new UnsupportedOperationException();
-        }
-
-        /**
-         * Seeks for the next valid property
-         */
-        private void seek() {
-            while (iterator.hasNext()) {
-                next = (DavProperty) iterator.next();
-                if (namespace == null || namespace.equals(next.getName().getNamespace())) {
-                    return;
-                }
-            }
-            next = null;
-        }
-    }
-}
-
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/property/DefaultDavProperty.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/property/DefaultDavProperty.java
deleted file mode 100644
index 5ffa3ab..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/property/DefaultDavProperty.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.property;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.xml.Namespace;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-
-import java.util.List;
-
-/**
- * <code>DefaultDavProperty</code>...
- */
-public class DefaultDavProperty extends AbstractDavProperty {
-
-    private static Logger log = Logger.getLogger(DefaultDavProperty.class);
-
-    /**
-     * the value of the property
-     */
-    private final Object value;
-
-    /**
-     * Creates a new WebDAV property with the given namespace, name and value.
-     * If the property is intended to be protected the isProtected flag must
-     * be set to true.
-     *
-     * @param name the name of the property
-     * @param value the value of the property
-     * @param namespace the namespace of the property
-     * @param isProtected A value of true, defines this property to be protected.
-     * It will not be returned in a {@link org.apache.jackrabbit.webdav.DavConstants#PROPFIND_ALL_PROP DAV:allprop}
-     * PROPFIND request and cannot be set/removed with a PROPPATCH request.
-     */
-    public DefaultDavProperty(String name, Object value, Namespace namespace, boolean isProtected) {
-        super(DavPropertyName.create(name, namespace), isProtected);
-        this.value = value;
-    }
-
-    /**
-     * Creates a new non-protected WebDAV property with the given namespace, name
-     * and value.
-     *
-     * @param name the name of the property
-     * @param value the value of the property
-     * @param namespace the namespace of the property
-     */
-    public DefaultDavProperty(String name, Object value, Namespace namespace) {
-        this(name, value, namespace, false);
-    }
-
-    /**
-     * Creates a new WebDAV property with the given <code>DavPropertyName</code>
-     * and value. If the property is meant to be protected the 'isProtected'
-     * flag must be set to true.
-     *
-     * @param name the name of the property
-     * @param value the value of the property
-     * @param isProtected A value of true, defines this property to be protected.
-     * It will not be returned in a {@link org.apache.jackrabbit.webdav.DavConstants#PROPFIND_ALL_PROP DAV:allprop}
-     * PROPFIND request and cannot be set/removed with a PROPPATCH request.
-     */
-    public DefaultDavProperty(DavPropertyName name, Object value, boolean isProtected) {
-        super(name, isProtected);
-        this.value = value;
-    }
-
-    /**
-     * Creates a new non- protected WebDAV property with the given
-     * <code>DavPropertyName</code> and value.
-     *
-     * @param name the name of the property
-     * @param value the value of the property
-     */
-    public DefaultDavProperty(DavPropertyName name, Object value) {
-        this(name, value, false);
-    }
-
-    /**
-     * Returns the value of this property
-     *
-     * @return the value of this property
-     */
-    public Object getValue() {
-        return value;
-    }
-
-    /**
-     * Create a new <code>DefaultDavProperty</code> instance from the given Xml
-     * element. Name and namespace of the element are building the {@link DavPropertyName},
-     * while the element's content forms the property value. The following logic
-     * is applied:
-     * <pre>
-     * - empty Element           -&gt; <code>null</code> value
-     * - single Text content     -&gt; <code>String</code> value
-     * - single non-Text content -&gt; Element.getContent(0) is used as value
-     * - other: List obtained from Element.getContent() is used as value
-     * </pre>
-     *
-     * @param propertyElement
-     * @return
-     */
-    public static DefaultDavProperty createFromXml(Element propertyElement) {
-	if (propertyElement == null) {
-	    throw new IllegalArgumentException("Cannot create a new DavProperty from a 'null' element.");
-	}
-	DavPropertyName name = DavPropertyName.createFromXml(propertyElement);
-	Object value;
-
-        if (!DomUtil.hasContent(propertyElement)) {
-		value = null;
-		} else {
-            List c = DomUtil.getContent(propertyElement);
-            if (c.size() == 1) {
-                Node n = (Node)c.get(0);
-                if (n instanceof Element) {
-                    value = n;
-                } else {
-                    value = n.getNodeValue();
-                }
-            } else /* size > 1 */ {
-		    value = c;
-		}
-	}
-	return new DefaultDavProperty(name, value, false);
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/property/HrefProperty.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/property/HrefProperty.java
deleted file mode 100644
index 8ea7d3b..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/property/HrefProperty.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.property;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-import java.util.List;
-import java.util.Iterator;
-import java.util.ArrayList;
-import java.util.Arrays;
-
-/**
- * <code>HrefProperty</code> is an extension to the common {@link DavProperty}.
- * The String representation of the property value is always displayed as text
- * inside an extra 'href' element. If the value is a String array each array
- * element is added as text to a separate 'href' element.
- *
- * @see org.apache.jackrabbit.webdav.DavConstants#XML_HREF
- * @see org.apache.jackrabbit.webdav.property.DavProperty#getValue()
- */
-public class HrefProperty extends AbstractDavProperty {
-
-    private static Logger log = Logger.getLogger(HrefProperty.class);
-
-    private final String[] value;
-
-    /**
-     * Creates a new WebDAV property with the given <code>DavPropertyName</code>
-     *
-     * @param name the name of the property
-     * @param value the value of the property
-     * @param isProtected A value of true, defines this property to be protected.
-     * It will not be returned in a {@link org.apache.jackrabbit.webdav.DavConstants#PROPFIND_ALL_PROP DAV:allprop}
-     * PROPFIND request and cannot be set/removed with a PROPPATCH request.
-     */
-    public HrefProperty(DavPropertyName name, String value, boolean isProtected) {
-        super(name, isProtected);
-        this.value = new String[]{value};
-    }
-
-    /**
-     * Creates a new WebDAV property with the given <code>DavPropertyName</code>
-     *
-     * @param name the name of the property
-     * @param value the value of the property
-     * @param isProtected A value of true, defines this property to be protected.
-     * It will not be returned in a {@link org.apache.jackrabbit.webdav.DavConstants#PROPFIND_ALL_PROP DAV:allprop}
-     * PROPFIND request and cannot be set/removed with a PROPPATCH request.
-     */
-    public HrefProperty(DavPropertyName name, String[] value, boolean isProtected) {
-        super(name, isProtected);
-        this.value = value;
-    }
-
-    /**
-     * Create a new <code>HrefProperty</code> from the specified property.
-     * Please note, that the property must have a <code>List</code> value
-     * object, consisting of {@link #XML_HREF href} <code>Element</code> entries.
-     *
-     * @param prop
-     * @throws IllegalArgumentException if the property {@link DavProperty#getValue() value}
-     * is not a <code>List</code>.
-     */
-    public HrefProperty(DavProperty prop) {
-        super(prop.getName(), prop.isProtected());
-        ArrayList hrefList = new ArrayList();
-        Object val = prop.getValue();
-        if (val instanceof List) {
-            Iterator it = ((List)val).iterator();
-            while (it.hasNext()) {
-                Object o = it.next();
-                if (o instanceof Element && XML_HREF.equals(((Element)o).getLocalName())) {
-                    String href = DomUtil.getText((Element)o);
-                    if (href != null) {
-                        hrefList.add(href);
-                    } else {
-                        log.warn("Valid DAV:href element expected instead of " + o.toString());
-                    }
-                } else {
-                    log.warn("DAV: href element expected in the content of " + getName().toString());
-                }
-            }
-        } else if (val instanceof Element && XML_HREF.equals(((Element)val).getLocalName())) {
-            String href = DomUtil.getTextTrim((Element)val);
-            if (href != null) {
-                hrefList.add(href);
-            } else {
-                log.warn("Valid DAV:href element expected instead of " + val.toString());
-            }
-        }
-        value = (String[]) hrefList.toArray(new String[hrefList.size()]);
-    }
-
-    /**
-     * Returns an Xml element with the following form:
-     * <pre>
-     * &lt;Z:name&gt;
-     *    &lt;DAV:href&gt;value&lt;/DAV:href/&gt;
-     * &lt;/Z:name&gt;
-     * </pre>
-     * where Z: represents the prefix of the namespace defined with the initial
-     * webdav property name.
-     *
-     * @return Xml representation
-     * @see org.apache.jackrabbit.webdav.xml.DomUtil#hrefToXml(String,org.w3c.dom.Document)
-     * @param document
-     */
-    public Element toXml(Document document) {
-        Element elem = getName().toXml(document);
-        Object value = getValue();
-        if (value != null) {
-            if (value instanceof String[]) {
-                String[] hrefs = (String[]) value;
-                for (int i = 0; i < hrefs.length; i++) {
-                    elem.appendChild(DomUtil.hrefToXml(hrefs[i], document));
-                }
-            } else {
-                elem.appendChild(DomUtil.hrefToXml(value.toString(), document));
-            }
-        }
-        return elem;
-    }
-
-    /**
-     * Returns an array of String.
-     *
-     * @return an array of String.
-     * @see DavProperty#getValue() 
-     */
-    public Object getValue() {
-        return value;
-    }
-
-    /**
-     * Return an array of String containg the text of those DAV:href elements
-     * that would be returned as child elements of this property on
-     * {@link org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)}
-     *
-     * @return array of href String
-     */
-    public List getHrefs() {
-        return (value != null) ? Arrays.asList(value) : new ArrayList();
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/property/PropContainer.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/property/PropContainer.java
deleted file mode 100644
index f906b67..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/property/PropContainer.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.property;
-
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.apache.jackrabbit.webdav.xml.XmlSerializable;
-import org.apache.log4j.Logger;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
-import java.util.Collection;
-import java.util.Iterator;
-
-/**
- * <code>PropContainer</code>...
- */
-public abstract class PropContainer implements XmlSerializable, DavConstants {
-
-    private static Logger log = Logger.getLogger(PropContainer.class);
-
-    /**
-     * Tries to add the specified object to the <code>PropContainer</code> and
-     * returns a boolean indicating whether the content could be added to the
-     * internal set/map.
-     *
-     * @param contentEntry
-     * @return true if the object could be added; false otherwise
-     */
-    public abstract boolean addContent(Object contentEntry);
-
-    /**
-     * Returns true if the PropContainer does not yet contain any content elements.
-     *
-     * @return true if this container is empty.
-     */
-    public abstract boolean isEmpty();
-
-    /**
-     * Returns the number of property related content elements that are present
-     * in this <code>PropContainer</code>.
-     *
-     * @return number of content elements
-     */
-    public abstract int getContentSize();
-
-    /**
-     * Returns the collection that contains all the content elements of this
-     * <code>PropContainer</code>.
-     *
-     * @return collection representing the contents of this <code>PropContainer</code>.
-     */
-    public abstract Collection getContent();
-
-    /**
-     * Returns true if this <code>PropContainer</code> contains a content element
-     * that matches the given <code>DavPropertyName</code>.
-     *
-     * @param name
-     * @return true if any of the content elements (be it a DavProperty or a
-     * DavPropertyName only) matches the given name.
-     */
-    public abstract boolean contains(DavPropertyName name);
-
-    /**
-     * Returns the xml representation of a property related set with the
-     * following format:
-     * <pre>
-     * &lt;!ELEMENT prop (ANY) &gt;
-     * where ANY consists of a list of elements each reflecting the xml
-     * representation of the entries returned by {@link #getContent()}.
-     * </pre>
-     * 
-     * @see XmlSerializable#toXml(Document)
-     */
-    public Element toXml(Document document) {
-        Element prop = DomUtil.createElement(document, XML_PROP, NAMESPACE);
-        Iterator it = getContent().iterator();
-        while (it.hasNext()) {
-            Object content = it.next();
-            if (content instanceof XmlSerializable) {
-                prop.appendChild(((XmlSerializable)content).toXml(document));
-            } else {
-                log.debug("Unexpected content in PropContainer: should be XmlSerializable.");
-            }
-        }
-        return prop;
-    }
-
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/property/ResourceType.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/property/ResourceType.java
deleted file mode 100644
index cd18ef7..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/property/ResourceType.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.property;
-
-import java.util.HashSet;
-import java.util.Set;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.jackrabbit.webdav.version.DeltaVConstants;
-import org.apache.jackrabbit.webdav.xml.XmlSerializable;
-import org.apache.jackrabbit.webdav.xml.Namespace;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-/**
- * The <code>ResourceType</code> class represents the webdav resource
- * type property. The property may contain multiple resource type
- * values. Predefined resource types are those defined by RFC2518 and RFC3253:
- * <ul>
- * <li>{@link #DEFAULT_RESOURCE the empty default resource type},</li>
- * <li>'{@link #COLLECTION DAV:collection}',</li>
- * <li>'{@link #VERSION_HISTORY DAV:version-history}',</li>
- * <li>'{@link #ACTIVITY DAV:activity}',</li>
- * <li>'{@link #BASELINE DAV:baseline}',</li>
- * </ul>
- */
-public class ResourceType extends AbstractDavProperty {
-
-    /**
-     * The default resource type
-     */
-    public static final int DEFAULT_RESOURCE = 0;
-
-    /**
-     * The collection resource type
-     */
-    public static final int COLLECTION = DEFAULT_RESOURCE + 1;
-
-    /**
-     * The version-history resource type
-     */
-    public static final int VERSION_HISTORY = COLLECTION + 1;
-
-    /**
-     * The activity resource type
-     */
-    public static final int ACTIVITY = VERSION_HISTORY + 1;
-
-    /**
-     * The baseline resource type
-     */
-    public static final int BASELINE = ACTIVITY + 1;
-
-    /**
-     * Array containing all possible resourcetype elements
-     */
-    private static final List NAMES = new ArrayList();
-    static {
-        NAMES.add(null);
-        NAMES.add(new TypeName(XML_COLLECTION, NAMESPACE));
-        NAMES.add(new TypeName(DeltaVConstants.XML_VERSION_HISTORY, DeltaVConstants.NAMESPACE));
-        NAMES.add(new TypeName(DeltaVConstants.XML_ACTIVITY, DeltaVConstants.NAMESPACE));
-        NAMES.add(new TypeName(DeltaVConstants.XML_BASELINE, DeltaVConstants.NAMESPACE));
-    };
-
-    private final int[] resourceTypes;
-
-    /**
-     * Create a single-valued resource type property
-     */
-    public ResourceType(int resourceType) {
-        this(new int[] { resourceType });
-    }
-
-    /**
-     * Create a multi-valued resource type property
-     */
-    public ResourceType(int[] resourceTypes) {
-        super(DavPropertyName.RESOURCETYPE, false);
-        for (int i=0; i<resourceTypes.length; i++) {
-            if (!isValidResourceType(resourceTypes[i])) {
-                throw new IllegalArgumentException("Invalid resource type '"+ resourceTypes[i] +"'.");
-            }
-        }
-	this.resourceTypes = resourceTypes;
-    }
-
-    /**
-     * Returns a Set of resource types each implementing the XmlSerializable
-     * interface.
-     *
-     * @return a <code>Set</code> of resource types representing this property.
-     * @see DavProperty#getValue()
-     */
-    public Object getValue() {
-        Set rTypes = new HashSet();
-        for (int i=0; i<resourceTypes.length; i++) {
-            Object n = NAMES.get(resourceTypes[i]);
-            if (n != null) {
-               rTypes.add(n);
-            }
-        }
-        return rTypes;
-    }
-
-    /**
-     * Returns the resource types specified with the constructor.
-     *
-     * @return resourceTypes
-     */
-    public int[] getResourceTypes() {
-        return resourceTypes;
-    }
-
-    /**
-     * Returns true if the given integer defines a valid resource type.
-     *
-     * @param resourceType to be validated.
-     * @return true if this is one of the predefined resource types
-     */
-    private static boolean isValidResourceType(int resourceType) {
-        if (resourceType < DEFAULT_RESOURCE || resourceType > NAMES.size()-1) {
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * Register an additional resource type
-     *
-     * @param name
-     * @param namespace
-     * @return int to be used for creation of a new <code>ResourceType</code> property
-     * that contains this type.
-     * @throws IllegalArgumentException if the given element is <code>null</code> or
-     * if the registration fails for another reason.
-     */
-    public static int registerResourceType(String name, Namespace namespace) {
-        if (name == null || namespace == null) {
-            throw new IllegalArgumentException("Cannot register a <null> resourcetype");
-        }
-        TypeName tn = new TypeName(name, namespace);
-        // avoid duplicate registrations
-        if (NAMES.contains(tn)) {
-            return NAMES.indexOf(tn);
-        }
-        // register new type
-        if (NAMES.add(tn)) {
-            return NAMES.size() - 1;
-        } else {
-            throw new IllegalArgumentException("Could not register resourcetype " +  namespace.getPrefix() + name);
-        }
-    }
-
-    //--------------------------------------------------------< inner class >---
-    /**
-     * Private inner class used to register predefined and user defined resource
-     * types.
-     */
-    private static class TypeName implements XmlSerializable {
-
-        private final String localName;
-        private final Namespace namespace;
-        private final int hashCode;
-
-        private TypeName(String localName, Namespace namespace) {
-            this.localName = localName;
-            this.namespace = namespace;
-            hashCode = DomUtil.getQualifiedName(localName, namespace).hashCode();
-        }
-
-        public int hashCode() {
-            return hashCode;
-        }
-
-        public boolean equals(Object o) {
-            if (o instanceof TypeName) {
-                return hashCode == ((TypeName)o).hashCode;
-            }
-            return false;
-        }
-
-        public Element toXml(Document document) {
-            return DomUtil.createElement(document, localName, namespace);
-        }
-
-    }
-}
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/property/package.html b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/property/package.html
deleted file mode 100644
index 5794344..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/property/package.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<body>
-Interfaces and classes related to WebDAV properties.
-</body>
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/search/QueryGrammerSet.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/search/QueryGrammerSet.java
deleted file mode 100644
index 0cb204e..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/search/QueryGrammerSet.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.search;
-
-import org.apache.jackrabbit.webdav.property.DavProperty;
-import org.apache.jackrabbit.webdav.property.AbstractDavProperty;
-import org.apache.jackrabbit.webdav.xml.Namespace;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-import java.util.Iterator;
-import java.util.Set;
-import java.util.HashSet;
-
-/**
- * <code>QueryGrammerSet</code> is a {@link DavProperty} that
- * encapsulates the 'supported-query-grammer-set' as defined by the
- * Webdav SEARCH internet draft.
- */
-public class QueryGrammerSet extends AbstractDavProperty implements SearchConstants {
-
-    private final Set queryGrammers = new HashSet();
-
-    /**
-     * Create a new empty <code>QueryGrammerSet</code>. Supported query grammers
-     * may be added by calling {@link #addQueryLanguage(String, Namespace).
-     */
-    public QueryGrammerSet() {
-        super(QUERY_GRAMMER_SET, true);
-    }
-
-    /**
-     * Add another query queryGrammer to this set.
-     *
-     * @param grammerName
-     * @param namespace
-     */
-    public void addQueryLanguage(String grammerName, Namespace namespace) {
-        queryGrammers.add(new Grammer(grammerName, namespace));
-    }
-
-    /**
-     * Return a String array containing the URIs of the query
-     * languages supported.
-     *
-     * @return names of the supported query languages
-     */
-    public String[] getQueryLanguages() {
-        int size = queryGrammers.size();
-        if (size > 0) {
-            String[] qLangStr = new String[size];
-            Grammer[] grammers = (Grammer[]) queryGrammers.toArray(new Grammer[size]);
-            for (int i = 0; i < grammers.length; i++) {
-                qLangStr[i] = grammers[i].namespace.getURI() + grammers[i].localName;
-            }
-            return qLangStr;
-        } else {
-            return new String[0];
-        }
-    }
-
-    /**
-     * Return the Xml representation of this property according to the definition
-     * of the 'supported-query-grammer-set'.
-     *
-     * @return Xml representation
-     * @see SearchConstants#QUERY_GRAMMER_SET
-     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
-     * @param document
-     */
-    public Element toXml(Document document) {
-        Element elem = getName().toXml(document);
-        Iterator qlIter = queryGrammers.iterator();
-        while (qlIter.hasNext()) {
-            Element sqg = DomUtil.addChildElement(elem, XML_QUERY_GRAMMAR, SearchConstants.NAMESPACE);
-            Element grammer = DomUtil.addChildElement(sqg, XML_GRAMMER, SearchConstants.NAMESPACE);
-            Grammer qGrammer = (Grammer)qlIter.next();
-            DomUtil.addChildElement(grammer, qGrammer.localName, qGrammer.namespace);
-        }
-        return elem;
-    }
-
-    /**
-     * Returns the set of supported query grammers.
-     *
-     * @return list of supported query languages.
-     * @see org.apache.jackrabbit.webdav.property.DavProperty#getValue()
-     */
-    public Object getValue() {
-        return queryGrammers;
-    }
-
-
-    private class Grammer {
-
-        private final String localName;
-        private final Namespace namespace;
-        private final int hashCode;
-
-        Grammer(String localName, Namespace namespace) {
-            this.localName = localName;
-            this.namespace = namespace;
-            hashCode = DomUtil.getQualifiedName(localName, namespace).hashCode();
-        }
-
-        public int hashCode() {
-            return hashCode;
-        }
-
-        public boolean equals(Object obj) {
-            if (obj == this) {
-                return true;
-            }
-            if (obj instanceof Grammer) {
-                return obj.hashCode() == hashCode();
-            }
-            return false;
-        }
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/search/SearchConstants.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/search/SearchConstants.java
deleted file mode 100644
index bc61df4..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/search/SearchConstants.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.search;
-
-import org.apache.jackrabbit.webdav.property.DavPropertyName;
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.xml.Namespace;
-
-/**
- * <code>SearchConstants</code> interface provide constants for request
- * and response headers, Xml elements and property names used for WebDAV
- * search.
- */
-public interface SearchConstants {
-
-    /**
-     * Namespace definition.<br>
-     * NOTE: For convenience reasons, the namespace is defined to be the default
-     * {@link  DavConstants#NAMESPACE DAV:} namespace. This is not correct for the
-     * underlying specification is still in a draft state. See also the editorial
-     * note inside the
-     * <a href="http://greenbytes.de/tech/webdav/draft-reschke-webdav-search-latest.html#rfc.section.1.5">Internet Draft WebDAV Search</a>
-     * document.
-     */
-    public static final Namespace NAMESPACE = DavConstants.NAMESPACE;
-
-    /**
-     * The DASL response header specifing the query languages supported by
-     * the requested resource.
-     */
-    public static final String HEADER_DASL = "DASL";
-
-    /**
-     * Xml element name for a single query grammar element inside
-     * the {@link #QUERY_GRAMMER_SET supported-query-grammer-set property}.
-     */
-    public static final String XML_QUERY_GRAMMAR = "supported-query-grammar";
-
-    /**
-     * Name constant for the 'DAV:grammar' element, which is used inside the
-     * {@link #XML_QUERY_GRAMMAR} element.
-     */
-    public static final String XML_GRAMMER = "grammar";
-
-    /**
-     * Xml element name for the required request body of a SEARCH request.
-     *
-     * @see SearchInfo
-     * @see SearchResource#search(SearchInfo)
-     */
-    public static final String XML_SEARCHREQUEST = "searchrequest";
-
-    /**
-     * Optional Xml element name used in the SEARCH request body instead of {@link XML_SEARCHREQUEST}
-     * in order to access a given query schema.
-     */
-    public static final String XML_QUERY_SCHEMA_DISCOVERY = "query-schema-discovery";
-
-    /**
-     * Predefined basic query grammer.
-     */
-    public static final String BASICSEARCH = NAMESPACE.getPrefix()+"basicsearch";
-
-    /**
-     * Property indicating the set of query languages the given resource is
-     * able deal with. The property has the following definition:<br>
-     * <pre>
-     * &lt;!ELEMENT supported-query-grammar-set (supported-query-grammar*)&gt;
-     * &lt;!ELEMENT supported-query-grammar grammar&gt;
-     * &lt;!ELEMENT grammar ANY&gt;
-     * </pre>
-     */
-    public static final DavPropertyName QUERY_GRAMMER_SET = DavPropertyName.create("supported-query-grammar-set", NAMESPACE);
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/search/SearchInfo.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/search/SearchInfo.java
deleted file mode 100644
index c3670f5..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/search/SearchInfo.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.search;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.xml.XmlSerializable;
-import org.apache.jackrabbit.webdav.xml.Namespace;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-/**
- * <code>SearchInfo</code> parses the 'searchrequest' element of a SEARCH
- * request body and performs basic validation. Both query language and the
- * query itself can be access from the resulting object.<br>
- * NOTE: The query is expected to be represented by the text contained in the
- * Xml element specifying the query language, thus the 'basicsearch' defined
- * by the Webdav Search Internet Draft is not supported by this implementation.
- * <p/>
- *
- * Example of a valid 'searchrequest' body
- * <pre>
- * &lt;d:searchrequest xmlns:d="DAV:" dcr:="http://www.day.com/jcr/webdav/1.0" &gt;
- *    &lt;dcr:xpath>//sv:node[@sv:name='myapp:paragraph'][1]&lt;/dcr:xpath&gt;
- * &lt;/d:searchrequest&gt;
- * </pre>
- *
- * Would return the following values:
- * <pre>
- *    getLanguageName() -&gt; xpath
- *    getQuery()        -&gt; //sv:node[@sv:name='myapp:paragraph'][1]
- * </pre>
- *
- */
-public class SearchInfo implements SearchConstants, XmlSerializable {
-
-    private static Logger log = Logger.getLogger(SearchInfo.class);
-
-    private final String language;
-    private final Namespace languageNamespace;
-    private final String query;
-
-    /**
-     * Create a new <code>SearchInfo</code> instance.
-     *
-     * @param language
-     * @param languageNamespace
-     * @param query
-     */
-    public SearchInfo(String language, Namespace languageNamespace, String query) {
-        this.language = language;
-        this.languageNamespace = languageNamespace;
-        this.query = query;
-    }
-
-    /**
-     * Returns the name of the query language to be used.
-     *
-     * @return name of the query language
-     */
-    public String getLanguageName() {
-        return language;
-    }
-
-    /**
-     * Returns the namespace of the language specified with the search request element.
-     *
-     * @return namespace of the requestes language.
-     */
-    public Namespace getLanguageNameSpace() {
-        return languageNamespace;
-    }
-
-    /**
-     * Return the query string.
-     *
-     * @return query string
-     */
-    public String getQuery() {
-        return query;
-    }
-
-    /**
-     * Return the xml representation of this <code>SearchInfo</code> instance.
-     *
-     * @return xml representation
-     * @param document
-     */
-    public Element toXml(Document document) {
-        Element sRequestElem = DomUtil.createElement(document, XML_SEARCHREQUEST, NAMESPACE);
-        DomUtil.addChildElement(sRequestElem, language, languageNamespace, query);
-        return sRequestElem;
-    }
-
-    /**
-     * Create a new <code>SearchInfo</code> from the specifying document
-     * retrieved from the request body.
-     *
-     * @param searchRequest
-     * @throws IllegalArgumentException if the root element's name is other than
-     * 'searchrequest' or if it does not contain a single child element specifying
-     * the query language to be used.
-     */
-    public static SearchInfo createFromXml(Element searchRequest) {
-        if (searchRequest == null || !XML_SEARCHREQUEST.equals(searchRequest.getLocalName()))  {
-            throw new IllegalArgumentException("The root element must be 'searchrequest'.");
-        }
-        Element first = DomUtil.getFirstChildElement(searchRequest);
-        if (first != null) {
-            return new SearchInfo(first.getLocalName(), DomUtil.getNamespace(first), DomUtil.getText(first));
-        } else {
-            throw new IllegalArgumentException("A single child element is expected with the 'DAV:searchrequest'.");
-        }
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/search/SearchResource.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/search/SearchResource.java
deleted file mode 100644
index b991b53..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/search/SearchResource.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.search;
-
-import org.apache.jackrabbit.webdav.MultiStatus;
-import org.apache.jackrabbit.webdav.DavException;
-
-/**
- * <code>SearchResource</code> defines METHODS required in order to handle
- * a SEARCH request.
- */
-public interface SearchResource {
-
-    /**
-     * No extra compliance class defined by the Webdav Search spec.
-     * Instead an extra DASL header is included.
-     */
-    public String COMPLIANCE_CLASS = "";
-
-    /**
-     * The 'SEARCH' method
-     */
-    public String METHODS = "SEARCH";
-
-
-    /**
-     * Returns the protected DAV:supported-method-set property which is defined
-     * mandatory by RTF 3253. This method call is a shortcut for
-     * <code>DavResource.getProperty(SearchConstants.QUERY_GRAMMER_SET)</code>.
-     *
-     * @return the DAV:supported-query-grammer-set
-     * @see SearchConstants#QUERY_GRAMMER_SET
-     */
-    public QueryGrammerSet getQueryGrammerSet();
-
-    /**
-     * Runs a search with the language and query defined in the {@link SearchInfo}
-     * object specified and returns a {@link MultiStatus} object listing the
-     * results.
-     *
-     * @param sInfo <code>SearchInfo</code> element encapsulating the SEARCH
-     * request body.
-     * @return <code>MultiStatus</code> object listing the results.
-     * @throws DavException
-     */
-    public MultiStatus search(SearchInfo sInfo) throws DavException;
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/search/package.html b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/search/package.html
deleted file mode 100644
index a42961c..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/search/package.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<body>
-Contains interfaces and classes used to cover the functionality defined by the
-<a href="http://greenbytes.de/tech/webdav/draft-reschke-webdav-search-latest.html">Internet
-Draft WebDAV Search</a>.
-</body>
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/statuscode.properties b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/statuscode.properties
deleted file mode 100644
index 94a5e6e..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/statuscode.properties
+++ /dev/null
@@ -1,47 +0,0 @@
-100=Continue
-101=Switching Protocols
-102=Processing
-200=OK
-201=Created
-202=Accepted
-203=Non-Authoritative Information
-204=No Content
-205=Reset Content
-206=Partial Content
-207=Multi-Status
-300=Multiple Choices
-301=Moved Permanently
-302=Found
-303=See Other
-304=Not Modified
-305=Use Proxy
-307=Temporary Redirect
-400=Bad Request
-401=Unauthorized
-402=Payment Required
-403=Forbidden
-404=Not Found
-405=Method Not Allowed
-406=Not Acceptable
-407=Proxy Authentication Required
-408=Request Time-out
-409=Conflict
-410=Gone
-411=Length Required
-412=Precondition Failed
-413=Request Entity Too Large
-414=Request-URI Too Large
-415=Unsupported Media Type
-416=Requested range not satisfiable
-417=Expectation Failed
-420=Method Failure
-422=Unprocessable Entity
-423=Locked
-424=Failed Dependency
-500=Internal Server Error
-501=Not Implemented
-502=Bad Gateway
-503=Service Unavailable
-504=Gateway Time-out
-505=HTTP Version not supported
-507=Insufficient Storage
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/transaction/TransactionConstants.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/transaction/TransactionConstants.java
deleted file mode 100644
index 7fd75e0..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/transaction/TransactionConstants.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.transaction;
-
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.xml.Namespace;
-import org.apache.jackrabbit.webdav.lock.Type;
-import org.apache.jackrabbit.webdav.lock.Scope;
-import org.apache.jackrabbit.webdav.property.DavPropertyName;
-
-/**
- * <code>TransactionConstants</code> interface provide constants for request
- * and response headers, Xml elements and property names used for handling
- * transactions over WebDAV. There exists no public standard for this functionality.
- *
- * todo: 'local' and 'global' are not accurate terms in the given context > replace
- */
-public interface TransactionConstants {
-
-    /**
-     * Namespace for transaction related xml elements
-     */
-    public static final Namespace NAMESPACE = Namespace.getNamespace("dcr", "http://www.day.com/jcr/webdav/1.0");
-
-    /**
-     * TransactionId Header
-     */
-    public static final String HEADER_TRANSACTIONID = "TransactionId";
-
-    /**
-     * transaction XML element<br>
-     * Used as element inside the {@link DavConstants#XML_LOCKTYPE locktype}
-     * element.
-     * @see DavConstants#XML_LOCKTYPE
-     */
-    public static final String XML_TRANSACTION = "transaction";
-
-    /**
-     * global XML element<br>
-     * Used as element inside of the {@link DavConstants#XML_LOCKSCOPE lockscope} element.
-     * It indicates the transaction to be global (e.g. a JCR transaction).
-     *
-     * @see DavConstants#XML_LOCKSCOPE
-     */
-    public static final String XML_GLOBAL = "global";
-
-    /**
-     * local XML element<br>
-     * Used as element inside of the {@link DavConstants#XML_LOCKSCOPE lockscope} element.
-     * It indicates the transaction to be local (e.g. transient changes to
-     * a repository).
-     *
-     * @see DavConstants#XML_LOCKSCOPE
-     */
-    public static final String XML_LOCAL = "local";
-
-    /**
-     * transactioninfo XML element<br>
-     * Mandatory element of the UNLOCK request body, if the unlock request
-     * is intended to complete a transaction.
-     */
-    public static final String XML_TRANSACTIONINFO = "transactioninfo";
-
-    /**
-     * transactionstatus XML element<br>
-     * Mandatory element inside the {@link #XML_TRANSACTIONINFO transactioninfo}
-     * element indicating how the transaction should be completed.
-     * @see #XML_TRANSACTIONINFO
-     */
-    public static final String XML_TRANSACTIONSTATUS = "transactionstatus";
-
-    /**
-     * commit XML element<br>
-     * Used as element inside of the {@link #XML_TRANSACTIONSTATUS transactionstatus}
-     * element. It indicates a completion by committing the transaction.
-     * @see #XML_TRANSACTIONSTATUS
-     */
-    public static final String XML_COMMIT = "commit";
-
-    /**
-     * rollback XML element<br>
-     * Used as element inside of the {@link #XML_TRANSACTIONSTATUS transactionstatus}
-     * element. It indicates a completion by roll backing the transaction.
-     * @see #XML_TRANSACTIONSTATUS
-     */
-    public static final String XML_ROLLBACK = "rollback";
-
-    /**
-     * String defining the 'isnew' property, that identifies a {@link TransactionResource}
-     * to be new within the given local transaction, meaning that it exists only in
-     * transient storage. This property is not defined by any of the Webdav RTFs.
-     * @see javax.jcr.Item#isNew()
-     * @see #XML_LOCAL
-     */
-    public static final DavPropertyName ISNEW = DavPropertyName.create("isnew", NAMESPACE);
-
-    /**
-     * String defining the 'ismodified' property, that is present on any {@link TransactionResource}
-     * that has been modified whithout the corresponding local transaction
-     * being completed yet. This property is not defined by any of the Webdav RTFs.
-     * @see javax.jcr.Item#isModified()
-     * @see #XML_LOCAL
-     */
-    public static final DavPropertyName ISMODIFIED = DavPropertyName.create("ismodified", NAMESPACE);
-
-    /**
-     * "transaction" lock type constant.
-     * @see #XML_TRANSACTION
-     * @see Type#create(String, Namespace)
-     */
-    public static final Type TRANSACTION = Type.create(XML_TRANSACTION, TransactionConstants.NAMESPACE);
-
-    /**
-     * "local" lock scope constant.
-     *
-     * @see #XML_LOCAL
-     * @see Scope#create(String, Namespace)
-     */
-    public static final Scope LOCAL = Scope.create(XML_LOCAL, TransactionConstants.NAMESPACE);
-
-    /**
-     * "global" lock scope constant.
-     * 
-     * @see #XML_GLOBAL
-     * @see Scope#create(String, Namespace)
-     */
-    public static final Scope GLOBAL = Scope.create(XML_GLOBAL, TransactionConstants.NAMESPACE);
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/transaction/TransactionDavServletRequest.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/transaction/TransactionDavServletRequest.java
deleted file mode 100644
index 22cc8c6..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/transaction/TransactionDavServletRequest.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.transaction;
-
-import org.apache.jackrabbit.webdav.DavServletRequest;
-
-/**
- * <code>TransactionDavServletRequest</code> provides extensions to the
- * {@link DavServletRequest} interface used for dealing with transaction lock
- * requests.
- */
-public interface TransactionDavServletRequest extends DavServletRequest {
-
-    /**
-     * Retrieve the 'transactioninfo' request body that must be included with
-     * the UNLOCK request of a transaction lock. If the request body is does not
-     * provide the information required (either because it is missing or the
-     * Xml is not valid) <code>null</code> is returned.
-     *
-     * @return <code>TransactionInfo</code> object encapsulating the 'transactioninfo'
-     * Xml element present in the request body or <code>null</null> if no
-     * body is present or if it could not be parsed.
-     */
-    public TransactionInfo getTransactionInfo();
-
-
-    /**
-     * Retrieve the transaction id from the
-     * {@link TransactionConstants#HEADER_TRANSACTIONID TransactionId header}.
-     *
-     * @return transaction id as present in the {@link TransactionConstants#HEADER_TRANSACTIONID TransactionId header}
-     * or <code>null</code>.
-     */
-    public String getTransactionId();
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/transaction/TransactionInfo.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/transaction/TransactionInfo.java
deleted file mode 100644
index aeb6cf5..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/transaction/TransactionInfo.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.transaction;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.xml.XmlSerializable;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-/**
- * <code>TransactionInfo</code> class encapsultes the information present
- * in the {@link #XML_TRANSACTIONINFO} element that forms the request body of
- * the UNLOCk request for a transaction lock.
- *
- * @see TransactionConstants#XML_TRANSACTIONINFO
- * @see TransactionConstants#XML_TRANSACTION
- */
-public class TransactionInfo implements TransactionConstants, XmlSerializable {
-
-    private static Logger log = Logger.getLogger(TransactionInfo.class);
-
-    private final boolean isCommit;
-
-    /**
-     * Creates a <code>TransactionInfo</code> object
-     *
-     * @param isCommit
-     */
-    public TransactionInfo(boolean isCommit) {
-        this.isCommit = isCommit;
-    }
-
-    /**
-     * Creates a <code>TransactionInfo</code> object from the given 'transactionInfo'
-     * element. The 'transactionInfo' must have the following form:
-     * <pre>
-     *
-     *  &lt;!ELEMENT transactioninfo (transactionstatus) &gt;
-     *  &lt;!ELEMENT transactionstatus ( commit | rollback ) &gt;
-     *  &lt;!ELEMENT commit EMPTY &gt;
-     *  &lt;!ELEMENT rollback EMPTY &gt;
-     * </pre>
-     * @param transactionInfo as present in the UNLOCK request body.
-     * @throws IllegalArgumentException if the given transactionInfo element
-     * is not valid.
-     */
-    public TransactionInfo(Element transactionInfo) {
-        if (transactionInfo == null || !XML_TRANSACTIONINFO.equals(transactionInfo.getLocalName())) {
-            throw new IllegalArgumentException("transactionInfo element expected.");
-        }
-        Element txStatus = DomUtil.getChildElement(transactionInfo, XML_TRANSACTIONSTATUS, NAMESPACE);
-        if (txStatus != null) {
-            // retrieve status: commit or rollback
-            isCommit = DomUtil.hasChildElement(txStatus, XML_COMMIT, NAMESPACE);
-        } else {
-            throw new IllegalArgumentException("transactionInfo must contain a single 'transactionstatus' element.");
-        }
-    }
-
-    /**
-     * Returns true, if this info requires a 'commit' action, false otherwise
-     * (i.e. 'rollback' is requested).
-     *
-     * @return true if a 'commit' element was present. false otherwise.
-     * @see #XML_COMMIT
-     * @see #XML_ROLLBACK
-     */
-    public boolean isCommit() {
-        return isCommit;
-    }
-
-    //------------------------------------------< XmlSerializable interface >---
-    /**
-     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
-     * @param document
-     */
-    public Element toXml(Document document) {
-        Element elem = DomUtil.createElement(document, XML_TRANSACTIONINFO, NAMESPACE);
-        Element st = DomUtil.addChildElement(elem, XML_TRANSACTIONSTATUS, NAMESPACE);
-        String lName = (isCommit) ? XML_COMMIT : XML_ROLLBACK;
-        DomUtil.addChildElement(st, lName, NAMESPACE);
-        return elem;
-    }
-
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/transaction/TransactionResource.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/transaction/TransactionResource.java
deleted file mode 100644
index 6d2f54a..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/transaction/TransactionResource.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.transaction;
-
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavResource;
-import org.apache.jackrabbit.webdav.DavSession;
-
-/**
- * <code>TransactionResource</code> extends the {@link DavResource} interface by
- * transaction relevant METHODS.
- */
-public interface TransactionResource extends DavResource {
-
-    public static final String COMPLIANCE_CLASS = "";
-    public static final String METHODS = "";
-
-    /**
-     * Initializes the <code>TransactionResource</code>.
-     *
-     * @param txMgr
-     * @param transactionId
-     */
-    public void init(TxLockManager txMgr, String transactionId);
-
-    /**
-     * Retrieve the <code>DavSession</code> associated with this resource.
-     *
-     * @return session object associated with this resource.
-     */
-    public DavSession getSession();
-
-    /**
-     * The TransactionId or <code>null</code> according to the value of the
-     * corresponding request {@link TransactionConstants#HEADER_TRANSACTIONID header}
-     * field.
-     *
-     * @return TransactionId header or <code>null</code>
-     */
-    public String getTransactionId();
-
-    /**
-     * Overloads the {@link DavResource#unlock unlock} method of the <code>DavResource</code>
-     * interface.
-     *
-     * @param lockToken lock token as present in the request header.
-     * @param info transaction info object as present in the UNLOCK request body.
-     * @throws DavException if an error occurs
-     * @see DavResource#unlock(String)
-     * @see TransactionDavServletRequest#getTransactionId()
-     * @see org.apache.jackrabbit.webdav.DavServletRequest#getLockToken()
-     */
-    public void unlock(String lockToken, TransactionInfo info) throws DavException;
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/transaction/TxActiveLock.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/transaction/TxActiveLock.java
deleted file mode 100644
index 40673ff..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/transaction/TxActiveLock.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.transaction;
-
-import org.apache.jackrabbit.webdav.lock.DefaultActiveLock;
-import org.apache.jackrabbit.webdav.lock.LockInfo;
-import org.apache.jackrabbit.webdav.lock.Type;
-import org.apache.jackrabbit.webdav.lock.Scope;
-
-/**
- * <code>TxActiveLock</code> represents the transaction lock present on a
- * {@link TransactionResource}.
- */
-public class TxActiveLock extends DefaultActiveLock implements TransactionConstants {
-
-    public static final long DEFAULT_TIMEOUT = 300000; // 5 minutes
-
-    private final Scope scope;
-
-    /**
-     * Create a new transaction lock.<br>
-     * If the lockInfo element is <code>null</code> the timeout defaults to
-     * half and hour. The default scope is 'local'.
-     *
-     * @param lockInfo
-     * @throws IllegalArgumentException if either scope or type is invalid or if
-     * a depth other than infinity is requested.
-     */
-    public TxActiveLock(LockInfo lockInfo) {
-        if (lockInfo != null) {
-            if (!TRANSACTION.equals(lockInfo.getType())) {
-               throw new IllegalArgumentException("Only 'transaction' type is allowed for a transaction-activelock object.");
-            }
-            if (!(LOCAL.equals(lockInfo.getScope()) || GLOBAL.equals(lockInfo.getScope()))) {
-               throw new IllegalArgumentException("Only 'global' or 'local' are valid scopes within a transaction-activelock element.");
-            }
-            if (!lockInfo.isDeep()) {
-               throw new IllegalArgumentException("Only transaction locks can only be deep.");
-            }
-            setOwner(lockInfo.getOwner());
-            setTimeout(lockInfo.getTimeout());
-            scope = lockInfo.getScope();
-        } else {
-            setTimeout(DEFAULT_TIMEOUT);
-            // local scope by default
-            scope = LOCAL;
-        }
-    }
-
-    /**
-     * Always returns true.
-     *
-     * @return true
-     */
-    public boolean isDeep() {
-        return true;
-    }
-
-    /**
-     * Always returns the {@link #TRANSACTION} type.
-     *
-     * @return {@link #TRANSACTION}
-     */
-    public Type getType() {
-        return TRANSACTION;
-    }
-
-    /**
-     * Returns the scope of this lock which is either {@link #LOCAL} or {@link #GLOBAL}.
-     *
-     * @return {@link #LOCAL} or {@link #GLOBAL}
-     */
-    public Scope getScope() {
-        return scope;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/transaction/TxLockEntry.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/transaction/TxLockEntry.java
deleted file mode 100644
index 0fb612b..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/transaction/TxLockEntry.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.transaction;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.lock.Type;
-import org.apache.jackrabbit.webdav.lock.Scope;
-import org.apache.jackrabbit.webdav.lock.AbstractLockEntry;
-
-/**
- * <code>TxLockEntry</code> represents the lock entry objects allowed for
- * a transaction lock.
- */
-public final class TxLockEntry extends AbstractLockEntry implements TransactionConstants {
-
-    private static Logger log = Logger.getLogger(TxLockEntry.class);
-
-    private final Scope scope;
-
-    /**
-     * Create a lock entry that identifies transaction lock.
-     *
-     * @param isLocal boolean value indicating whether this is a local or a global
-     * lock entry.
-     */
-    public TxLockEntry(boolean isLocal) {
-        if (isLocal) {
-            scope = LOCAL;
-        } else {
-            scope = GLOBAL;
-        }
-    }
-
-    /**
-     * Returns the {@link #TRANSACTION 'transaction'} lock type.
-     *
-     * @return always returns the 'transaction' type.
-     * @see org.apache.jackrabbit.webdav.lock.LockEntry#getType()
-     * @see #TRANSACTION
-     */
-    public Type getType() {
-        return TRANSACTION;
-    }
-
-    /**
-     * Returns either {@link #LOCAL local} or {@link #GLOBAL global} scope
-     * depending on the initial construtor value.
-     *
-     * @return returns 'global' or 'local' scope.
-     * @see org.apache.jackrabbit.webdav.lock.LockEntry#getScope()
-     * @see #GLOBAL
-     * @see #LOCAL
-     */
-    public Scope getScope() {
-        return scope;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/transaction/TxLockManager.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/transaction/TxLockManager.java
deleted file mode 100644
index 4dd91a4..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/transaction/TxLockManager.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2005 Your Corporation. All Rights Reserved.
- */
-package org.apache.jackrabbit.webdav.transaction;
-
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.lock.ActiveLock;
-import org.apache.jackrabbit.webdav.lock.LockManager;
-import org.apache.jackrabbit.webdav.lock.Scope;
-import org.apache.jackrabbit.webdav.lock.Type;
-
-/**
- * <code>TxLockManager</code> manages locks with locktype
- * '{@link TransactionConstants#TRANSACTION dcr:transaction}'.
- *
- * todo: removing all expired locks
- * todo: 'local' and 'global' are not accurate terms in the given context > replace
- * todo: the usage of the 'global' transaction is not according to the JTA specification,
- * which explicitely requires any transaction present on a servlet to be completed before
- * the service method returns. Starting/completing transactions on the session object,
- * which is possible with the jackrabbit implementation is a hack.
- * todo: review of this transaction part is therefore required. Is there a use-case
- * for those 'global' transactions at all...
- */
-public interface TxLockManager extends LockManager {
-
-
-    /**
-     * Release the lock identified by the given lock token.
-     *
-     * @param lockInfo
-     * @param lockToken
-     * @param resource
-     * @throws org.apache.jackrabbit.webdav.DavException
-     */
-    public void releaseLock(TransactionInfo lockInfo, String lockToken,
-			    TransactionResource resource) throws DavException;
-
-
-    /**
-     * Return the lock applied to the given resource or <code>null</code>
-     *
-     * @param type
-     * @param scope
-     * @param resource
-     * @return lock applied to the given resource or <code>null</code>
-     * @see org.apache.jackrabbit.webdav.lock.LockManager#getLock(org.apache.jackrabbit.webdav.lock.Type, org.apache.jackrabbit.webdav.lock.Scope, org.apache.jackrabbit.webdav.DavResource)
-     */
-    public ActiveLock getLock(Type type, Scope scope, TransactionResource resource);
-
-
-}
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/transaction/package.html b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/transaction/package.html
deleted file mode 100644
index a552dc6..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/transaction/package.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<body>
-Contains interfaces and classes related to transaction locks.
-</body>
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/util/HttpDateFormat.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/util/HttpDateFormat.java
deleted file mode 100644
index 4d0db2d..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/util/HttpDateFormat.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.util;
-
-import java.text.SimpleDateFormat;
-import java.util.Locale;
-import java.util.TimeZone;
-
-/**
- * <code>HttpDateFormat</code>...
- */
-public class HttpDateFormat extends SimpleDateFormat {
-
-    private static final TimeZone GMT_TIMEZONE = TimeZone.getTimeZone("GMT");
-
-    public HttpDateFormat(String pattern) {
-        super(pattern, Locale.ENGLISH);
-        super.setTimeZone(GMT_TIMEZONE);
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/util/package.html b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/util/package.html
deleted file mode 100644
index 709601c..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/util/package.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<body>
-Common utility classes.
-</body>
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/DeltaVConstants.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/DeltaVConstants.java
deleted file mode 100644
index 59299a1..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/DeltaVConstants.java
+++ /dev/null
@@ -1,314 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.version;
-
-import org.apache.jackrabbit.webdav.property.DavPropertyName;
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.xml.Namespace;
-
-/**
- * <code>DeltaVConstants</code> defines the following headers and properties
- * required for any resource that is complient to
- * <a href="http://www.ietf.org/rfc/rfc3253.txt">RFC 3253</a>:<br><br>
- *
- * Headers:
- * <pre>
- * Label
- * </pre>
- *
- * Properties:
- * <pre>
- * DAV:comment
- * DAV:creator-displayname
- * DAV:supported-method-set
- * DAV:supported-live-property-set
- * DAV:supported-report-set
- * DAV:workspace
- * </pre>
- */
-public interface DeltaVConstants {
-
-    /**
-     * The DAV: namespace.
-     */
-    public static final Namespace NAMESPACE = DavConstants.NAMESPACE;
-
-    /**
-     * For certain METHODS, if the request-URL identifies a version-controlled
-     * resource, a label can be specified in a LabelInfo request header to cause the
-     * method to be applied to the version selected by that label.<br>
-     * LabelInfo header MUST have no effect on a request whose request-URL does not
-     * identify a version-controlled resource. In particular, it MUST have no
-     * effect on a request whose request-URL identifies a version or a version
-     * history.
-     */
-    public static final String HEADER_LABEL = "Label";
-
-    /**
-     * Location header as defined by
-     * <a href="http://www.ietf.org/rfc/rfc2616.txt">RFC 2616</a>. In the versioning
-     * context it is used to indicate the location of the new version created by a
-     * successful checkin in the response.<br><br>
-     * From RFC 2616:<br>
-     * The Location response-header field is used to redirect the recipient to a
-     * location other than the Request-URI for completion of the request or
-     * identification of a new resource.<br>
-     * For 201 (Created) responses, the Location is that of the new resource
-     * which was created by the request.
-     */
-    public static final String HEADER_LOCATION = "Location";
-
-    /**
-     * The "DAV:comment" property is used to track a brief comment about a resource that is
-     * suitable for presentation to a user. The DAV:comment of a version can be
-     * used to indicate why that version was created.
-     */
-    public static final DavPropertyName COMMENT = DavPropertyName.create("comment", NAMESPACE);
-
-    /**
-     * The "DAV:creator-displayname" property contains a description of the creator of
-     * the resource that is suitable for presentation to a user. The
-     * DAV:creator-displayname of a version can be used to indicate who created
-     * that version.
-     */
-    public static final DavPropertyName CREATOR_DISPLAYNAME = DavPropertyName.create("creator-displayname", NAMESPACE);
-
-    /**
-     * Required protected live property for any resources being complient with
-     * RFC 3253. Clients should classify a resource by examing the values of the
-     * DAV:supported-method-set and DAV:supported-live-property-set
-     * properties of that resource.<br>
-     * Property structure:
-     * <pre>
-     * &lt;!ELEMENT supported-method-set (supported-method*)&gt;
-     * &lt;!ELEMENT supported-method ANY&gt;
-     * &lt;!ATTLIST supported-method name NMTOKEN #REQUIRED&gt;
-     * name value: a method name
-     * </pre>
-     *
-     * @see #SUPPORTED_LIVE_PROPERTY_SET
-     */
-    public static final DavPropertyName SUPPORTED_METHOD_SET = DavPropertyName.create("supported-method-set", NAMESPACE);
-
-    /**
-     * Required protected live property for any resources being complient with
-     * RFC 3253. Clients should classify a resource by examing the values of the
-     * DAV:supported-method-set and DAV:supported-live-property-set
-     * properties of that resource.<br>
-     * Property structure:
-     * <pre>
-     * &lt;!ELEMENT supported-live-property-set (supported-live-property*)&gt;
-     * &lt;!ELEMENT supported-live-property name&gt;
-     * &lt;!ELEMENT prop ANY&gt;
-     * ANY value: a property element type
-     * </pre>
-     *
-     * @see #SUPPORTED_METHOD_SET
-     */
-    public static final DavPropertyName SUPPORTED_LIVE_PROPERTY_SET = DavPropertyName.create("supported-live-property-set", NAMESPACE);
-
-    /**
-     * Protected "supported-report-set" property identifies the reports that are
-     * supported by the resource.
-     *
-     * @see #SUPPORTED_REPORT_SET
-     */
-    public static final DavPropertyName SUPPORTED_REPORT_SET = DavPropertyName.create("supported-report-set", NAMESPACE);
-
-    /**
-     * Protected "workspace" property indicating the workspace of a resource.
-     *
-     * @see #WORKSPACE
-     */
-    public static final DavPropertyName WORKSPACE = DavPropertyName.create("workspace", NAMESPACE);
-
-
-    //--------------------------------------------------------------------------
-    /**
-     * Xml elements
-     */
-    public static final String XML_ACTIVITY = "activity";
-    public static final String XML_BASELINE = "baseline";
-
-    public static final String XML_SUPPORTED_METHOD = "supported-method";
-    public static final String XML_VERSION_HISTORY = "version-history";
-    public static final String XML_VERSION = "version";
-    public static final String XML_WORKSPACE = "workspace";
-
-    // options
-    /**
-     * If the OPTIONS request contains a body, i must start with an DAV:options
-     * element.
-     *
-     * @see OptionsInfo
-     * @see #XML_VH_COLLECTION_SET
-     * @see #XML_WSP_COLLECTION_SET
-     * @see #XML_ACTIVITY_COLLECTION_SET
-     */
-    public static final String XML_OPTIONS = "options";
-
-    /**
-     * If an XML response body for a successful request is included, it must be
-     * a DAV:options-response XML element.
-     *
-     * @see OptionsResponse
-     */
-    public static final String XML_OPTIONS_RESPONSE = "options-response";
-    
-    /**
-     * A DAV:version-history-collection-set element may be included in the OPTIONS
-     * request  body to identify collections that may contain version history
-     * resources.<br>
-     * The response body for a successful request must in consequence contain a
-     * DAV:version-history-collection-set element identifying collections that
-     * may contain version histories. An identified collection may be the root
-     * collection of a tree of collections, all of which may contain version
-     * histories.
-     *
-     * <pre>
-     * &lt!ELEMENT version-history-collection-set (href*)&gt;
-     * </pre>
-     */
-    public static final String XML_VH_COLLECTION_SET = "version-history-collection-set";
-
-    /**
-     * A DAV:workspace-collection-set element may be included in the OPTIONS request
-     * body to identify collections that may contain workspace resources.<br>
-     * The response body for a successful request must contain a
-     * DAV:workspace-collection-set element identifying collections that may
-     * contain workspaces. An identified collection may be the root collection
-     * of a tree of collections, all of which may contain workspaces.
-     *
-     * <pre>
-     * &lt!ELEMENT workspace-collection-set (href*)&gt;
-     * </pre>
-     */
-    public static final String XML_WSP_COLLECTION_SET = "workspace-collection-set";
-
-    /**
-     * A DAV:workspace-collection-set element may be included in the OPTIONS request
-     * body to identify collections that may contain activity resources.<br>
-     * The response body for a successful request must contain a
-     * DAV:workspace-collection-set element identifying collections that may
-     * contain activity resources. An identified collection may be the root collection
-     * of a tree of collections, all of which may contain activity resources.
-     *
-     * <pre>
-     * &lt!ELEMENT activity-collection-set (href*)&gt;
-     * </pre>
-     */
-    public static final String XML_ACTIVITY_COLLECTION_SET = "activity-collection-set";
-
-    /**
-     * Name of Xml element contained in the {@link #SUPPORTED_REPORT_SET} property.
-     *
-     * @see #SUPPORTED_REPORT_SET
-     * @see org.apache.jackrabbit.webdav.version.report.SupportedReportSetProperty
-     */
-    public static final String XML_SUPPORTED_REPORT = "supported-report";
-
-    /**
-     * Name of Xml child elements of {@link #XML_SUPPORTED_REPORT}.
-     *
-     * @see org.apache.jackrabbit.webdav.version.report.SupportedReportSetProperty
-     */
-    public static final String XML_REPORT = "report";
-    
-    /**
-     * Top element for the 'DAV:version-tree' report
-     */
-    public static final String XML_VERSION_TREE = "version-tree";
-
-    /**
-     * Top element for the 'DAV:expand-property' report
-     */
-    public static final String XML_EXPAND_PROPERTY = "expand-property";
-
-    /**
-     * 'DAV:property' element to be used inside the 'DAV:expand-property' element.
-     *
-     * @see #XML_EXPAND_PROPERTY
-     */
-    public static final String XML_PROPERTY = "property";
-
-    /**
-     * 'DAV:name' attribute for the property element
-     *
-     * @see #XML_PROPERTY
-     */
-    public static final String ATTR_NAME = "name";
-
-    /**
-     * 'DAV:namespace' attribute for the property element
-     *
-     * @see #XML_PROPERTY
-     */
-    public static final String ATTR_NAMESPACE = "namespace";
-
-    /**
-     * Top element for the 'DAV:locate-by-history' report
-     */
-    public static final String XML_LOCATE_BY_HISTORY = "locate-by-history";
-
-    /**
-     * 'DAV:version-history-set' to be used inside the 'DAV:locate-by-history'
-     * element
-     *
-     * @see #XML_LOCATE_BY_HISTORY
-     */
-    public static final String XML_VERSION_HISTORY_SET = "version-history-set";
-
-
-    /**
-     * Xml element representing the mandatory root element of a LABEL request
-     * body.
-     * 
-     * @see #XML_LABEL_NAME
-     * @see #XML_LABEL_ADD
-     * @see #XML_LABEL_REMOVE
-     * @see #XML_LABEL_SET
-     * @see LabelInfo
-     */
-    public static final String XML_LABEL = "label";
-    public static final String XML_LABEL_NAME = "label-name";
-    public static final String XML_LABEL_ADD = "add";
-    public static final String XML_LABEL_REMOVE = "remove";
-    public static final String XML_LABEL_SET = "set";
-
-    /**
-     * Xml element defining the top element in the UPDATE request body. RFC 3253
-     * defines the following structure for the 'update' element.
-     * <pre>
-     * &lt;!ELEMENT update ANY&gt;
-     * ANY value: A sequence of elements with at most one DAV:version element
-     * and at most one DAV:prop element.
-     * &lt;!ELEMENT version (href)&gt;
-     * prop: see RFC 2518, Section 12.11
-     * </pre>
-     */
-    public static final String XML_UPDATE = "update";
-
-    // auto-version
-    public static final String XML_CHECKOUT_CHECKIN = "checkin-checkout";
-    public static final String XML_CHECKOUT_UNLOCK_CHECKIN = "checkout-unlocked-checkin";
-    public static final String XML_CHECKOUT = "checkout";
-    public static final String XML_LOCKED_CHECKIN = "locked-checkout";
-
-    // merge
-    public static final String XML_MERGE = "merge";
-    public static final String XML_N0_AUTO_MERGE = "no-auto-merge";
-    public static final String XML_N0_CHECKOUT = "no-checkout";
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/DeltaVResource.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/DeltaVResource.java
deleted file mode 100644
index 2a8dde0..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/DeltaVResource.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.version;
-
-import org.apache.jackrabbit.webdav.DavResource;
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavSession;
-import org.apache.jackrabbit.webdav.property.DavPropertyName;
-import org.apache.jackrabbit.webdav.version.report.ReportInfo;
-import org.apache.jackrabbit.webdav.version.report.Report;
-
-/**
- * The <code>DeltaVResource</code> encapsultes the functionality common to all
- * DeltaV compliant resources.
- * <p/>
- * RFC 3253 defines the following required properties:
- * <ul>
- * <li>{@link DeltaVConstants#COMMENT DAV:comment}</li>
- * <li>{@link DeltaVConstants#CREATOR_DISPLAYNAME DAV:creator-displayname}</li>
- * <li>{@link DeltaVConstants#SUPPORTED_METHOD_SET DAV:supported-method-set}</li>
- * <li>{@link DeltaVConstants#SUPPORTED_LIVE_PROPERTY_SET DAV:supported-live-property-set}</li>
- * <li>{@link DeltaVConstants#SUPPORTED_REPORT_SET DAV:supported-report-set}</li>
- * <li>all properties defined in WebDAV [RFC2518].</li>
- * </ul>
- * <p/>
- * In addition a DeltaV compliant resource must support the following METHODS:
- * <ul>
- * <li>REPORT</li>
- * <li>all METHODS defined in WebDAV [RFC2518]</li>
- * <li>all METHODS defined in HTTP/1.1 [RFC2616].</li>
- * </ul>
- *
- * @see DavResource
- */
-public interface DeltaVResource extends DavResource {
-
-    public String COMPLIANCE_CLASS = "version-control, checkout-in-place, version-history, update, label, merge, workspace";
-
-    /**
-     * The generic deltaV complient resource defines one additional method REPORT.
-     *
-     * @see DeltaVResource#METHODS
-     * @see org.apache.jackrabbit.webdav.DavResource#METHODS
-     */
-    public String METHODS = "REPORT, MKWORKSPACE";
-
-    /**
-     * Retrieves the information requested in the OPTIONS request body and
-     * returns the corresponding values.
-     *
-     * @param optionsInfo
-     * @return object to be included to the OPTIONS response body or <code>null</code>
-     * if the specified optionsInfo was <code>null</code> or empty.
-     */
-    public OptionsResponse getOptionResponse(OptionsInfo optionsInfo);
-
-    /**
-     * Runs the report specified by the given <code>ReportInfo</code>.
-     *
-     * @param reportInfo
-     * @return the requested report.
-     * @throws DavException in case an error occured or if the specified <code>ReportInfo</code>
-     * is either not valid or cannot be run by the given resource.
-     */
-    public Report getReport(ReportInfo reportInfo) throws DavException;
-
-    /**
-     * Add a new member to this resource, that represents a workspace.<br>
-     * Please note that no resource must exist at the location of the new workspace.
-     *
-     * @param workspace resource representing the new workspace to be created as
-     * member of this resource.
-     * @throws DavException if creating the new workspace fails.
-     * @todo MKWORKSPACE may include an xml request body...
-     */
-    public void addWorkspace(DavResource workspace) throws DavException;
-
-    /**
-     * Returns an array of <code>DavResource</code> objects that are referenced
-     * by the {@link org.apache.jackrabbit.webdav.property.HrefProperty} with
-     * the specified {@link DavPropertyName name}.
-     *
-     * @param hrefPropertyName
-     * @return An array of <code>DavResource</code>s
-     * @throws DavException if the given hrefPropertyName does point to an
-     * unknown property or does not represent the name of a
-     * {@link org.apache.jackrabbit.webdav.property.HrefProperty href property}.
-     * Finally the exception may be caused if the property contains the href
-     * of a non-existing resource, which cannot be resolved.
-     * @see org.apache.jackrabbit.webdav.property.HrefProperty
-     */
-    public DavResource[] getReferenceResources(DavPropertyName hrefPropertyName) throws DavException;
-
-    /**
-     * Retrieve the <code>DavSession</code> associated with this resource.
-     *
-     * @return session object associated with this resource.
-     */
-    public DavSession getSession();
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/DeltaVServletRequest.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/DeltaVServletRequest.java
deleted file mode 100644
index 1aea1ca..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/DeltaVServletRequest.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.version;
-
-import org.apache.jackrabbit.webdav.DavServletRequest;
-import org.apache.jackrabbit.webdav.version.report.ReportInfo;
-
-/**
- * <code>DeltaVServletRequest</code> provides extension useful for functionality
- * related to RFC 3253.
- */
-public interface DeltaVServletRequest extends DavServletRequest {
-
-    /**
-     * Returns the Label header or <code>null</code>
-     *
-     * @return label header or <code>null</code>
-     * @see DeltaVConstants#HEADER_LABEL
-     */
-    public String getLabel();
-
-    /**
-     * Return the request body as <code>LabelInfo</code> object or <code>null</code>
-     * if parsing the request body or the creation of the label info failed.
-     *
-     * @return <code>LabelInfo</code> object or <code>null</code>
-     */
-    public LabelInfo getLabelInfo();
-
-    /**
-     * Return the request body as <code>MergeInfo</code> object or <code>null</code>
-     * if the creation failed due to invalid format.
-     *
-     * @return <code>MergeInfo</code> object or <code>null</code>
-     */
-    public MergeInfo getMergeInfo();
-
-    /**
-     * Parses the UPDATE request body a build the corresponding <code>UpdateInfo</code>
-     * object. If the request body is missing or does not of the required format
-     * <code>null</code> is returned.
-     *
-     * @return the parsed update request body or <code>null</code>
-     */
-    public UpdateInfo getUpdateInfo();
-
-    /**
-     * Returns the request body and the Depth header as <code>ReportInfo</code>
-     * object. The default depth, if no {@link org.apache.jackrabbit.webdav.DavConstants#HEADER_DEPTH
-     * Depth header}, is {@link org.apache.jackrabbit.webdav.DavConstants#DEPTH_0}.
-     * If the requuest body could not be parsed into an {@link org.w3c.dom.Element}
-     * <code>null</code> is returned.
-     *
-     * @return <code>ReportInfo</code> or <code>null</code>
-     */
-    public ReportInfo getReportInfo();
-
-    /**
-     * Returns the {@link OptionsInfo} present with the request or <code>null</code>.
-     *
-     * @return {@link OptionsInfo} or <code>null</code>
-     */
-    public OptionsInfo getOptionsInfo();
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/LabelInfo.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/LabelInfo.java
deleted file mode 100644
index 31e3a2c..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/LabelInfo.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.version;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.xml.XmlSerializable;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-/**
- * <code>LabelInfo</code> encapsulates the request body of a LABEL request
- * used to add, set or remove a label from the requested version resource or
- * from that version specified with the Label header in case the requested resource
- * is a version-controlled resource.<br><br>
- * The request body (thus the 'labelElement' passed to the constructore must be
- * a DAV:label element:
- * <pre>
- * &lt;!ELEMENT label ANY&gt;
- * ANY value: A sequence of elements with at most one DAV:add,
- * DAV:set, or DAV:remove element.
- * &lt;!ELEMENT add (label-name)&gt;
- * &lt;!ELEMENT set (label-name)&gt;
- * &lt;!ELEMENT remove (label-name)&gt;
- * &lt;!ELEMENT label-name (#PCDATA)&gt;
- * PCDATA value: string
- * </pre>
- * Please note, that the given implementation only recognizes the predefined elements 'add',
- * 'set' and 'remove'.
- */
-public class LabelInfo implements DeltaVConstants, XmlSerializable {
-
-    private static Logger log = Logger.getLogger(LabelInfo.class);
-
-    public static final int TYPE_SET = 0;
-    public static final int TYPE_REMOVE = 1;
-    public static final int TYPE_ADD = 2;
-
-    public static String[] typeNames = new String[] { XML_LABEL_SET , XML_LABEL_REMOVE, XML_LABEL_ADD};
-
-    private final int depth;
-    private final int type;
-    private final String labelName;
-
-    public LabelInfo(String labelName, String type) {
-        if (labelName == null) {
-            throw new IllegalArgumentException("Label name must not be null.");
-        }
-        boolean validType = false;
-        int i = 0;
-        while (i < typeNames.length) {
-            if (typeNames[i].equals(type)) {
-                validType = true;
-                break;
-            }
-            i++;
-        }
-        if (!validType) {
-            throw new IllegalArgumentException("Invalid type: " + type);
-        }
-        this.type = i;
-        this.labelName = labelName;
-        this.depth = DavConstants.DEPTH_0;
-    }
-
-    public LabelInfo(String labelName, int type) {
-        this(labelName, type, DavConstants.DEPTH_0);
-    }
-
-    public LabelInfo(String labelName, int type, int depth) {
-        if (labelName == null) {
-            throw new IllegalArgumentException("Label name must not be null.");
-        }
-        if (type < TYPE_SET || type > TYPE_ADD) {
-            throw new IllegalArgumentException("Invalid type: " + type);
-        }
-        this.labelName = labelName;
-        this.type = type;
-        this.depth = depth;
-    }
-
-    /**
-     * Create a new <code>LabelInfo</code> from the given element and depth
-     * integer. If the specified Xml element does have a {@link DeltaVConstants#XML_LABEL}
-     * root element or no label name is specified with the action to perform
-     * the creation will fail.
-     *
-     * @param labelElement
-     * @param depth
-     * @throws IllegalArgumentException if the specified element does not
-     * start with a {@link DeltaVConstants#XML_LABEL} element or if the DAV:label
-     * element contains illegal instructions e.g. contains multiple DAV:add, DAV:set
-     * or DAV:remove elements.
-     */
-    public LabelInfo(Element labelElement, int depth) {
-        if (!DomUtil.matches(labelElement, DeltaVConstants.XML_LABEL, DeltaVConstants.NAMESPACE)) {
-            throw new IllegalArgumentException("DAV:label element expected");
-        }
-
-        String label = null;
-        int type = -1;
-        for (int i = 0; i < typeNames.length && type == -1; i++) {
-            if (DomUtil.hasChildElement(labelElement, typeNames[i], NAMESPACE)) {
-                type = i;
-                Element el = DomUtil.getChildElement(labelElement, typeNames[i], NAMESPACE);
-                label = DomUtil.getChildText(el, XML_LABEL_NAME, NAMESPACE);
-            }
-            }
-        if (label == null) {
-            throw new IllegalArgumentException("DAV:label element must contain at least one set, add or remove element defining a label-name.");
-        }
-        this.labelName = label;
-        this.type = type;
-        this.depth = depth;
-    }
-
-    /**
-     * Create a new <code>LabelInfo</code> from the given element. As depth
-     * the default value 0 is assumed.
-     *
-     * @param labelElement
-     * @throws IllegalArgumentException
-     * @see #LabelInfo(org.w3c.dom.Element;, int)
-     */
-    public LabelInfo(Element labelElement) {
-        this(labelElement, 0);
-    }
-
-    /**
-     * Return the text present inside the 'DAV:label-name' element or <code>null</code>
-     *
-     * @return 'label-name' or <code>null</code>
-     */
-    public String getLabelName() {
-        return labelName;
-    }
-
-    /**
-     * Return the type of the LABEL request. This might either be {@link #TYPE_SET},
-     * {@link #TYPE_ADD} or {@link #TYPE_REMOVE}.
-     *
-     * @return type
-     */
-    public int getType() {
-        return type;
-    }
-
-    /**
-     * Return the depth
-     *
-     * @return depth
-     */
-    public int getDepth() {
-        return depth;
-    }
-
-    /**
-     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
-     * @param document
-     */
-    public Element toXml(Document document) {
-        Element label = DomUtil.createElement(document, XML_LABEL, NAMESPACE);
-        Element typeElem = DomUtil.addChildElement(label, typeNames[type], NAMESPACE);
-        DomUtil.addChildElement(typeElem, XML_LABEL_NAME, NAMESPACE, labelName);
-        return label;
-    }
-
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/LabelSetProperty.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/LabelSetProperty.java
deleted file mode 100644
index 8673ddd..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/LabelSetProperty.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.version;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.apache.jackrabbit.webdav.property.AbstractDavProperty;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-/**
- * <code>LabelSetProperty</code>...
- */
-public class LabelSetProperty extends AbstractDavProperty {
-
-    private static Logger log = Logger.getLogger(LabelSetProperty.class);
-
-    private final String[] value;
-
-    /**
-     * Create a new <code>LabelSetProperty</code>.
-     *
-     * @param labels
-     */
-    public LabelSetProperty(String[] labels) {
-        super(VersionResource.LABEL_NAME_SET, true);
-        this.value = labels;
-    }
-
-
-    public Object getValue() {
-        return value;
-    }
-
-    /**
-     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
-     * @param document
-     */
-    public Element toXml(Document document) {
-        Element elem = getName().toXml(document);
-        for (int i = 0; i < value.length; i++) {
-            DomUtil.addChildElement(elem, DeltaVConstants.XML_LABEL_NAME, DeltaVConstants.NAMESPACE, value[i]);
-        }
-        return elem;
-    }
-
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/MergeInfo.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/MergeInfo.java
deleted file mode 100644
index 22299bb..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/MergeInfo.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.version;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.xml.XmlSerializable;
-import org.apache.jackrabbit.webdav.xml.ElementIterator;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * <code>MergeInfo</code> encapsulates the information present in the DAV:merge
- * element, that forms the mandatory request body of a MERGE request.<br>
- * The DAV:merge element is specified to have the following form.
- * <pre>
- * &lt;!ELEMENT merge ANY&gt;
- * ANY value: A sequence of elements with one DAV:source element, at most one
- * DAV:no-auto-merge element, at most one DAV:no-checkout element, at most one
- * DAV:prop element, and any legal set of elements that can occur in a DAV:checkout
- * element.
- * &lt;!ELEMENT source (href+)&gt;
- * &lt;!ELEMENT no-auto-merge EMPTY&gt;
- * &lt;!ELEMENT no-checkout EMPTY&gt;
- * prop: see <a href="http://www.ietf.org/rfc/rfc2518.txt">RFC 2518, Section 12.11</a>
- * </pre>
- */
-public class MergeInfo implements DeltaVConstants, XmlSerializable {
-
-    private static Logger log = Logger.getLogger(MergeInfo.class);
-
-    private final Element mergeElement;
-    private final DavPropertyNameSet propertyNameSet;
-
-    /**
-     * Create a new <code>MergeInfo</code>
-     *
-     * @param mergeElement
-     * @throws IllegalArgumentException if the mergeElement is <code>null</code>
-     * or not a DAV:merge element.
-     */
-    public MergeInfo(Element mergeElement) {
-        if (!DomUtil.matches(mergeElement, XML_MERGE, NAMESPACE)) {
-            throw new IllegalArgumentException("'DAV:merge' element expected");
-        }
-
-        // if property name set if present
-        Element propElem = DomUtil.getChildElement(mergeElement, DavConstants.XML_PROP, DavConstants.NAMESPACE);
-        if (propElem != null) {
-            propertyNameSet = new DavPropertyNameSet(propElem);
-            mergeElement.removeChild(propElem);
-        } else {
-            propertyNameSet = new DavPropertyNameSet();
-        }
-        this.mergeElement = mergeElement;
-    }
-
-    /**
-     * Returns the URL specified with the DAV:source element or <code>null</code>
-     * if no such child element is present in the DAV:merge element.
-     *
-     * @return href present in the DAV:source child element or <code>null</code>.
-     */
-    public String[] getSourceHrefs() {
-        List sourceHrefs = new ArrayList();
-        Element srcElem = DomUtil.getChildElement(mergeElement, DavConstants.XML_SOURCE, DavConstants.NAMESPACE);
-        if (srcElem != null) {
-            ElementIterator it = DomUtil.getChildren(srcElem, DavConstants.XML_HREF, DavConstants.NAMESPACE);
-            while (it.hasNext()) {
-                String href = DomUtil.getTextTrim(it.nextElement());
-                if (href != null) {
-                    sourceHrefs.add(href);
-        }
-            }
-        }
-        return (String[])sourceHrefs.toArray(new String[sourceHrefs.size()]);
-    }
-
-    /**
-     * Returns true if the DAV:merge element contains a DAV:no-auto-merge child element.
-     *
-     * @return true if the DAV:merge element contains a DAV:no-auto-merge child.
-     */
-    public boolean isNoAutoMerge() {
-        return DomUtil.hasChildElement(mergeElement, XML_N0_AUTO_MERGE, NAMESPACE);
-    }
-
-    /**
-     * Returns true if the DAV:merge element contains a DAV:no-checkout child element.
-     *
-     * @return true if the DAV:merge element contains a DAV:no-checkout child
-     */
-    public boolean isNoCheckout() {
-        return DomUtil.hasChildElement(mergeElement, XML_N0_CHECKOUT, NAMESPACE);
-    }
-
-    /**
-     * Returns a {@link DavPropertyNameSet}. If the DAV:merge element contains
-     * a DAV:prop child element the properties specified therein are included
-     * in the set. Otherwise an empty set is returned.<br>
-     *
-     * <b>WARNING:</b> modifying the DavPropertyNameSet returned by this method does
-     * not modify this <code>UpdateInfo</code>.
-     *
-     * @return set listing the properties specified in the DAV:prop element indicating
-     * those properties that must be reported in the response body.
-     */
-    public DavPropertyNameSet getPropertyNameSet() {
-        return propertyNameSet;
-    }
-
-    /**
-     * Returns the DAV:merge element used to create this <code>MergeInfo</code>
-     * object.
-     *
-     * @return DAV:merge element
-     */
-    public Element getMergeElement() {
-        return mergeElement;
-    }
-
-    /**
-     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
-     * @param document
-     */
-    public Element toXml(Document document) {
-        Element elem = (Element)document.importNode(mergeElement, true);
-        if (!propertyNameSet.isEmpty()) {
-            elem.appendChild(propertyNameSet.toXml(document));
-        }
-        return elem;
-    }
-
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/OptionsInfo.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/OptionsInfo.java
deleted file mode 100644
index 77af0ae..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/OptionsInfo.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.version;
-
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.apache.jackrabbit.webdav.xml.ElementIterator;
-import org.apache.jackrabbit.webdav.xml.Namespace;
-import org.apache.jackrabbit.webdav.xml.XmlSerializable;
-import org.apache.log4j.Logger;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-/**
- * <code>OptionsInfo</code> represents the Xml request body, that may be present
- * with a OPTIONS request.
- * <br>
- * The DAV:options element is specified to have the following form.
- *
- * <pre>
- * &lt;!ELEMENT options ANY&gt;
- * ANY value: A sequence of elements each at most onces.
- * </pre>
- *
- * Note, that this is a simplified implementation of the very generic
- * definition: We assume that the DAV:options element only contains empty child
- * elements, such as e.g. {@link DeltaVConstants#XML_VH_COLLECTION_SET DAV:version-history-collection-set}
- * or {@link DeltaVConstants#XML_WSP_COLLECTION_SET DAV:workspace-collection-set}.
- *
- * @see DeltaVConstants#XML_VH_COLLECTION_SET
- * @see DeltaVConstants#XML_WSP_COLLECTION_SET
- * @see DeltaVConstants#XML_ACTIVITY_COLLECTION_SET
- */
-public class OptionsInfo implements XmlSerializable {
-
-    private static Logger log = Logger.getLogger(OptionsInfo.class);
-
-    private final Set entriesLocalNames = new HashSet();
-
-    /**
-     * Create a new OptionsInfo with the specified entries. Each entry will
-     * be converted to an empty Xml element when calling <code>toXml</code>.
-     * As namespace {@link DeltaVConstants#NAMESPACE} is used.
-     *
-     * @param entriesLocalNames
-     */
-    public OptionsInfo(String[] entriesLocalNames) {
-       if (entriesLocalNames != null) {
-           for (int i = 0; i < entriesLocalNames.length; i++) {
-               this.entriesLocalNames.add(entriesLocalNames[i]);
-           }
-        }
-    }
-
-    /**
-     * Private constructor used to create an OptionsInfo from Xml.
-     */
-    private OptionsInfo() {}
-
-    /**
-     * Returns true if a child element with the given name and namespace is present.
-     *
-     * @param localName
-     * @param namespace
-     * @return true if such a child element exists in the options element.
-     */
-    public boolean containsElement(String localName, Namespace namespace) {
-        if (DeltaVConstants.NAMESPACE.equals(namespace)) {
-            return entriesLocalNames.contains(localName);
-        }
-        return false;
-    }
-
-    /**
-     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
-     * @param document
-     */
-    public Element toXml(Document document) {
-        Element optionsElem = DomUtil.createElement(document, DeltaVConstants.XML_OPTIONS, DeltaVConstants.NAMESPACE);
-        Iterator it = entriesLocalNames.iterator();
-        while (it.hasNext()) {
-            String localName = (String)it.next();
-            DomUtil.addChildElement(optionsElem, localName, DeltaVConstants.NAMESPACE);
-        }
-        return optionsElem;
-    }
-
-    /**
-     * Build an <code>OptionsInfo</code> object from the root element present
-     * in the request body.
-     *
-     * @param optionsElement
-     * @return
-     * @throws IllegalArgumentException if the optionsElement is <code>null</code>
-     * or not a DAV:options element.
-     */
-    public static OptionsInfo createFromXml(Element optionsElement) {
-        if (!DomUtil.matches(optionsElement, DeltaVConstants.XML_OPTIONS, DeltaVConstants.NAMESPACE)) {
-            throw new IllegalArgumentException("DAV:options element expected");
-        }
-        OptionsInfo oInfo = new OptionsInfo();
-        ElementIterator it = DomUtil.getChildren(optionsElement);
-        while (it.hasNext()) {
-            // todo: not correct since assuming its the deltaV-namespace
-            oInfo.entriesLocalNames.add(it.nextElement().getLocalName());
-        }
-        return oInfo;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/OptionsResponse.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/OptionsResponse.java
deleted file mode 100644
index 8aced29..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/OptionsResponse.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.version;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.xml.XmlSerializable;
-import org.apache.jackrabbit.webdav.xml.Namespace;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.apache.jackrabbit.webdav.xml.ElementIterator;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-import java.util.Map;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * <code>OptionsResponse</code> encapsulates the DAV:options-response element
- * present in the response body of a successful OPTIONS request (with body).
- * <br>
- * The DAV:options-response element is defined to have the following format.
- *
- * <pre>
- * &lt;!ELEMENT options-response ANY&gt;
- * ANY value: A sequence of elements
- * </pre>
- *
- * Please note, that <code>OptionsResponse</code> represents a simplified implementation
- * of the given structure. We assume, that there may only entries that consist
- * of a qualified name and a set of href child elements.
- *
- * @see DeltaVConstants#XML_ACTIVITY_COLLECTION_SET
- * @see DeltaVConstants#XML_VH_COLLECTION_SET
- * @see DeltaVConstants#XML_WSP_COLLECTION_SET
- */
-public class OptionsResponse implements DeltaVConstants, XmlSerializable {
-
-    private static Logger log = Logger.getLogger(OptionsResponse.class);
-
-    private final Map entries = new HashMap();
-
-    /**
-     * Add a new entry to this <code>OptionsResponse</code> and make each
-     * href present in the String array being a separate {@link org.apache.jackrabbit.webdav.DavConstants#XML_HREF DAV:href}
-     * element within the entry.
-     *
-     * @param localName
-     * @param namespace
-     * @param hrefs
-     */
-    public void addEntry(String localName, Namespace namespace, String[] hrefs) {
-        Entry entry = new Entry(localName, namespace, hrefs);
-        entries.put(DomUtil.getQualifiedName(localName, namespace), entry);
-    }
-
-    /**
-     *
-     * @param localName
-     * @param namespace
-     * @return
-     */
-    public String[] getHrefs(String localName, Namespace namespace) {
-        String key = DomUtil.getQualifiedName(localName, namespace);
-        if (entries.containsKey(key)) {
-            return ((Entry)entries.get(key)).hrefs;
-        } else {
-            return new String[0];
-        }
-    }
-
-    /**
-     * Return the Xml representation.
-     *
-     * @return Xml representation.
-     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
-     * @param document
-     */
-    public Element toXml(Document document) {
-        Element optionsResponse = DomUtil.createElement(document, XML_OPTIONS_RESPONSE, NAMESPACE);
-        Iterator it = entries.values().iterator();
-        while (it.hasNext()) {
-            Entry entry = (Entry)it.next();
-            Element elem = DomUtil.addChildElement(optionsResponse, entry.localName, entry.namespace);
-            for (int i = 0; i < entry.hrefs.length; i++) {
-                elem.appendChild(DomUtil.hrefToXml(entry.hrefs[i], document));
-            }
-        }
-        return optionsResponse;
-    }
-
-    /**
-     * Build a new <code>OptionsResponse</code> object from the given xml element.
-     *
-     * @param orElem
-     * @return a new <code>OptionsResponse</code> object
-     * @throws IllegalArgumentException if the specified element is <code>null</code>
-     * or if its name is other than 'DAV:options-response'.
-     */
-    public static OptionsResponse createFromXml(Element orElem) {
-        if (!DomUtil.matches(orElem, XML_OPTIONS_RESPONSE, NAMESPACE)) {
-            throw new IllegalArgumentException("DAV:options-response element expected");
-        }
-        OptionsResponse oResponse = new OptionsResponse();
-        ElementIterator it = DomUtil.getChildren(orElem);
-        while (it.hasNext()) {
-            Element el = it.nextElement();
-            List hrefs = new ArrayList();
-            ElementIterator hrefIt = DomUtil.getChildren(el, DavConstants.XML_HREF, DavConstants.NAMESPACE);
-            while (hrefIt.hasNext()) {
-                hrefs.add(DomUtil.getTextTrim(hrefIt.nextElement()));
-            }
-            oResponse.addEntry(el.getLocalName(), DomUtil.getNamespace(el), (String[])hrefs.toArray(new String[hrefs.size()]));
-        }
-        return oResponse;
-    }
-
-    private static class Entry {
-
-        private final String localName;
-        private final Namespace namespace;
-        private final String[] hrefs;
-
-        private Entry(String localName, Namespace namespace, String[] hrefs) {
-            this.localName = localName;
-            this.namespace = namespace;
-            this.hrefs = hrefs;
-        }
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/SupportedMethodSetProperty.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/SupportedMethodSetProperty.java
deleted file mode 100644
index 798d93c..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/SupportedMethodSetProperty.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.version;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.property.AbstractDavProperty;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-/**
- * The <code>SupportedMethodSetProperty</code>
- */
-public class SupportedMethodSetProperty extends AbstractDavProperty implements DeltaVConstants {
-
-    private static Logger log = Logger.getLogger(SupportedMethodSetProperty.class);
-
-    private final String[] methods;
-
-    /**
-     * Create a new <code>SupportedMethodSetProperty</code> property.
-     *
-     * @param methods that are supported by the resource having this property.
-     */
-    public SupportedMethodSetProperty(String[] methods) {
-        super(DeltaVConstants.SUPPORTED_METHOD_SET, true);
-        this.methods = methods;
-    }
-
-    public Object getValue() {
-        return methods;
-    }
-
-    /**
-     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
-     * @param document
-     */
-    public Element toXml(Document document) {
-        Element elem = getName().toXml(document);
-        for (int i = 0; i < methods.length; i++) {
-            Element methodElem = DomUtil.addChildElement(elem, XML_SUPPORTED_METHOD, DeltaVConstants.NAMESPACE);
-            DomUtil.setAttribute(methodElem, "name", DeltaVConstants.NAMESPACE, methods[i]);
-        }
-        return elem;
-    }
-
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/UpdateInfo.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/UpdateInfo.java
deleted file mode 100644
index c3a9329..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/UpdateInfo.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.version;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.xml.XmlSerializable;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.apache.jackrabbit.webdav.xml.ElementIterator;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-import java.util.List;
-import java.util.ArrayList;
-
-/**
- * <code>UpdateInfo</code> encapsulates the request body of an UPDATE request.
- * RFC 3253 defines the request body as follows:
- * <pre>
- * &lt;!ELEMENT update ANY&gt;
- * ANY value: A sequence of elements with at most one DAV:version element and at
- * most one DAV:prop element.
- * &lt;!ELEMENT version (href)&gt;
- * prop: see RFC 2518, Section 12.11
- * </pre>
- *
- * In order to reflect the complete range of version restoring and updating
- * of nodes defined by JSR170 the definition has been extended:
- * <pre>
- * &lt;!ELEMENT update ( (version+ | label-name | workspace ) , (prop)?, (removeExisting)? ) &gt;
- * &lt;!ELEMENT version (href) &gt;
- * &lt;!ELEMENT label-name (#PCDATA) &gt;
- * &lt;!ELEMENT workspace (href) &gt;
- * &lt;!ELEMENT prop ANY &gt;
- * &lt;!ELEMENT removeExisting EMPTY &gt;
- * </pre>
- */
-public class UpdateInfo implements DeltaVConstants, XmlSerializable {
-
-    private static Logger log = Logger.getLogger(UpdateInfo.class);
-
-    private final Element updateElement;
-    private final DavPropertyNameSet propertyNameSet;
-    private String[] versionHref;
-    private String[] labelName;
-    private String workspaceHref;
-
-    /**
-     * Create a new <code>UpdateInfo</code> object.
-     *
-     * @param updateElement
-     * @throws IllegalArgumentException if the updateElement is <code>null</code>
-     * or not a DAV:update element or if the element does not match the required
-     * structure.
-     */
-    public UpdateInfo(Element updateElement) {
-        if (!DomUtil.matches(updateElement, XML_UPDATE, NAMESPACE)) {
-            throw new IllegalArgumentException("DAV:update element expected");
-        }
-
-        boolean done = false;
-        ElementIterator it = DomUtil.getChildren(updateElement, XML_VERSION, NAMESPACE);
-            while (it.hasNext()) {
-            List hrefList = new ArrayList();
-            Element el = it.nextElement();
-            hrefList.add(DomUtil.getChildText(el, DavConstants.XML_HREF, DavConstants.NAMESPACE));
-            versionHref = (String[])hrefList.toArray(new String[hrefList.size()]);
-            done = true;
-        }
-
-        // alternatively 'DAV:label-name' elements may be present.
-        if (!done) {
-            it = DomUtil.getChildren(updateElement, XML_LABEL_NAME, NAMESPACE);
-            while (it.hasNext()) {
-                List labelList = new ArrayList();
-                Element el = it.nextElement();
-                labelList.add(DomUtil.getText(el));
-                labelName = (String[])labelList.toArray(new String[labelList.size()]);
-                done = true;
-            }
-        }
-
-        // last possibility: a DAV:workspace element
-        if (!done) {
-            Element wspElem = DomUtil.getChildElement(updateElement, XML_WORKSPACE, NAMESPACE);
-            if (wspElem != null) {
-                workspaceHref = DomUtil.getChildTextTrim(wspElem, DavConstants.XML_HREF, DavConstants.NAMESPACE);
-        } else {
-            throw new IllegalArgumentException("DAV:update element must contain either DAV:version, DAV:label-name or DAV:workspace child element.");
-        }
-        }
-
-        // if property name set if present
-        if (DomUtil.hasChildElement(updateElement, DavConstants.XML_PROP, DavConstants.NAMESPACE)) {
-            Element propEl = DomUtil.getChildElement(updateElement, DavConstants.XML_PROP, DavConstants.NAMESPACE);
-            propertyNameSet = new DavPropertyNameSet(propEl);
-            updateElement.removeChild(propEl);
-        } else {
-            propertyNameSet = new DavPropertyNameSet();
-        }
-        this.updateElement = updateElement;
-    }
-
-    /**
-     *
-     * @return
-     */
-    public String[] getVersionHref() {
-       return versionHref;
-    }
-
-    /**
-     *
-     * @return
-     */
-    public String[] getLabelName() {
-       return labelName;
-    }
-
-    /**
-     *
-     * @return
-     */
-    public String getWorkspaceHref() {
-       return workspaceHref;
-    }
-
-    /**
-     * Returns a {@link DavPropertyNameSet}. If the DAV:update element contains
-     * a DAV:prop child element the properties specified therein are included
-     * in the set. Otherwise an empty set is returned.<p/>
-     *
-     * <b>WARNING:</b> modifying the DavPropertyNameSet returned by this method does
-     * not modify this <code>UpdateInfo</code>.
-     *
-     * @return set listing the properties specified in the DAV:prop element indicating
-     * those properties that must be reported in the response body.
-     */
-    public DavPropertyNameSet getPropertyNameSet() {
-        return propertyNameSet;
-    }
-
-    /**
-     *
-     * @return
-     */
-    public Element getUpdateElement() {
-        return updateElement;
-    }
-
-    /**
-     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
-     * @param document
-     */
-    public Element toXml(Document document) {
-        Element elem = (Element)document.importNode(updateElement, true);
-        if (!propertyNameSet.isEmpty()) {
-            elem.appendChild(propertyNameSet.toXml(document));
-        }
-        return elem;
-    }
-
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/VersionControlledResource.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/VersionControlledResource.java
deleted file mode 100644
index 6124f87..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/VersionControlledResource.java
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.version;
-
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.MultiStatus;
-import org.apache.jackrabbit.webdav.property.DavPropertyName;
-
-/**
- * The <code>VersionControlledResource</code> represents in contrast to the
- * <code>VersionableResource</code> a resource, that has already been put
- * under version-control. This resource can be checked-in, checked-out and
- * has its on {@link javax.jcr.version.VersionHistory version history}.
- * <p/>
- * RFC 3253 defines the following required properties for a
- * version-controlled resource (vc-resource):
- * <ul>
- * <li>DAV:auto-version</li>
- * <li>DAV:version-history (version-history)</li>
- * <li>DAV:workspace (workspace)</li>
- * <li>DAV:version-controlled-configuration (baseline)</li>
- * <li>all DeltaV-compliant resource properties.</li>
- * </ul>
- *
- * checked-in vc-resource:
- * <ul>
- * <li>DAV:checked-in</li>
- * </ul>
- *
- * checked-out vc-resource:
- * <ul>
- * <li>DAV:checked-out</li>
- * <li>DAV:predecessor-set</li>
- * <li>DAV:checkout-fork (in-place-checkout or working resource)</li>
- * <li>DAV:checkin-fork (in-place-checkout or working resource)</li>
- * <li>DAV:merge-set (merge)</li>
- * <li>DAV:auto-merge-set (merge)</li>
- * <li>DAV:unreserved (activity)</li>
- * <li>DAV:activity-set (activity)</li>
- * </ul>
- * <p/>
- * In addition a version-controlled resource must support the following METHODS:
- * <ul>
- * <li>VERSION-CONTROL</li>
- * <li>MERGE (merge)</li>
- * <li>all DeltaV-compliant resource METHODS.</li>
- * </ul>
- *
- * checked-in vc-resource:
- * <ul>
- * <li>CHECKOUT (checkout-in-place)</li>
- * <li>UPDATE (update)</li>
- * <li>all version-controlled resource METHODS.</li>
- * </ul>
- *
- * checked-out vc-resource:
- * <ul>
- * <li>CHECKIN (checkout-in-place or working-resource)</li>
- * <li>UNCHECKOUT (checkout-in-place)</li>
- * <li>all DeltaV-compliant resource METHODS.</li>
- * </ul>
- *
- * @see DeltaVResource
- * @see VersionableResource
- */
-public interface VersionControlledResource extends VersionableResource {
-
-    /**
-     * Methods defined for a checked-in version-controlled resource: CHECKOUT, UNCHECHKOUT, UPDATE, MERGE, LABEL
-     */
-    public String methods_checkedIn = "CHECKOUT, UNCHECHKOUT, UPDATE, MERGE, LABEL";
-    /**
-     * Methods defined for a checked-out version-controlled resource: CHECKIN, MERGE
-     */
-    public String methods_checkedOut = "CHECKIN, MERGE";
-
-    /**
-     * The DAV:auto-version property determines how it responds to a method that
-     * attempts to modify its content or dead properties. Possible responses
-     * include various combinations of automated checkout, write lock and checkin
-     * as well as failure until the resource is explicitely checked-out.<br>
-     * See <a href="http://www.ietf.org/rfc/rfc3253.txt">RFC 3253</a> for a detailed
-     * description.
-     */
-    public static final DavPropertyName AUTO_VERSION = DavPropertyName.create("auto-version", DeltaVConstants.NAMESPACE);
-
-    /**
-     * The computed property DAV:version-history identifies the version history
-     * resource for the DAV:checked-in or DAV:checked-out version of this
-     * version-controlled resource.<br>
-     * The property is defined to have the following format:
-     * <pre>
-     * &lt;!ELEMENT version-history (href)&gt;
-     * </pre>
-     */
-    public static final DavPropertyName VERSION_HISTORY = DavPropertyName.create("version-history", DeltaVConstants.NAMESPACE);
-
-    /**
-     * The DAV:checked-in property appears on a checked-in version-controlled
-     * resource, and identifies the base version of this version-controlled
-     * resource. This property is removed when the resource is checked out, and
-     * then added back (identifying a new version) when the resource is checked
-     * back in.<br>
-     * This property is defined to have the following format:
-     * <pre>
-     * &lt;!ELEMENT checked-in (href)&gt;
-     * </pre>
-     */
-    public static final DavPropertyName CHECKED_IN = DavPropertyName.create("checked-in", DeltaVConstants.NAMESPACE);
-
-    /**
-     * The DAV:checked-out property identifies the base version of this resource.
-     * It is the same that was identified by the DAV:checked-in property at the
-     * time the resource was checked out. This property is removed when the
-     * resource is checked in.<br>
-     * This property is defined to have the following format:
-     * <pre>
-     * &lt;!ELEMENT checked-out (href)&gt;
-     * </pre>
-     *
-     * @see #CHECKED_IN
-     */
-    public static final DavPropertyName CHECKED_OUT = DavPropertyName.create("checked-out", DeltaVConstants.NAMESPACE);
-
-    /**
-     * The DAV:predecessor-set property of a version-controlled resource points
-     * to those version resources, that are scheduled to become the predecessors
-     * of this resource when it is back checked-in. This property is not
-     * protected, however a server may reject attempts to modify the
-     * DAV:predecessor-set of a version-controlled resource.<br>
-     * This property is defined to have the following format:
-     * <pre>
-     * &lt;!ELEMENT predecessor-set (href+)&gt;
-     * </pre>
-     *
-     * @see #checkin()
-     * @see VersionResource#PREDECESSOR_SET
-     */
-    public static final DavPropertyName PREDECESSOR_SET = DavPropertyName.create("predecessor-set", DeltaVConstants.NAMESPACE);
-
-    /**
-     *  This property determines the DAV:checkin-fork property of the version
-     * that results from checking in this resource.
-     */
-    public static final DavPropertyName CHECKIN_FORK = DavPropertyName.create("checkin-fork", DeltaVConstants.NAMESPACE);
-
-    /**
-     * This property determines the DAV:checkout-fork property of the version
-     * that results from checking in this resource.
-     */
-    public static final DavPropertyName CHECKOUT_FORK = DavPropertyName.create("checkout-fork", DeltaVConstants.NAMESPACE);
-
-    /**
-     * This property identifies each version that is to be merged into this
-     * checked-out resource. This property is set, whenever a MERGE request
-     * with the DAV:no-auto-merge flag succeeded. The client then must confirm
-     * each single merge by removing the version from the DAV:merge-set or
-     * moving it the the versions DAV:predecessor-set.<br>
-     * This property is defined to have the following format:
-     * <pre>
-     * &lt;!ELEMENT merge-set (href*)&gt;
-     * </pre>
-     *
-     * @see #merge(MergeInfo)
-     */
-    public static final DavPropertyName MERGE_SET = DavPropertyName.create("merge-set", DeltaVConstants.NAMESPACE);
-
-    /**
-     * The DAV:auto-merge-set property identifies each version that the server
-     * has merged into this checked-out resource. The client should confirm that
-     * the merge has been performed correctly before moving a URL from the
-     * DAV:auto-merge-set to the DAV:predecessor-set of a checked-out resource.<br>
-     * This property is defined to have the following format:
-     * <pre>
-     * &lt;!ELEMENT auto-merge-set (href*)&gt;
-     * </pre>
-     *
-     * @see #merge(MergeInfo)
-     */
-    public static final DavPropertyName AUTO_MERGE_SET = DavPropertyName.create("auto-merge-set", DeltaVConstants.NAMESPACE);
-
-    /**
-     * Perform a checkin on the version controlled resource.
-     *
-     * @return String representing the location of the version created by the
-     * checkin.
-     * @throws DavException if an error occurs.
-     */
-    public String checkin() throws DavException;
-
-    /**
-     * Perform a checkout on the version controlled resource.
-     *
-     * @throws DavException
-     */
-    public void checkout() throws DavException;
-
-    /**
-     * Perform an uncheckout on the version controlled resource.
-     * 
-     * @throws DavException
-     */
-    public void uncheckout() throws DavException;
-
-    /**
-     * Perform an update on this resource using the specified {@link UpdateInfo}.
-     *
-     * @param updateInfo
-     * @return <code>MultiStatus</code> containing the list of resources that
-     * have been modified by this update call.
-     * @throws DavException
-     */
-    public MultiStatus update(UpdateInfo updateInfo) throws DavException;
-
-    /**
-     * Perform a merge on this resource using the specified {@link MergeInfo}.
-     *
-     * @param mergeInfo
-     * @return <code>MultiStatus</code> containing the list of resources that
-     * have been modified.
-     * @throws DavException
-     */
-    public MultiStatus merge(MergeInfo mergeInfo) throws DavException;
-
-    /**
-     * Modify the labels of the version referenced by the DAV:checked-in property
-     * of this checked-in version-controlled resource. If the resource is not
-     * checked-in the request must fail.
-     *
-     * @param labelInfo
-     * @throws org.apache.jackrabbit.webdav.DavException
-     * @see LabelInfo
-     * @see VersionResource#label(LabelInfo) for the pre- and postcondition of
-     * a successful LABEL request.
-     */
-    public void label(LabelInfo labelInfo) throws DavException;
-
-    /**
-     * Returns the <code>VersionHistoryResource</code>, that is referenced in the
-     * '{@link #VERSION_HISTORY version-history}' property.
-     *
-     * @return
-     * @throws DavException
-     */
-    public VersionHistoryResource getVersionHistory() throws DavException;
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/VersionHistoryResource.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/VersionHistoryResource.java
deleted file mode 100644
index ccf4dd6..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/VersionHistoryResource.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.version;
-
-import org.apache.jackrabbit.webdav.property.DavPropertyName;
-import org.apache.jackrabbit.webdav.property.ResourceType;
-import org.apache.jackrabbit.webdav.DavException;
-
-/**
- * <code>VersionHistoryResource</code> represents a collection that has
- * all versions of a given version-controlled resource as members.
- * <p/>
- * RFC 3253 defines the following required properties for a version history:
- * <ul>
- * <li>DAV:version-set</li>
- * <li>DAV:root-version</li>
- * <li>all DeltaV-compliant resource properties.</li>
- * </ul>
- * <p/>
- * In addition a version history resource must support the following METHODS:
- * <ul>
- * <li>all DeltaV-compliant resource METHODS.</li>
- * </ul>
- *
- * NOTE: the {@link org.apache.jackrabbit.webdav.DavConstants#PROPERTY_RESOURCETYPE DAV:resourcetype}
- * property must indicate 'DAV:version-history'.
- *
- * @see DeltaVResource
- * @see ResourceType#VERSION_HISTORY
- */
-public interface VersionHistoryResource extends DeltaVResource {
-
-    // supported METHODS: same as DeltaVResource > set to empty string
-    public static final String COMPLIANCE_CLASS = "";
-    // supported METHODS: same as DeltaVResource > set to empty string
-    public static final String METHODS = "";
-
-    /**
-     * Computed (protected) property identifying the root version of this version
-     * history.
-     */
-    public static final DavPropertyName ROOT_VERSION = DavPropertyName.create("root-version", DeltaVConstants.NAMESPACE);
-
-    /**
-     * The protected property DAV:version-set identifies each version of this
-     * version history.
-     *
-     * @see #getVersions()
-     */
-    public static final DavPropertyName VERSION_SET = DavPropertyName.create("version-set", DeltaVConstants.NAMESPACE);
-
-    /**
-     * Returns an array of <code>VersionResource</code>s containing all versions
-     * that are a member of this resource.
-     *
-     * @return all <code>VersionResource</code>s that belong to this version history.
-     * @throws org.apache.jackrabbit.webdav.DavException
-     * @see #VERSION_SET
-     */
-    public VersionResource[] getVersions() throws DavException;
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/VersionResource.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/VersionResource.java
deleted file mode 100644
index b1d7a96..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/VersionResource.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.version;
-
-import org.apache.jackrabbit.webdav.property.DavPropertyName;
-import org.apache.jackrabbit.webdav.DavException;
-
-/**
- * <code>VersionResource</code> is a resource that contains a copy of a particular
- * state of a version-controlled resource. A new version resource is created whenever
- * a checked-out version-controlled resource is checked-in. The server allocates
- * a distinct new URL for each new version, and this URL will never be used to
- * identify any resource other than that version. The content and dead properties
- * of a version never change.
- * <p/>
- * RFC 3253 defines the following required properties for a version resource:
- * <ul>
- * <li>DAV:predecessor-set  (protected)</li>
- * <li>DAV:successor-set  (computed)</li>
- * <li>DAV:checkout-set</li>
- * <li>DAV:version-name</li>
- * <li>DAV:checkout-fork (in-place-checkout or working resource)</li>
- * <li>DAV:checkin-fork (in-place-checkout or working resource)</li>
- * <li>DAV:version-history (version-history)</li>
- * <li>DAV:label-name-set (label)</li>
- * <li>DAV:activity-set (activity)</li>
- * <li>all DeltaV-compliant resource properties.</li>
- * </ul>
- * <p/>
- * In addition a version resource must support the following METHODS:
- * <ul>
- * <li>LABEL (label)</li>
- * <li>CHECKOUT (working-resource)</li>
- * <li>all DeltaV-compliant resource METHODS.</li>
- * </ul>
- *
- * @see DeltaVResource
- */
-public interface VersionResource extends DeltaVResource {
-
-    /**
-     * The version resource defines one additional method LABEL.
-     *
-     * @see DeltaVResource#METHODS
-     * @see org.apache.jackrabbit.webdav.DavResource#METHODS
-     */
-    public String METHODS = "LABEL";
-
-    /**
-     * Required protected property 'DAV:label-name-set' for a version of a webdav
-     * resource introduced with the 'LabelInfo' feature.
-     * This property contains the labels that currently select this version.<br>
-     * Property structure is defined as follows:<br>
-     * <pre>
-     * &lt;!ELEMENT label-name-set (label-name*)&gt;
-     * &lt;!ELEMENT label-name (#PCDATA)&gt;
-     * PCDATA value: string
-     * </pre>
-     */
-    public static final DavPropertyName LABEL_NAME_SET = DavPropertyName.create("label-name-set", DeltaVConstants.NAMESPACE);
-
-    /**
-     * The protected DAV:predecessor property identifies each predecessor of
-     * this version. Except for the root version, which has no predecessors,
-     * each version has at least one predecessor.<br>
-     * The property is defined to have the following format:
-     * <pre>
-     * &lt;!ELEMENT predecessor-set (href*)&gt;
-     * </pre>
-     */
-    public static final DavPropertyName PREDECESSOR_SET = DavPropertyName.create("predecessor-set", DeltaVConstants.NAMESPACE);
-
-    /**
-     * The computed property DAV:successor-set identifies each version whose
-     * DAV:predecessor-set identifies this version.<br>
-     * The property is defined to have the following format:
-     * <pre>
-     * &lt;!ELEMENT successor-set (href*)&gt;
-     * </pre>
-     *
-     */
-    public static final DavPropertyName SUCCESSOR_SET = DavPropertyName.create("successor-set", DeltaVConstants.NAMESPACE);
-
-    /**
-     * The computed property  DAV:checkout-set identifies each checked-out
-     * resource whose DAV:checked-out property identifies this version.<br>
-     * The property is defined to have the following format:
-     * <pre>
-     * &lt;!ELEMENT checkout-set (href*)&gt;
-     * </pre>
-     *
-     * @see VersionControlledResource#CHECKED_OUT
-     */
-    public static final DavPropertyName CHECKOUT_SET = DavPropertyName.create("checkout-set", DeltaVConstants.NAMESPACE);
-
-    /**
-     * The protected property DAV:version-name defines a human readable id for
-     * this version. The id defined to be unique within the version-history this
-     * version belongs to.<br>
-     * The property is defined to have the following format:
-     * <pre>
-     * &lt;!ELEMENT version-name (#PCDATA)&gt;
-     * PCDATA value: string
-     * </pre>
-     */
-    public static final DavPropertyName VERSION_NAME = DavPropertyName.create("version-name", DeltaVConstants.NAMESPACE);
-
-    /**
-     * The computed property DAV:version-history identifies the version history
-     * that contains this version.<br>
-     * The property is defined to have the following format:
-     * <pre>
-     * &lt;!ELEMENT version-history (href)&gt;
-     * </pre>
-     */
-    public static final DavPropertyName VERSION_HISTORY = DavPropertyName.create("version-history", DeltaVConstants.NAMESPACE);
-
-    /**
-     * This property controls the behavior of CHECKOUT when a version already
-     * is checked out or has a successor.
-     */
-    public static final DavPropertyName CHECKOUT_FORK = DavPropertyName.create("checkout-fork", DeltaVConstants.NAMESPACE);
-
-    /**
-     * This property controls the behavior of CHECKIN when a version already
-     * has a successor.
-     */
-    public static final DavPropertyName CHECKIN_FORK = DavPropertyName.create("checkin-fork", DeltaVConstants.NAMESPACE);
-
-    /**
-     * Modify the labels of this version resource. The modifications (SET, ADD or
-     * REMOVE) are listed in the specified <code>LabelInfo</code> object.<br>
-     * The case of a label name must be preserved when it is stored and retrieved.
-     * <br>If the type of modification is ADD, then the label must not yet occur on
-     * any other version within the same version history. In contrast a SET
-     * modification will move the indicated label to this version, if it existed
-     * with another version before. After a successful LABEL request the label
-     * must not appear with any other version in the same version history.
-     *
-     * @param labelInfo
-     * @throws org.apache.jackrabbit.webdav.DavException
-     * @see LabelInfo
-     */
-    public void label(LabelInfo labelInfo) throws DavException;
-
-    /**
-     * Returns the <code>VersionHistoryResource</code>, that is referenced in the
-     * {@link #VERSION_HISTORY DAV:version-history} property.
-     *
-     * @return
-     * @throws DavException
-     */
-    public VersionHistoryResource getVersionHistory() throws DavException;
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/VersionableResource.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/VersionableResource.java
deleted file mode 100644
index c3c5e83..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/VersionableResource.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.version;
-
-import org.apache.jackrabbit.webdav.DavException;
-
-/**
- * <code>VersionableResource</code> represents an extension to the basic
- * {@link DeltaVResource}, that allows to adding version-control support. By
- * calling {@link #addVersionControl()} resource is put under version control,
- * thus the versionable resource turns into a version controlled resource.
- * <p/>
- * RFC 3253 defines the following required properties for a versionable resource:
- * <ul>
- * <li>{@link DeltaVConstants#WORKSPACE DAV:workspace} (workspace feature)</li>
- * <li>DAV:version-controlled-configuration (baseline feature)</li>
- * <li>all DeltaV-compliant resource properties</li>
- * </ul>
- * <p/>
- * In addition a versionable resource must support the following METHODS:
- * <ul>
- * <li>VERSION-CONTROL</li>
- * <li>all DeltaV-compliant resource METHODS.</li>
- * </ul>
- *
- * @see DeltaVResource
- */
-public interface VersionableResource extends DeltaVResource {
-
-    /**
-     * No extra compliance class defined, therefore set to empty string
-     */
-    public static final String COMPLIANCE_CLASS = "";
-
-    /**
-     * The versionable resource defines one additional method VERSION-CONTROL.
-     *
-     * @see DeltaVResource#METHODS
-     * @see org.apache.jackrabbit.webdav.DavResource#METHODS
-     */
-    public String METHODS = "VERSION-CONTROL";
-
-    /**
-     * Converts this versionable resource into a version-controlled resource. If
-     * this resource is already version-controlled this resource is not affected.
-     * If however, this resource is not versionable an <code>DavException</code>
-     * (error code: {@link org.apache.jackrabbit.webdav.DavServletResponse#SC_METHOD_NOT_ALLOWED}
-     * is thrown. The same applies, if this resource is versionable but its
-     * current state does not allow to made it a version-controlled one or
-     * if any other error occurs.
-     *
-     * @throws org.apache.jackrabbit.webdav.DavException
-     */
-    public void addVersionControl() throws DavException;
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/package.html b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/package.html
deleted file mode 100644
index d384267..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/package.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<body>
-Interfaces and classes used to cover functionality defined by
-<a href="http://www.ietf.org/rfc/rfc3253.txt">RFC 3253: Versioning Extensions to WebDAV</a>.
-</body>
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/report/ExpandPropertyReport.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/report/ExpandPropertyReport.java
deleted file mode 100644
index 99afb1f..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/report/ExpandPropertyReport.java
+++ /dev/null
@@ -1,265 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.version.report;
-
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavResource;
-import org.apache.jackrabbit.webdav.DavResourceIterator;
-import org.apache.jackrabbit.webdav.DavServletResponse;
-import org.apache.jackrabbit.webdav.MultiStatus;
-import org.apache.jackrabbit.webdav.MultiStatusResponse;
-import org.apache.jackrabbit.webdav.property.AbstractDavProperty;
-import org.apache.jackrabbit.webdav.property.DavProperty;
-import org.apache.jackrabbit.webdav.property.DavPropertyName;
-import org.apache.jackrabbit.webdav.property.HrefProperty;
-import org.apache.jackrabbit.webdav.version.DeltaVConstants;
-import org.apache.jackrabbit.webdav.version.DeltaVResource;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.apache.jackrabbit.webdav.xml.Namespace;
-import org.apache.jackrabbit.webdav.xml.ElementIterator;
-import org.apache.log4j.Logger;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Iterator;
-
-/**
- * <code>ExpandPropertyReport</code> encapsulates the DAV:expand-property report,
- * that provides a mechanism for retrieving in one request the properties from
- * the resources identified by those DAV:href elements. It should be supported by
- * all resources that support the REPORT method.
- * <p/>
- * RFC 3253 specifies the following required format for the request body:
- * <pre>
- * &lt;!ELEMENT expand-property (property*)&gt;
- * &lt;!ELEMENT property (property*)&gt;
- * &lt;!ATTLIST property name NMTOKEN #REQUIRED&gt;
- * name value: a property element type
- * &lt;!ATTLIST property namespace NMTOKEN "DAV:"&gt;
- * namespace value: an XML namespace
- * </pre>
- * NOTE: any DAV:property elements defined in the request body, that does not
- * represent {@link HrefProperty} is treated as in a common PROPFIND request.
- *
- * @see DeltaVConstants#XML_EXPAND_PROPERTY
- * @see DeltaVConstants#XML_PROPERTY
- */
-public class ExpandPropertyReport implements Report, DeltaVConstants {
-
-    private static Logger log = Logger.getLogger(ExpandPropertyReport.class);
-
-    private DeltaVResource resource;
-    private ReportInfo info;
-    private Iterator propertyElements;
-
-    /**
-     * Returns {@link ReportType#EXPAND_PROPERTY}.
-     *
-     * @return
-     * @see Report#getType()
-     */
-    public ReportType getType() {
-        return ReportType.EXPAND_PROPERTY;
-    }
-
-    /**
-     * Always returns <code>true</code>.
-     *
-     * @return true
-     * @see org.apache.jackrabbit.webdav.version.report.Report#isMultiStatusReport()
-     */
-    public boolean isMultiStatusReport() {
-        return true;
-    }
-
-    /**
-     * @see Report#init(org.apache.jackrabbit.webdav.version.DeltaVResource, ReportInfo)
-     */
-    public void init(DeltaVResource resource, ReportInfo info) throws DavException {
-        setResource(resource);
-        setInfo(info);
-    }
-
-    /**
-     * Set the target resource.
-     *
-     * @param resource
-     * @throws DavException if the specified resource is <code>null</code>
-     */
-    private void setResource(DeltaVResource resource) throws DavException {
-        if (resource == null) {
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "The resource specified must not be null.");
-        }
-        this.resource = resource;
-    }
-
-    /**
-     * Set the <code>ReportInfo</code>.
-     *
-     * @param info
-     * @throws DavException if the given <code>ReportInfo</code>
-     * does not contain a DAV:expand-property element.
-     */
-    private void setInfo(ReportInfo info) throws DavException {
-        if (!getType().isRequestedReportType(info)) {
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "DAV:expand-property element expected.");
-        }
-        this.info = info;
-        propertyElements = info.getContentElements(XML_PROPERTY, NAMESPACE).iterator();
-    }
-
-    /**
-     * Run the report
-     *
-     * @return Xml <code>Document</code> as defined by
-     * <a href="http://www.ietf.org/rfc/rfc2518.txt">RFC 2518</a>
-     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
-     * @param document
-     */
-    public Element toXml(Document document) {
-        return getMultiStatus().toXml(document);
-    }
-
-    /**
-     * Retrieve the multistatus object that is returned in response to the
-     * expand-property report request.
-     *
-     * @return
-     * @throws NullPointerException if info and resource have not been set.
-     */
-    private MultiStatus getMultiStatus() {
-        if (info == null || resource == null) {
-            throw new NullPointerException("Error while running DAV:version-tree report");
-        }
-
-        MultiStatus ms = new MultiStatus();
-        addResponses(resource, info.getDepth(), ms);
-        return ms;
-    }
-
-    /**
-     * Fills the specified <code>MultiStatus</code> object by generating a
-     * <code>MultiStatusResponse</code> for the given resource (and
-     * its member according to the depth value).
-     *
-     * @param res
-     * @param depth
-     * @param ms
-     * @see #getResponse(DavResource, Iterator)
-     */
-    private void addResponses(DavResource res, int depth, MultiStatus ms) {
-        MultiStatusResponse response = getResponse(res, propertyElements);
-        ms.addResponse(response);
-        if (depth > 0) {
-            DavResourceIterator it = res.getMembers();
-            while (it.hasNext()) {
-                addResponses(it.nextResource(), depth-1, ms);
-            }
-        }
-    }
-
-    /**
-     * Builds a <code>MultiStatusResponse</code> for the given resource respecting
-     * the properties specified. Any property that represents a {@link HrefProperty}
-     * is expanded: It's name equals the name of a valid {@link HrefProperty}.
-     * However the value of that given property (consisting of one or multiple DAV:href elements)
-     * is replaced by the Xml representation of a separate
-     * {@link MultiStatusResponse multistatus responses} for the
-     * resource referenced by the given DAV:href elements. The responses may
-     * themselves have properties, which are defined by the separate list.
-     *
-     * @param res
-     * @param propertyElements
-     * @return <code>MultiStatusResponse</code> for the given resource.
-     * @see ExpandProperty
-     */
-    private MultiStatusResponse getResponse(DavResource res, Iterator propertyElements) {
-        MultiStatusResponse resp = new MultiStatusResponse(res.getHref(), null);
-        while (propertyElements.hasNext()) {
-            Element propertyElem = (Element)propertyElements.next();
-            // retrieve the localName present in the "name" attribute
-            String nameAttr = propertyElem.getAttribute(ATTR_NAME);
-            if (nameAttr == null || "".equals(nameAttr)) {
-                // NOTE: this is not valid according to the DTD
-                continue;
-            }
-            // retrieve the namespace present in the "namespace" attribute
-            // NOTE: if this attribute is missing the DAV: namespace represents the default.
-            String namespaceAttr = propertyElem.getAttribute(ATTR_NAMESPACE);
-            Namespace namespace = (namespaceAttr != null) ? Namespace.getNamespace(namespaceAttr) : NAMESPACE;
-
-            DavPropertyName propName = DavPropertyName.create(nameAttr, namespace);
-            DavProperty p = res.getProperty(propName);
-            if (p != null) {
-                if (p instanceof HrefProperty && res instanceof DeltaVResource) {
-                    ElementIterator it = DomUtil.getChildren(propertyElem, XML_PROPERTY, NAMESPACE);
-                    resp.add(new ExpandProperty((DeltaVResource)res, (HrefProperty)p, it));
-                } else {
-                    resp.add(p);
-                }
-            } else {
-                resp.add(propName, DavServletResponse.SC_NOT_FOUND);
-            }
-        }
-        return resp;
-    }
-
-    //--------------------------------------------------------< inner class >---
-    /**
-     * <code>ExpandProperty</code> extends <code>DavProperty</code>. It's name
-     * equals the name of a valid {@link HrefProperty}. However the value of
-     * that given property (consisting of one or multiple DAV:href elements)
-     * is replaced by the Xml representation of a separate
-     * {@link MultiStatusResponse multistatus responses} for the
-     * resource referenced to by the given DAV.:href elements. The responses may
-     * themselves have properties, which are defined by the separate list.
-     */
-    private class ExpandProperty extends AbstractDavProperty {
-
-        private List valueList = new ArrayList();
-
-        /**
-         * Create a new <code>ExpandProperty</code>.
-         *
-         * @param hrefProperty
-         * @param elementIter
-         */
-        private ExpandProperty(DeltaVResource deltaVResource, HrefProperty hrefProperty, ElementIterator elementIter) {
-            super(hrefProperty.getName(), hrefProperty.isProtected());
-            try {
-                DavResource[] refResource = deltaVResource.getReferenceResources(hrefProperty.getName());
-                for (int i = 0; i < refResource.length; i++) {
-                    MultiStatusResponse resp = getResponse(refResource[i], elementIter);
-                    valueList.add(resp);
-                }
-            } catch (DavException e) {
-                // invalid references or unknown property
-                log.error(e.getMessage());
-            }
-        }
-
-        /**
-         * Returns a List of {@link MultiStatusResponse} objects.
-         *
-         * @return
-         */
-        public Object getValue() {
-            return valueList;
-        }
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/report/LocateByHistoryReport.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/report/LocateByHistoryReport.java
deleted file mode 100644
index 98fadba..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/report/LocateByHistoryReport.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.version.report;
-
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavResource;
-import org.apache.jackrabbit.webdav.DavResourceIterator;
-import org.apache.jackrabbit.webdav.DavServletResponse;
-import org.apache.jackrabbit.webdav.MultiStatus;
-import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
-import org.apache.jackrabbit.webdav.version.DeltaVConstants;
-import org.apache.jackrabbit.webdav.version.DeltaVResource;
-import org.apache.jackrabbit.webdav.version.VersionControlledResource;
-import org.apache.jackrabbit.webdav.version.VersionHistoryResource;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.apache.jackrabbit.webdav.xml.ElementIterator;
-import org.apache.log4j.Logger;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
-import java.util.HashSet;
-
-/**
- * <code>LocateByHistoryReport</code> encapsulates the DAV:locate-by-hisotry
- * report, that may be used to locate a version-controlled resource for that
- * version history. The DAV:locate-by-history report can be applied to a collection
- * to locate the collection member that is a version-controlled resource for a
- * specified version history resource.
- *
- * <pre>
- * &lt;!ELEMENT locate-by-history (version-history-set, prop)&gt;
- * &lt;!ELEMENT version-history-set (href+)&gt;
- * </pre>
- */
-public class LocateByHistoryReport implements Report, DeltaVConstants {
-
-    private static Logger log = Logger.getLogger(LocateByHistoryReport.class);
-
-    private ReportInfo info;
-    private HashSet vhHrefSet = new HashSet();
-    private DeltaVResource resource;
-
-    /**
-     *
-     * @return
-     * @see Report#getType()
-     */
-    public ReportType getType() {
-        return ReportType.LOCATE_BY_HISTORY;
-    }
-
-    /**
-     * @see Report#init(org.apache.jackrabbit.webdav.version.DeltaVResource, ReportInfo) 
-     */
-    public void init(DeltaVResource resource, ReportInfo info) throws DavException {
-        if (resource == null || !(resource instanceof VersionControlledResource)) {
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "DAV:version-tree report can only be created for version-controlled resources and version resources.");
-        }
-            this.resource = resource;
-        setInfo(info);
-    }
-
-    /**
-     * Set the <code>ReportInfo</code>
-     *
-     * @param info
-     * @throws DavException if the given <code>ReportInfo</code>
-     * does not contain a DAV:version-tree element.
-     */
-    private void setInfo(ReportInfo info) throws DavException {
-        if (info == null || !getType().isRequestedReportType(info)) {
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "DAV:locate-by-history element expected.");
-        }
-        Element versionHistorySet = info.getContentElement(XML_VERSION_HISTORY_SET, NAMESPACE);
-        if (versionHistorySet == null) {
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "The DAV:locate-by-history element must contain a DAV:version-history-set child.");
-        }
-        ElementIterator it = DomUtil.getChildren(versionHistorySet, DavConstants.XML_HREF, DavConstants.NAMESPACE);
-            while (it.hasNext()) {
-            String href = DomUtil.getText(it.nextElement());
-            if (href != null && !"".equals(href)) {
-                    vhHrefSet.add(href);
-                }
-            }
-        this.info = info;
-        }
-
-    /**
-     * Always returns <code>true</code>.
-     *
-     * @return true
-     * @see org.apache.jackrabbit.webdav.version.report.Report#isMultiStatusReport()
-     */
-    public boolean isMultiStatusReport() {
-        return true;
-    }
-
-    /**
-     * Run the report.
-     *
-     * @return Xml <code>Document</code> representing the report in the required
-     * format.
-     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
-     * @param document
-     */
-    public Element toXml(Document document) {
-        return getMultiStatus().toXml(document);
-        }
-
-    /**
-     * Retrieve the <code>MultiStatus</code> that is returned in response to a locate-by-history
-     * report request.
-     *
-     * @return
-     * @throws NullPointerException if info or resource is <code>null</code>.
-     */
-    private MultiStatus getMultiStatus() {
-        MultiStatus ms = new MultiStatus();
-        buildResponse(resource, info.getPropertyNameSet(), info.getDepth(), ms);
-        return ms;
-    }
-
-    /**
-     * Fill the <code>MultiStatus</code> with the <code>MultiStatusResponses</code>
-     * generated for the specified resource and its members according to the
-     * depth value.
-     *
-     * @param res
-     * @param propNameSet
-     * @param depth
-     * @param ms
-     */
-    private void buildResponse(DavResource res, DavPropertyNameSet propNameSet,
-                               int depth, MultiStatus ms) {
-        // loop over members first, since this report only list members
-        DavResourceIterator it = res.getMembers();
-        while (!vhHrefSet.isEmpty() && it.hasNext()) {
-            DavResource childRes = it.nextResource();
-            if (childRes instanceof VersionControlledResource) {
-                try {
-                    VersionHistoryResource vhr = ((VersionControlledResource)childRes).getVersionHistory();
-                    if (vhHrefSet.remove(vhr.getHref())) {
-                        if (propNameSet.isEmpty()) {
-                            ms.addResourceStatus(childRes, DavServletResponse.SC_OK, 0);
-                        } else {
-                            ms.addResourceProperties(childRes, propNameSet, 0);
-                        }
-                    }
-                } catch (DavException e) {
-                    log.info(e.getMessage());
-                }
-            }
-            // traverse subtree
-            if (depth > 0) {
-                buildResponse(it.nextResource(), propNameSet, depth-1, ms);
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/report/Report.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/report/Report.java
deleted file mode 100644
index 769505b..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/report/Report.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.version.report;
-
-import org.apache.jackrabbit.webdav.xml.XmlSerializable;
-import org.apache.jackrabbit.webdav.version.DeltaVResource;
-import org.apache.jackrabbit.webdav.DavException;
-
-/**
- * The <code>Report</code> interface defines METHODS needed in order to respond
- * to a REPORT request. The REPORT method is a required feature to all
- * DeltaV resources.
- *
- * @see DeltaVResource#getReport(ReportInfo)
- */
-public interface Report extends XmlSerializable {
-
-    /**
-     * Returns the registered type of this report.
-     *
-     * @return the type of this report.
-     */
-    public ReportType getType();
-
-    /**
-     * Returns true if this <code>Report</code> will send a <code>MultiStatus</code>
-     * response.<br>
-     * Please note that RFC 3253 that the the response must be a 207 Multi-Status,
-     * if a Depth request header is present.
-     *
-     * @return
-     */
-    public boolean isMultiStatusReport();
-
-    /**
-     * Set the <code>DeltaVResource</code> for which this report was requested
-     * and the <code>ReportInfo</code> as specified by the REPORT request body,
-     * that defines the details for this report.<br>
-     * Please note that this methods should perform basic validation checks
-     * in order to prevent execeptional situations during the xml serialization.
-     *
-     * @param resource
-     * @param info
-     * @throws DavException
-     */
-    public void init(DeltaVResource resource, ReportInfo info) throws DavException;
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/report/ReportInfo.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/report/ReportInfo.java
deleted file mode 100644
index 8dcb7d6..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/report/ReportInfo.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.version.report;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.xml.XmlSerializable;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.apache.jackrabbit.webdav.xml.ElementIterator;
-import org.apache.jackrabbit.webdav.xml.Namespace;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-
-import java.util.Iterator;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * The <code>ReportInfo</code> class encapsulates the body of a REPORT request.
- * <a href="http://www.ietf.org/rfc/rfc3253.txt">RFC 3253</a> the top Xml element
- * being the name of the requested report. In addition a Depth header may
- * be present (default value: {@link DavConstants#DEPTH_0}).
- */
-public class ReportInfo implements XmlSerializable {
-
-    private static Logger log = Logger.getLogger(ReportInfo.class);
-
-    private final String typeLocalName;
-    private final Namespace typeNamespace;
-    private final int depth;
-    private final DavPropertyNameSet propertyNames;
-    private final List content = new ArrayList();
-
-    /**
-     * Create a new <code>ReportInfo</code>
-     *
-     * @param type
-     */
-    public ReportInfo(ReportType type) {
-        this(type, DavConstants.DEPTH_0, null);
-    }
-
-    /**
-     * Create a new <code>ReportInfo</code>
-     *
-     * @param type
-     * @param depth
-     */
-    public ReportInfo(ReportType type, int depth) {
-        this(type, depth, null);
-    }
-
-    /**
-     * Create a new <code>ReportInfo</code>
-     *
-     * @param type
-     * @param depth
-     * @param propertyNames
-     */
-    public ReportInfo(ReportType type, int depth, DavPropertyNameSet propertyNames) {
-        this.typeLocalName = type.getLocalName();
-        this.typeNamespace = type.getNamespace();
-        this.depth = depth;
-        if (propertyNames != null) {
-            this.propertyNames = new DavPropertyNameSet(propertyNames);
-        } else {
-            this.propertyNames = new DavPropertyNameSet();
-        }
-    }
-
-    /**
-     * Create a new <code>ReportInfo</code> object from the given Xml element.
-     *
-     * @param reportElement
-     * @param depth Depth value as retrieved from the {@link DavConstants#HEADER_DEPTH}.
-     */
-    public ReportInfo(Element reportElement, int depth) {
-        if (reportElement == null) {
-            throw new IllegalArgumentException("Report request body must not be null.");
-        }
-
-        this.typeLocalName = reportElement.getLocalName();
-        this.typeNamespace = DomUtil.getNamespace(reportElement);
-        this.depth = depth;
-        Element propElement = DomUtil.getChildElement(reportElement, DavConstants.XML_PROP, DavConstants.NAMESPACE);
-        if (propElement != null) {
-            propertyNames = new DavPropertyNameSet(propElement);
-            reportElement.removeChild(propElement);
-        } else {
-            propertyNames = new DavPropertyNameSet();
-    }
-
-        ElementIterator it = DomUtil.getChildren(reportElement);
-        while (it.hasNext()) {
-            Element el = it.nextElement();
-            if (!DavConstants.XML_PROP.equals(el.getLocalName())) {
-                content.add(el);
-            }
-        }
-    }
-
-    /**
-     * Returns the depth field. The request must be applied separately to the
-     * collection itself and to all members of the collection that satisfy the
-     * depth value.
-     *
-     * @return depth
-     */
-    public int getDepth() {
-        return depth;
-    }
-
-    /**
-     * Name of the report type that will be / has been requested.
-     *
-     * @return Name of the report type
-     */
-    public String getReportName() {
-        return DomUtil.getQualifiedName(typeLocalName, typeNamespace);
-    }
-
-    /**
-     * Indicates whether this info contains an element with the given name/namespace.
-     *
-     * @param localName
-     * @param namespace
-     * @return true if an element with the given name/namespace is present in the
-     * body of the request info.
-     */
-    public boolean containsContentElement(String localName, Namespace namespace) {
-        if (content.isEmpty()) {
-            return false;
-        }
-        Iterator it = content.iterator();
-        while (it.hasNext()) {
-            Element elem = (Element)it.next();
-            boolean sameNamespace = (namespace == null) ? elem.getNamespaceURI() == null : namespace.isSame(elem.getNamespaceURI());
-            if (sameNamespace && elem.getLocalName().equals(localName)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Retrieves the Xml element with the given name/namespace that is a child
-     * of this info. If no such child exists <code>null</code> is returned. If
-     * multiple elements with the same name exist, the first one is returned.
-     *
-     * @param localName
-     * @param namespace
-     * @return Xml element with the given name/namespace or <code>null</code>
-     */
-    public Element getContentElement(String localName, Namespace namespace) {
-        List values = getContentElements(localName, namespace);
-        if (values.isEmpty()) {
-            return null;
-        } else {
-            return (Element)values.get(0);
-        }
-    }
-
-    /**
-     * Returns a list containing all child Xml elements of this info that have
-     * the specified name/namespace. If this info contains no such element,
-     * an empty list is returned.
-     *
-     * @param localName
-     * @param namespace
-     * @return List contain all child elements with the given name/namespace
-     * or an empty list.
-     */
-    public List getContentElements(String localName, Namespace namespace) {
-        List l = new ArrayList();
-        Iterator it = content.iterator();
-        while (it.hasNext()) {
-            Element elem = (Element)it.next();
-            if (DomUtil.matches(elem, localName, namespace)) {
-                l.add(elem);
-            }
-        }
-        return l;
-    }
-
-    /**
-     * Add the specified Xml element as child of this info.
-     *
-     * @param contentElement
-     */
-    public void setContentElement(Element contentElement) {
-        content.add(contentElement);
-    }
-
-    /**
-     * Returns a <code>DavPropertyNameSet</code> providing the property names present
-     * in an eventual {@link DavConstants#XML_PROP} child element. If no such
-     * child element is present an empty set is returned.
-     *
-     * @return {@link DavPropertyNameSet} providing the property names present
-     * in an eventual {@link DavConstants#XML_PROP DAV:prop} child element or an empty set.
-     */
-    public DavPropertyNameSet getPropertyNameSet() {
-        return propertyNames;
-    }
-
-
-    /**
-     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
-     * @param document
-     */
-    public Element toXml(Document document) {
-        Element reportElement = DomUtil.createElement(document, typeLocalName, typeNamespace);
-        if (!content.isEmpty()) {
-            Iterator it = content.iterator();
-            while (it.hasNext()) {
-                Object contentEntry = it.next();
-                if (contentEntry instanceof Node) {
-                    Node n = document.importNode((Node)contentEntry, true);
-                    reportElement.appendChild(n);
-                }
-                // else: another object. this should never occure and is therefore ignored.
-            }
-        }
-        if (!propertyNames.isEmpty()) {
-            reportElement.appendChild(propertyNames.toXml(document));
-        }
-        return reportElement;
-    }
-
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/report/ReportType.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/report/ReportType.java
deleted file mode 100644
index e709fbd..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/report/ReportType.java
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.version.report;
-
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavServletResponse;
-import org.apache.jackrabbit.webdav.version.DeltaVConstants;
-import org.apache.jackrabbit.webdav.version.DeltaVResource;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.apache.jackrabbit.webdav.xml.Namespace;
-import org.apache.jackrabbit.webdav.xml.XmlSerializable;
-import org.apache.log4j.Logger;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
-import java.util.HashMap;
-
-/**
- * <code>ReportType</code>...
- */
-public class ReportType implements DeltaVConstants, XmlSerializable {
-
-    private static Logger log = Logger.getLogger(ReportType.class);
-
-    private static final HashMap types = new HashMap();
-
-    public static final ReportType VERSION_TREE = register(XML_VERSION_TREE, NAMESPACE, VersionTreeReport.class);
-    public static final ReportType EXPAND_PROPERTY = register(XML_EXPAND_PROPERTY, NAMESPACE, ExpandPropertyReport.class);
-    public static final ReportType LOCATE_BY_HISTORY = register(XML_LOCATE_BY_HISTORY, NAMESPACE, LocateByHistoryReport.class);
-
-    private final String key;
-    private final String localName;
-    private final Namespace namespace;
-    private final Class reportClass;
-
-    /**
-     * Private constructor
-     *
-     * @see ReportType#register(String, org.apache.jackrabbit.webdav.xml.Namespace, Class)
-     */
-    private ReportType(String localName, Namespace namespace, String key, Class reportClass) {
-        this.localName = localName;
-        this.namespace = namespace;
-        this.key = key;
-        this.reportClass = reportClass;
-    }
-
-    /**
-     * Creates a new {@link Report} with this type.
-     *
-     * @return
-     * @throws DavException
-     */
-    public Report createReport(DeltaVResource resource, ReportInfo info) throws DavException {
-        try {
-            Report report = (Report) reportClass.getConstructor(new Class[0]).newInstance(new Object[0]);
-            report.init(resource, info);
-            return report;
-        } catch (Exception e) {
-            // should never occur
-            throw new DavException(DavServletResponse.SC_INTERNAL_SERVER_ERROR, "Failed to register Report.");
-        }
-    }
-
-    /**
-     * Returns an Xml element representing this report type. It may be used to
-     * build the body for a REPORT request.
-     *
-     * @param document
-     * @return Xml representation
-     * @see XmlSerializable#toXml(org.w3c.dom.Document)
-     */
-    public Element toXml(Document document) {
-        return DomUtil.createElement(document, localName, namespace);
-    }
-
-    /**
-     * Returns true if this <code>ReportType</code> is requested by the given
-     * <code>ReportInfo</code>
-     *
-     * @param reqInfo
-     * @return
-     */
-    public boolean isRequestedReportType(ReportInfo reqInfo) {
-        if (reqInfo != null) {
-            return getReportName().equals(reqInfo.getReportName());
-        }
-        return false;
-    }
-
-    /**
-     * Return the qualified name of this <code>ReportType</code>.
-     *
-     * @return qualified name
-     */
-    public String getReportName() {
-        return key;
-            }
-
-    /**
-     *
-     * @return
-     */
-    public String getLocalName() {
-        return localName;
-        }
-
-    /**
-     *
-     * @return
-     */
-    public Namespace getNamespace() {
-        return namespace;
-    }
-
-    /**
-     * Register the report type with the given name, namespace and class, that can
-     * run that report.
-     *
-     * @param localName
-     * @param namespace
-     * @param reportClass
-     * @return
-     * @throws IllegalArgumentException if either parameter is <code>null</code> or
-     * if the given class does not implement the {@link Report} interface or if
-     * it does not provide an empty constructor.
-     */
-    public static ReportType register(String localName, Namespace namespace, Class reportClass) {
-        if (localName == null || namespace == null || reportClass == null) {
-            throw new IllegalArgumentException("A ReportType cannot be registered with a null name, namespace or report class");
-        }
-
-        String key = DomUtil.getQualifiedName(localName, namespace);
-        if (types.containsKey(key)) {
-            return (ReportType) types.get(key);
-        } else {
-            // test if this report class has an empty constructor and implements Report interface
-            boolean isValidClass = false;
-            Class[] interfaces = reportClass.getInterfaces();
-            for (int i = 0; i < interfaces.length && !isValidClass; i++) {
-                isValidClass = (interfaces[i] == Report.class);
-            }
-            if (!isValidClass) {
-                throw new IllegalArgumentException("The specified report class must implement the Report interface.");
-            }
-
-            try {
-                reportClass.getConstructor(new Class[0]);
-            } catch (NoSuchMethodException e) {
-                throw new IllegalArgumentException("The specified report class must provide a default constructor.");
-            }
-
-            ReportType type = new ReportType(localName, namespace, key, reportClass);
-            types.put(key, type);
-            return type;
-        }
-    }
-
-    /**
-     * Return the <code>ReportType</code> requested by the given report info object.
-     *
-     * @param reportInfo
-     * @return the requested <code>ReportType</code>
-     * @throws IllegalArgumentException if the reportInfo is <code>null</code> or
-     * if the requested report type has not been registered yet.
-     */
-    public static ReportType getType(ReportInfo reportInfo) {
-        if (reportInfo == null) {
-            throw new IllegalArgumentException("ReportInfo must not be null.");
-        }
-        String key = reportInfo.getReportName();
-        if (types.containsKey(key)) {
-            return (ReportType) types.get(key);
-        } else {
-            throw new IllegalArgumentException("The request report '"+key+"' has not been registered yet.");
-        }
-    }
-}
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/report/SupportedReportSetProperty.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/report/SupportedReportSetProperty.java
deleted file mode 100644
index 261479b..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/report/SupportedReportSetProperty.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.version.report;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.version.DeltaVConstants;
-import org.apache.jackrabbit.webdav.property.AbstractDavProperty;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-import java.util.HashSet;
-import java.util.Iterator;
-
-/**
- * <code>SupportedReportSetProperty</code> represents the DAV:supported-report-set
- * property defined by RFC 3253. It identifies the reports that are supported by
- * the given resource.
- * <pre>
- * &lt;!ELEMENT supported-report-set (supported-report*)&gt;
- * &lt;!ELEMENT supported-report report&gt;
- * &lt;!ELEMENT report ANY&gt;
- * ANY value: a report element type
- * </pre>
- */
-public class SupportedReportSetProperty extends AbstractDavProperty {
-
-    private static Logger log = Logger.getLogger(SupportedReportSetProperty.class);
-
-    private final HashSet reportTypes = new HashSet();
-
-    /**
-     * Create a new empty <code>SupportedReportSetProperty</code>.
-     */
-    public SupportedReportSetProperty() {
-        super(DeltaVConstants.SUPPORTED_REPORT_SET, true);
-    }
-
-    /**
-     * Create a new <code>SupportedReportSetProperty</code> property.
-     *
-     * @param reportTypes that are supported by the resource having this property.
-     */
-    public SupportedReportSetProperty(ReportType[] reportTypes) {
-        super(DeltaVConstants.SUPPORTED_REPORT_SET, true);
-        for (int i = 0; i < reportTypes.length; i++) {
-            addReportType(reportTypes[i]);
-        }
-    }
-
-    /**
-     * Add an additional report type to this property's value.
-     *
-     * @param reportType
-     */
-    public void addReportType(ReportType reportType) {
-        reportTypes.add(reportType);
-    }
-
-    /**
-     * Returns true if the report type indicated in the specified <code>RequestInfo</code>
-     * object is included in the supported reports.
-     *
-     * @param reqInfo
-     * @return true if the requested report is supported.
-     */
-    public boolean isSupportedReport(ReportInfo reqInfo) {
-        Iterator it = reportTypes.iterator();
-        while (it.hasNext()) {
-            ReportType rt = (ReportType)it.next();
-            if (rt.isRequestedReportType(reqInfo)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Returns a set of report types.
-     *
-     * @return set of {@link ReportType}.
-     * @see org.apache.jackrabbit.webdav.property.DavProperty#getValue()
-     */
-    public Object getValue() {
-        return reportTypes;
-    }
-
-    /**
-     * Returns the Xml representation of this property.
-     *
-     * @return Xml representation listing all supported reports
-     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
-     * @param document
-     */
-    public Element toXml(Document document) {
-        Element elem = getName().toXml(document);
-        Iterator it = reportTypes.iterator();
-        while (it.hasNext()) {
-	    Element sr = DomUtil.addChildElement(elem, DeltaVConstants.XML_SUPPORTED_REPORT, DeltaVConstants.NAMESPACE);
-            Element r = DomUtil.addChildElement(sr, DeltaVConstants.XML_REPORT, DeltaVConstants.NAMESPACE);
-	    r.appendChild(((ReportType)it.next()).toXml(document));
-        }
-        return elem;
-    }
-
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/report/VersionTreeReport.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/report/VersionTreeReport.java
deleted file mode 100644
index 95a19e6..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/report/VersionTreeReport.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.version.report;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
-import org.apache.jackrabbit.webdav.version.DeltaVConstants;
-import org.apache.jackrabbit.webdav.version.DeltaVResource;
-import org.apache.jackrabbit.webdav.version.VersionControlledResource;
-import org.apache.jackrabbit.webdav.version.VersionResource;
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.DavServletResponse;
-import org.apache.jackrabbit.webdav.MultiStatus;
-import org.apache.jackrabbit.webdav.DavResource;
-import org.apache.jackrabbit.webdav.DavResourceIterator;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-/**
- * <code>VersionTreeReport</code> encapsulates the DAV:version-tree report.
- * It describes the requested properties of all the versions in the version
- * history of a version. The DAV:version-tree report must be supported by all
- * version resources and all version-controlled resources.
- */
-public class VersionTreeReport implements Report, DeltaVConstants {
-
-    private static Logger log = Logger.getLogger(VersionTreeReport.class);
-
-    private ReportInfo info;
-    private DeltaVResource resource;
-
-    /**
-     * Returns {@link ReportType#VERSION_TREE}
-     *
-     * @return {@link ReportType#VERSION_TREE}
-     * @see Report#getType()
-     */
-    public ReportType getType() {
-        return ReportType.VERSION_TREE;
-    }
-
-    /**
-     * Always returns <code>true</code>.
-     *
-     * @return true
-     * @see org.apache.jackrabbit.webdav.version.report.Report#isMultiStatusReport()
-     */
-    public boolean isMultiStatusReport() {
-        return true;
-    }
-
-    /**
-     * Validates the specified resource and info objects.
-     *
-     * @param resource
-     * @param info
-     * @throws org.apache.jackrabbit.webdav.DavException
-     * @see Report#init(org.apache.jackrabbit.webdav.version.DeltaVResource, ReportInfo)
-     */
-    public void init(DeltaVResource resource, ReportInfo info) throws DavException {
-        setResource(resource);
-        setInfo(info);
-    }
-
-    /**
-     * Set the <code>DeltaVResource</code> used to register this report.
-     *
-     * @param resource
-     * @throws DavException if the given resource is neither
-     * {@link org.apache.jackrabbit.webdav.version.VersionControlledResource} nor {@link org.apache.jackrabbit.webdav.version.VersionResource}.
-     */
-    private void setResource(DeltaVResource resource) throws DavException {
-        if (resource != null && (resource instanceof VersionControlledResource || resource instanceof VersionResource)) {
-            this.resource = resource;
-        } else {
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "DAV:version-tree report can only be created for version-controlled resources and version resources.");
-        }
-    }
-
-    /**
-     * Set the <code>ReportInfo</code> as specified by the REPORT request body,
-     * that defines the details for this report.
-     *
-     * @param info
-     * @throws DavException if the given <code>ReportInfo</code>
-     * does not contain a DAV:version-tree element.
-     */
-    private void setInfo(ReportInfo info) throws DavException {
-        if (!getType().isRequestedReportType(info)) {
-            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "DAV:version-tree element expected.");
-        }
-        this.info = info;
-    }
-
-    /**
-     * Runs the DAV:version-tree report.
-     *
-     * @return Xml <code>Document</code> representing the report in the required
-     * format.
-     * @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(Document)
-     * @param document
-     */
-    public Element toXml(Document document) {
-        return getMultiStatus().toXml(document);
-    }
-
-    /**
-     * Retrieve the <code>MultiStatus</code> that is returned in response to a locate-by-history
-     * report request.
-     *
-     * @return
-     * @throws NullPointerException if info or resource is <code>null</code>.
-     */
-    private MultiStatus getMultiStatus() {
-        if (info == null || resource == null) {
-            throw new NullPointerException("Error while running DAV:version-tree report");
-        }
-
-        MultiStatus ms = new MultiStatus();
-        buildResponse(resource, info.getPropertyNameSet(), info.getDepth(), ms);
-        return ms;
-    }
-
-    /**
-     *
-     * @param res
-     * @param propNameSet
-     * @param depth
-     * @param ms
-     */
-    private void buildResponse(DavResource res, DavPropertyNameSet propNameSet,
-                               int depth, MultiStatus ms) {
-        try {
-        VersionResource[] versions = getVersions(res);
-        for (int i = 0; i < versions.length; i++) {
-            if (propNameSet.isEmpty()) {
-                ms.addResourceStatus(versions[i], DavServletResponse.SC_OK, 0);
-            } else {
-                ms.addResourceProperties(versions[i], propNameSet, 0);
-            }
-            }
-        } catch (DavException e) {
-            log.error(e);
-        }
-        if (depth > 0) {
-            DavResourceIterator it = res.getMembers();
-            while (it.hasNext()) {
-                buildResponse(it.nextResource(), propNameSet, depth-1, ms);
-            }
-        }
-    }
-
-    /**
-     * Retrieve all versions from the version history associated with the given
-     * resource. If the versions cannot be retrieved from the given resource
-     * an exception is thrown.
-     *
-     * @param res
-     * @return array of {@link VersionResource}s or an empty array if the versions
-     * could not be retrieved.
-     * @throws DavException if the version history could not be retrieved from
-     * the given resource or if an error occurs while accessing the versions
-     * from the version history resource.
-     */
-    private static VersionResource[] getVersions(DavResource res) throws DavException {
-        VersionResource[] versions = new VersionResource[0];
-        if (res instanceof VersionControlledResource) {
-            versions = ((VersionControlledResource)res).getVersionHistory().getVersions();
-        } else if (res instanceof VersionResource) {
-            versions = ((VersionResource)res).getVersionHistory().getVersions();
-        }
-        return versions;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/report/package.html b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/report/package.html
deleted file mode 100644
index 25f787c..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/version/report/package.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<body>
-Report interface and inplementation for default reports defined by RFC 3253.
-</body>
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/xml/DomUtil.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/xml/DomUtil.java
deleted file mode 100644
index 170431d..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/xml/DomUtil.java
+++ /dev/null
@@ -1,547 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.xml;
-
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.w3c.dom.Attr;
-import org.w3c.dom.CharacterData;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Text;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * <code>DomUtil</code> provides some common utility methods related to w3c-DOM.
- */
-public class DomUtil {
-
-    private static Logger log = Logger.getLogger(DomUtil.class);
-
-    /**
-     * Returns the value of the named attribute of the current element.
-     *
-     * @param parent
-     * @param localName attribute local name or 'nodeName' if no namespace is
-     * specified.
-     * @param  namespace or <code>null</code>
-     * @return attribute value, or <code>null</code> if not found
-     */
-    public static String getAttribute(Element parent, String localName, Namespace namespace) {
-        if (parent == null) {
-            return null;
-        }
-        Attr attribute;
-        if (namespace == null) {
-            attribute = parent.getAttributeNode(localName);
-        } else {
-            attribute = parent.getAttributeNodeNS(namespace.getURI(), localName);
-        }
-        if (attribute != null) {
-            return attribute.getValue();
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * Concatenates the values of all child nodes of type 'Text' or 'CDATA'/
-     *
-     * @param element
-     * @return String representing the value of all Text and CDATA child nodes or
-     * <code>null</code> if the length of the resulting String is 0.
-     * @see #isText(Node)
-     */
-    public static String getText(Element element) {
-        StringBuffer content = new StringBuffer();
-        if (element != null) {
-            NodeList nodes = element.getChildNodes();
-            for (int i = 0; i < nodes.getLength(); i++) {
-                Node child = nodes.item(i);
-                if (isText(child)) {
-                    // cast to super class that contains Text and CData
-                    content.append(((CharacterData) child).getData());
-                }
-            }
-        }
-        return (content.length()==0) ? null : content.toString();
-    }
-
-    /**
-     * Removes leading and trailing whitespace after calling {@link #getText(Element).
-     *
-     * @param element
-     * @return Trimmed text or <code>null</code>
-     */
-    public static String getTextTrim(Element element) {
-        String txt = getText(element);
-        return (txt == null) ? txt : txt.trim();
-    }
-
-    /**
-     * Calls {@link #getText(Element)} on the first child element that matches
-     * the given local name and namespace.
-     *
-     * @param parent
-     * @param childLocalName
-     * @param childNamespace
-     * @return text contained in the first child that matches the given local name
-     * and namespace or <code>null</code>.
-     * @see #getText(Element)
-     */
-    public static String getChildText(Element parent, String childLocalName, Namespace childNamespace) {
-        Element child = getChildElement(parent, childLocalName, childNamespace);
-        return (child == null) ? null : getText(child);
-    }
-
-    /**
-     * Calls {@link #getTextTrim(Element)} on the first child element that matches
-     * the given local name and namespace.
-     *
-     * @param parent
-     * @param childLocalName
-     * @param childNamespace
-     * @return text contained in the first child that matches the given local name
-     * and namespace or <code>null</code>. Note, that leading and trailing whitespace
-     * is removed from the text.
-     * @see #getTextTrim(Element)
-     */
-    public static String getChildTextTrim(Element parent, String childLocalName, Namespace childNamespace) {
-        Element child = getChildElement(parent, childLocalName, childNamespace);
-        return (child == null) ? null : getTextTrim(child);
-    }
-
-    /**
-     * Returns true if the given parent node has a child element that matches
-     * the specified local name and namespace.
-     *
-     * @param parent
-     * @param childLocalName
-     * @param childNamespace
-     * @return returns true if  a child element exists that matches the specified
-     * local name and namespace.
-     */
-    public static boolean hasChildElement(Node parent, String childLocalName, Namespace childNamespace) {
-        return getChildElement(parent, childLocalName, childNamespace) != null;
-    }
-
-    /**
-     * Returns the first child element that matches the given local name and
-     * namespace. If no child element is present or no child element matches,
-     * <code>null</code> is returned.
-     *
-     * @param parent
-     * @param childLocalName
-     * @param childNamespace
-     * @return first child element matching the specified names or <code>null</code>.
-     */
-    public static Element getChildElement(Node parent, String childLocalName, Namespace childNamespace) {
-        if (parent != null) {
-            NodeList children = parent.getChildNodes();
-            for (int i = 0; i < children.getLength(); i++) {
-                Node child = children.item(i);
-                if (isElement(child) && matches(child, childLocalName, childNamespace)) {
-                    return (Element)child;
-                }
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Returns a <code>ElementIterator</code> containing all child elements of
-     * the given parent node that match the given local name and namespace.
-     * If the namespace is <code>null</code> only the localName is compared.
-     *
-     * @param parent the node the children elements should be retrieved from
-     * @param childLocalName
-     * @param childNamespace
-     * @return an <code>ElementIterator</code> giving access to all child elements
-     * that match the specified localName and namespace.
-     */
-    public static ElementIterator getChildren(Element parent, String childLocalName, Namespace childNamespace) {
-        return new ElementIterator(parent, childLocalName, childNamespace);
-    }
-
-    /**
-     * Return an <code>ElementIterator</code> over all child elements.
-     *
-     * @param parent
-     * @return
-     * @see #getChildren(Element, String, Namespace) for a method that only
-     * retrieves child elements that match a specific local name and namespace.
-     */
-    public static ElementIterator getChildren(Element parent) {
-        return new ElementIterator(parent);
-    }
-
-    /**
-     * Return the first child element
-     *
-     * @return the first child element or <code>null</code> if the given node has no
-     * child elements.
-     */
-    public static Element getFirstChildElement(Node parent) {
-        if (parent != null) {
-            NodeList children = parent.getChildNodes();
-            for (int i = 0; i < children.getLength(); i++) {
-                Node child = children.item(i);
-                if (isElement(child)) {
-                    return (Element)child;
-                }
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Return true if the given parent contains any child that is either an
-     * Element, Text or CDATA.
-     *
-     * @param parent
-     * @return
-     */
-    public static boolean hasContent(Node parent) {
-        if (parent != null) {
-            NodeList children = parent.getChildNodes();
-            for (int i = 0; i < children.getLength(); i++) {
-                Node child = children.item(i);
-                if (isAcceptedNode(child)) {
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Return a list of all child nodes that are either Element, Text or CDATA.
-     *
-     * @param parent
-     * @return
-     */
-    public static List getContent(Node parent) {
-        List content = new ArrayList();
-        if (parent != null) {
-            NodeList children = parent.getChildNodes();
-            for (int i = 0; i < children.getLength(); i++) {
-                Node child = children.item(i);
-                if (isAcceptedNode(child)) {
-                    content.add(child);
-                }
-            }
-        }
-        return content;
-    }
-
-    /**
-     * Build a Namespace from the prefix and uri retrieved from the given element.
-     *
-     * @return
-     */
-    public static Namespace getNamespace(Element element) {
-        String uri = element.getNamespaceURI();
-        String prefix = element.getPrefix();
-        if (uri == null) {
-            return Namespace.EMPTY_NAMESPACE;
-        } else {
-            return Namespace.getNamespace(prefix, uri);
-        }
-    }
-
-    /**
-     * Returns true if the specified node matches the required names. Note, that
-     * that tests return true if the required name is <code>null</code>.
-     *
-     * @param node
-     * @param requiredLocalName
-     * @param requiredNamespace
-     * @return true if local name and namespace match the corresponding properties
-     * of the given DOM node.
-     */
-    public static boolean matches(Node node, String requiredLocalName, Namespace requiredNamespace) {
-        if (node == null) {
-            return false;
-        }
-        boolean matchingNamespace = matchingNamespace(node, requiredNamespace);
-        return matchingNamespace && matchingLocalName(node, requiredLocalName);
-    }
-
-    /**
-     * @param node
-     * @param requiredNamespace
-     * @return true if the required namespace is <code>null</code> or matches
-     * the namespace of the specified node.
-     */
-    private static boolean matchingNamespace(Node node, Namespace requiredNamespace) {
-        if (requiredNamespace == null) {
-            return true;
-        } else {
-            return requiredNamespace.isSame(node.getNamespaceURI());
-        }
-    }
-
-    /**
-     * @param node
-     * @param requiredLocalName
-     * @return true if the required local name is <code>null</code> or if the
-     * nodes local name matches.
-     */
-    private static boolean matchingLocalName(Node node, String requiredLocalName) {
-        if (requiredLocalName == null) {
-            return true;
-        } else {
-            String localName = node.getLocalName();
-            return requiredLocalName.equals(localName);
-        }
-    }
-
-    /**
-     * @param node
-     * @return true if the specified node is either an element or Text or CDATA
-     */
-    private static boolean isAcceptedNode(Node node) {
-        return isElement(node) || isText(node);
-    }
-
-    /**
-     * @param node
-     * @return true if the given node is of type element.
-     */
-    static boolean isElement(Node node) {
-        return node.getNodeType() == Node.ELEMENT_NODE;
-    }
-
-    /**
-     * @param node
-     * @return true if the given node is of type text or CDATA.
-     */
-    static boolean isText(Node node) {
-        int ntype = node.getNodeType();
-        return ntype == Node.TEXT_NODE || ntype == Node.CDATA_SECTION_NODE;
-    }
-
-    //----------------------------------------------------< factory methods >---
-    /**
-     * Create a new DOM element with the specified local name and namespace.
-     *
-     * @param factory
-     * @param localName
-     * @param namespace
-     * @return a new DOM element
-     * @see Document#createElement(String)
-     * @see Document#createElementNS(String, String)
-     */
-    public static Element createElement(Document factory, String localName, Namespace namespace) {
-        if (namespace != null) {
-            return factory.createElementNS(namespace.getURI(), getPrefixedName(localName, namespace));
-        } else {
-            return factory.createElement(localName);
-        }
-    }
-
-    /**
-     * Create a new DOM element with the specified local name and namespace and
-     * add the specified text as Text node to it.
-     *
-     * @param factory
-     * @param localName
-     * @param namespace
-     * @param text
-     * @return a new DOM element
-     * @see Document#createElement(String)
-     * @see Document#createElementNS(String, String)
-     * @see Document#createTextNode(String)
-     * @see Node#appendChild(org.w3c.dom.Node)
-     */
-    public static Element createElement(Document factory, String localName, Namespace namespace, String text) {
-        Element elem = createElement(factory, localName, namespace);
-        setText(elem, text);
-        return elem;
-    }
-
-    /**
-     * Add a new child element with the given local name and namespace to the
-     * specified parent.
-     *
-     * @param parent
-     * @param localName
-     * @param namespace
-     * @return the new element that was attached to the given parent.
-     */
-    public static Element addChildElement(Element parent, String localName, Namespace namespace) {
-        Element elem = createElement(parent.getOwnerDocument(), localName, namespace);
-        parent.appendChild(elem);
-        return elem;
-    }
-
-    /**
-     * Add a new child element with the given local name and namespace to the
-     * specified parent. The specified text is added as Text node to the created
-     * child element.
-     *
-     * @param parent
-     * @param localName
-     * @param namespace
-     * @param text
-     * @return child element that was added to the specified parent
-     * @see Document#createElement(String)
-     * @see Document#createElementNS(String, String)
-     * @see Document#createTextNode(String)
-     * @see Node#appendChild(org.w3c.dom.Node)
-     */
-    public static Element addChildElement(Element parent, String localName, Namespace namespace, String text) {
-        Element elem = createElement(parent.getOwnerDocument(), localName, namespace, text);
-        parent.appendChild(elem);
-        return elem;
-    }
-
-    /**
-     * Create a new text node and add it as child to the given element.
-     *
-     * @param element
-     * @param text
-     */
-    public static void setText(Element element, String text) {
-        if (text == null || "".equals(text)) {
-            // ignore null/empty string text
-            return;
-        }
-        Text txt = element.getOwnerDocument().createTextNode(text);
-        element.appendChild(txt);
-    }
-
-    /**
-     * Add an attribute node to the given element.
-     *
-     * @param element
-     * @param attrLocalName
-     * @param attrNamespace
-     * @param attrValue
-     */
-    public static void setAttribute(Element element, String attrLocalName, Namespace attrNamespace, String attrValue) {
-        if (attrNamespace == null) {
-            Attr attr = element.getOwnerDocument().createAttribute(attrLocalName);
-            attr.setValue(attrValue);
-            element.setAttributeNode(attr);
-        } else {
-            Attr attr = element.getOwnerDocument().createAttributeNS(attrNamespace.getURI(), getPrefixedName(attrLocalName, attrNamespace));
-            attr.setValue(attrValue);
-            element.setAttributeNodeNS(attr);
-        }
-    }
-
-    /**
-     * Converts the given timeout (long value defining the number of milli-
-     * second until timeout is reached) to its Xml representation as defined
-     * by RTF 2518.<br>
-     * Note, that {@link DavConstants#INFINITE_TIMEOUT} is not represented by the String
-     * {@link DavConstants#TIMEOUT_INFINITE 'Infinite'} defined by RFC 2518, due to a known
-     * issue with Microsoft Office that opens the document "read only" and
-     * never unlocks the resource if the timeout is missing or 'Infinite'.
-     *
-     * @param timeout number of milli-seconds until timeout is reached.
-     * @return 'timeout' Xml element
-     */
-    public static Element timeoutToXml(long timeout, Document factory) {
-        String expString = "Second-"+ timeout/1000;;
-        Element exp = createElement(factory, DavConstants.XML_TIMEOUT, DavConstants.NAMESPACE, expString);
-        return exp;
-    }
-
-    /**
-     * Returns the Xml representation of a boolean isDeep, where false
-     * presents a depth value of '0', true a depth value of 'infinity'.
-     *
-     * @param isDeep
-     * @return Xml representation
-     */
-    public static Element depthToXml(boolean isDeep, Document factory) {
-        return depthToXml(isDeep? "infinity" : "0", factory);
-    }
-
-    /**
-     * Returns the Xml representation of a depth String. Webdav defines the
-     * following valid values for depths: 0, 1, infinity
-     *
-     * @param depth
-     * @return 'deep' JDOM element
-     */
-    public static Element depthToXml(String depth, Document factory) {
-        Element dElem = createElement(factory, DavConstants.XML_DEPTH, DavConstants.NAMESPACE, depth);
-        return dElem;
-    }
-
-    /**
-     * Builds a 'DAV:href' Xml element from the given href. Please note, that
-     * the path present in the given String should be properly
-     * {@link org.apache.jackrabbit.util.Text#escapePath(String) escaped} in order to prevent problems with
-     * WebDAV clients.
-     *
-     * @param href String representing the text of the 'href' Xml element
-     * @param factory the Document used as factory
-     * @return Xml representation of a 'href' according to RFC 2518.
-     */
-    public static Element hrefToXml(String href, Document factory) {
-        return createElement(factory, DavConstants.XML_HREF, DavConstants.NAMESPACE, href);
-    }
-
-    /**
-     * Return a qualified name of a DOM node consisting of "{" + namespace uri + "}"
-     * + localName. If the specified namespace is <code>null</code> or represents
-     * the empty namespace, the local name is returned.
-     *
-     * @param localName
-     * @param namespace
-     * @return
-     */
-    public static String getQualifiedName(String localName, Namespace namespace) {
-        if (namespace == null || namespace.equals(Namespace.EMPTY_NAMESPACE)) {
-            return localName;
-        }
-        StringBuffer b = new StringBuffer("{");
-        b.append(namespace.getURI()).append("}");
-        b.append(localName);
-        return b.toString();
-    }
-
-    /**
-     * Return the prefixed name of a DOM node consisting of
-     * namespace prefix + ":" + local name. If the specified namespace is <code>null</code>
-     * or contains an empty prefix, the local name is returned.<br>
-     * NOTE, that this is the value to be used for the 'qualified Name' parameter
-     * expected with the namespace sensitive factory methods.
-     *
-     * @param localName
-     * @param namespace
-     * @return qualified name consisting of prefix, ':' and local name.
-     * @see Document#createAttributeNS(String, String)
-     * @see Document#createElementNS(String, String)
-     */
-    public static String getPrefixedName(String localName, Namespace namespace) {
-        if (namespace == null || namespace.equals(Namespace.EMPTY_NAMESPACE) || "".equals(namespace.getPrefix())) {
-            return localName;
-        }
-        StringBuffer buf = new StringBuffer(namespace.getPrefix());
-        buf.append(":");
-        buf.append(localName);
-        return buf.toString();
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/xml/ElementIterator.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/xml/ElementIterator.java
deleted file mode 100644
index 8706894..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/xml/ElementIterator.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.xml;
-
-import org.apache.log4j.Logger;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Node;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-/**
- * <code>ElementIterator</code>...
- */
-public class ElementIterator implements Iterator {
-
-    private static Logger log = Logger.getLogger(ElementIterator.class);
-
-    private final Namespace namespace;
-    private final String localName;
-
-    private Element next;
-
-    /**
-     * Create a new instance of <code>ElementIterator</code> with the given
-     * parent element. Only child elements that match the given local name
-     * and namespace will be respected by {@link #hasNext()} and {@link #nextElement()}.
-     *
-     * @param parent
-     * @param localName local name the child elements must match
-     * @param namespace namespace the child elements must match
-     */
-    public ElementIterator(Element parent, String localName, Namespace namespace) {
-        this.localName = localName;
-        this.namespace = namespace;
-        seek(parent);
-    }
-
-    /**
-     * Create a new instance of <code>ElementIterator</code> with the given
-     * parent element. No filtering is applied to child elements that are
-     * iterated.
-     *
-     * @param parent
-     */
-    public ElementIterator(Element parent) {
-        this(parent, null, null);
-    }
-
-    /**
-     * Not implemented
-     *
-     * @throws UnsupportedOperationException
-     */
-    public void remove() {
-        throw new UnsupportedOperationException("Remove not implemented.");
-    }
-
-    /**
-     * Returns true if there is a next <code>Element</code>
-     *
-     * @return true if a next <code>Element</code> is available.
-     */
-    public boolean hasNext() {
-        return next != null;
-    }
-
-    /**
-     * @see java.util.Iterator#next()
-     * @see #nextElement()
-     */
-    public Object next() {
-        return nextElement();
-    }
-
-    /**
-     * Returns the next <code>Element</code> in the iterator.
-     *
-     * @return the next element
-     * @throws NoSuchElementException if there is no next element.
-     */
-    public Element nextElement() {
-        if (next==null) {
-            throw new NoSuchElementException();
-        }
-        Element ret = next;
-        seek();
-        return ret;
-    }
-
-    /**
-     * Seeks for the first matching child element
-     */
-    private void seek(Element parent) {
-        NodeList nodeList = parent.getChildNodes();
-        for (int i = 0; i < nodeList.getLength(); i++) {
-            Node n = nodeList.item(i);
-            if (DomUtil.isElement(n) && DomUtil.matches(n, localName, namespace)) {
-                next = (Element)n;
-                return;
-            }
-        }
-    }
-
-    /**
-     * Seeks for the next valid element (i.e. the next valid sibling)
-     */
-    private void seek() {
-        Node n = next.getNextSibling();
-        while (n != null) {
-            if (DomUtil.isElement(n) && DomUtil.matches(n, localName, namespace)) {
-                next = (Element)n;
-                return;
-            } else {
-                n = n.getNextSibling();
-            }
-        }
-        // no next element found -> set to null in order to leave the loop.
-        next = null;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/xml/Namespace.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/xml/Namespace.java
deleted file mode 100644
index fd939e0..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/xml/Namespace.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.xml;
-
-import org.apache.log4j.Logger;
-
-/**
- * <code>Namespace</code>
- */
-public class Namespace {
-
-    private static Logger log = Logger.getLogger(Namespace.class);
-
-    public static final Namespace EMPTY_NAMESPACE = Namespace.getNamespace("","");
-
-    private final String prefix;
-    private final String uri;
-
-    private Namespace(String prefix, String uri) {
-        this.prefix = prefix;
-        this.uri = uri;
-    }
-
-    public String getPrefix() {
-        return prefix;
-    }
-
-    public String getURI() {
-        return uri;
-    }
-
-    public boolean isSame(String namespaceURI) {
-        return uri.equals(namespaceURI);
-    }
-
-    public int hashCode() {
-        return uri.hashCode();
-    }
-
-    public boolean equals(Object obj) {
-        if (obj == this) {
-            return true;
-        }
-        if (obj instanceof Namespace) {
-            return uri.equals(((Namespace)obj).uri);
-        }
-        return false;
-    }
-
-    public static Namespace getNamespace(String prefix, String uri) {
-        if (prefix == null) {
-            prefix = "";
-        }
-        if (uri == null) {
-            uri = "";
-        }
-        return new Namespace(prefix, uri);
-    }
-
-    public static Namespace getNamespace(String uri) {
-        return getNamespace("", uri);
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/xml/XmlSerializable.java b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/xml/XmlSerializable.java
deleted file mode 100644
index bd9e1c2..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/xml/XmlSerializable.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.webdav.xml;
-
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-/**
- * <code>XmlSerializable</code>...
- */
-public interface XmlSerializable {
-
-    /**
-     * Returns the xml representation of the implementing object as
-     * {@link org.w3c.dom.Element}. The given <code>Document</code> is used
-     * as factory and represents the {@link org.w3c.dom.Element#getOwnerDocument()
-     * owner document} of the returned DOM element.
-     *
-     * @return a w3c element representing this object
-     * @param document to be used as factory.
-     */
-    public Element toXml(Document document);
-
-}
\ No newline at end of file
diff --git a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/xml/package.html b/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/xml/package.html
deleted file mode 100644
index 4796beb..0000000
--- a/contrib/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/xml/package.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<body>
-Xml utility classes.
-</body>
\ No newline at end of file
diff --git a/contrib/jcrtaglib/HEADER.txt b/contrib/jcrtaglib/HEADER.txt
deleted file mode 100644
index 1c669de..0000000
--- a/contrib/jcrtaglib/HEADER.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
\ No newline at end of file
diff --git a/contrib/jcrtaglib/LICENSE.txt b/contrib/jcrtaglib/LICENSE.txt
deleted file mode 100644
index d645695..0000000
--- a/contrib/jcrtaglib/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/contrib/jcrtaglib/checkstyle-suppressions.xml b/contrib/jcrtaglib/checkstyle-suppressions.xml
deleted file mode 100644
index b3b6d2f..0000000
--- a/contrib/jcrtaglib/checkstyle-suppressions.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE suppressions PUBLIC
-    "-//Puppy Crawl//DTD Suppressions 1.0//EN"
-    "http://www.puppycrawl.com/dtds/suppressions_1_0.dtd">
-
-<suppressions>
-    <!-- 
-      Suppressions for generated JCRQL parser
-    -->
-    <suppress checks=".*" files="(JJT)?JCRSQL.*.java"/>
-    <!-- Suppressions for the generated XPath parser -->
-    <suppress checks=".*" files="(JJT)?XPath.*.java"/>
-</suppressions>
diff --git a/contrib/jcrtaglib/checkstyle.xml b/contrib/jcrtaglib/checkstyle.xml
deleted file mode 100644
index 47fc8ec..0000000
--- a/contrib/jcrtaglib/checkstyle.xml
+++ /dev/null
@@ -1,171 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                       as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-  -->
-  
-<!DOCTYPE module PUBLIC
-    "-//Puppy Crawl//DTD Check Configuration 1.1//EN"
-    "http://www.puppycrawl.com/dtds/configuration_1_1.dtd">
-
-<!--
-  Checkstyle checks configured for Maven.
--->
-
-<module name="Checker">
-
-    <!-- Checks that a package.html file exists for each package.     -->
-    <!-- See http://checkstyle.sf.net/config_javadoc.html#PackageHtml -->
-    <module name="PackageHtml"/>
-
-    <!-- Checks whether files end with a new line.                        -->
-    <!-- See http://checkstyle.sf.net/config_misc.html#NewlineAtEndOfFile -->
-    <module name="NewlineAtEndOfFile"/>
-
-    <!-- Checks that property files contain the same keys.         -->
-    <!-- See http://checkstyle.sf.net/config_misc.html#Translation -->
-    <module name="Translation"/>
-
-    <module name="TreeWalker">
-
-        <property name="cacheFile" value="${checkstyle.cache.file}"/>
-
-        <!-- ************************************************************** -->
-        <!-- Checks that are different from the sun coding conventions ones -->
-        <!-- ************************************************************** -->
-
-        <module name="Header">
-            <property name="headerFile" value="${basedir}/HEADER.txt"/>
-        </module>
-        <!-- <property name="tabWidth" value="4"/> -->
-        <module name="LeftCurly">
-          <property name="option" value="eol"/>
-        </module>
-        <module name="LineLength">
-          <property name="max" value="132"/>
-          <property name="ignorePattern" value="\* \$"/>
-        </module>
-        <module name="MethodLength">
-          <property name="max" value="175"/>
-        </module>
-        <module name="ConstantName">
-          <property name="format" value="log|^[a-zA-Z][a-zA-Z0-9_]*$"/>
-        </module>
-
-        <!-- ************************************************************** -->
-        <!-- Default Sun coding conventions checks                          -->
-        <!-- ************************************************************** -->
-
-        <!-- Checks for Javadoc comments.                     -->
-        <!-- See http://checkstyle.sf.net/config_javadoc.html -->
-        <module name="JavadocMethod"/>
-        <module name="JavadocType"/>
-        <module name="JavadocVariable"/>
-
-        <!-- Checks for Naming Conventions.                  -->
-        <!-- See http://checkstyle.sf.net/config_naming.html -->
-        <module name="LocalFinalVariableName"/>
-        <module name="LocalVariableName"/>
-        <module name="MethodName"/>
-        <module name="PackageName"/>
-        <module name="ParameterName"/>
-        <module name="StaticVariableName"/>
-        <module name="TypeName"/>
-        <module name="MemberName"/>
-
-        <!-- Checks for imports                              -->
-        <!-- See http://checkstyle.sf.net/config_import.html -->
-        <module name="AvoidStarImport"/>
-        <module name="IllegalImport"/> <!-- defaults to sun.* packages -->
-        <module name="RedundantImport"/>
-        <module name="UnusedImports"/>
-
-
-        <!-- Checks for Size Violations.                    -->
-        <!-- See http://checkstyle.sf.net/config_sizes.html -->
-        <module name="FileLength"/>
-        <module name="ParameterNumber"/>
-
-
-        <!-- Checks for whitespace                               -->
-        <!-- See http://checkstyle.sf.net/config_whitespace.html -->
-        <module name="EmptyForIteratorPad"/>
-        <module name="NoWhitespaceAfter"/>
-        <module name="NoWhitespaceBefore"/>
-        <module name="OperatorWrap"/>
-        <module name="TabCharacter"/>
-        <module name="WhitespaceAfter"/>
-        <module name="WhitespaceAround"/>
-
-
-        <!-- Modifier Checks                                    -->
-        <!-- See http://checkstyle.sf.net/config_modifiers.html -->
-        <module name="ModifierOrder"/>
-        <module name="RedundantModifier"/>
-
-
-        <!-- Checks for blocks. You know, those {}'s         -->
-        <!-- See http://checkstyle.sf.net/config_blocks.html -->
-        <module name="AvoidNestedBlocks"/>     
-        <module name="NeedBraces"/>
-
-        <!-- Checks for common coding problems               -->
-        <!-- See http://checkstyle.sf.net/config_coding.html -->
-        <!-- <module name="AvoidInlineConditionals"/> -->      <!-- DISABLED-->
-        <module name="DoubleCheckedLocking"/>
-        <module name="EqualsHashCode"/>
-        <module name="IllegalInstantiation"/>
-        <module name="InnerAssignment"/>
-        <module name="MissingSwitchDefault"/>
-        <module name="RedundantThrows">
-            <property name="allowUnchecked" value="true"/>   <!-- DISABLED -->
-            <property name="allowSubclasses" value="true"/>   <!-- DISABLED -->
-        </module>
-        <module name="SimplifyBooleanExpression"/>
-        <module name="SimplifyBooleanReturn"/>
-
-        <!-- Checks for class design                         -->
-        <!-- See http://checkstyle.sf.net/config_design.html -->
-        <module name="DesignForExtension">
-            <property name="severity" value="ignore"/>   <!-- DISABLED -->
-        </module>
-        <module name="HideUtilityClassConstructor"/>
-        <module name="InterfaceIsType"/>
-        <module name="VisibilityModifier">
-            <!-- Protected member variables are widely used in Jackrabbit -->
-            <property name="protectedAllowed" value="true"/>
-        </module>
-
-
-        <!-- Miscellaneous other checks.                   -->
-        <!-- See http://checkstyle.sf.net/config_misc.html -->
-        <module name="ArrayTypeStyle"/>
-        <module name="FinalParameters">
-            <property name="severity" value="ignore"/>   <!-- DISABLED -->
-        </module>
-        <module name="GenericIllegalRegexp">
-            <property name="format" value="\s+$"/>
-            <property name="message" value="Line has trailing spaces."/>
-        </module>
-        <module name="TodoComment"/>
-        <module name="UpperEll"/>
-
-    </module>
-    
-    <module name="SuppressionFilter">
-        <property name="file" value="checkstyle-suppressions.xml"/>
-    </module>    
-
-</module>
diff --git a/contrib/jcrtaglib/maven.xml b/contrib/jcrtaglib/maven.xml
deleted file mode 100644
index e3700fd..0000000
--- a/contrib/jcrtaglib/maven.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<!--
-   Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                       as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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
-  default="jcrtags:cleanexample"
-  xmlns:j="jelly:core"
-  xmlns:ant="jelly:ant">
-  
-  <!-- Dist dir -->
-  <ant:property name="dist" value="./jcrtaglib.zip"/>
-  
-   <goal name="jcrtags:cleanexample">
-	    <ant:delete includeEmptyDirs="true">
-	      <ant:fileset dir="src/examples/web/WEB-INF/repository"  
-	      	includes="**/*" 
-	      	excludes="repository.xml"/>
-	    </ant:delete>    
-   </goal>
-  
-   <goal name="jcrtags:src-dist" prereqs="jcrtags:cleanexample">
-   		<ant:delete file="${dist}" />
-	    <ant:zip destfile="${dist}">
-		    <ant:fileset dir="." includes="*.*"/>
-		    <ant:fileset dir=".">
-		    	<ant:exclude name="src/**/*.jar"/>
-		    	<ant:exclude name="src/**/classes/**/*"/>
-		    	<ant:include name="src/**/*"/>
-		     </ant:fileset>	      
-	    <ant:fileset dir="." includes="xdocs/**/*" excludes="**/*.zip"/>
-	    </ant:zip>
-   </goal>
-
-</project>
\ No newline at end of file
diff --git a/contrib/jcrtaglib/project.properties b/contrib/jcrtaglib/project.properties
deleted file mode 100644
index 5407921..0000000
--- a/contrib/jcrtaglib/project.properties
+++ /dev/null
@@ -1,83 +0,0 @@
-#  Copyright 2003-2005 The Apache Software Foundatio or its licensors,
-#                      as applicablen
-#
-#  Licensed under the Apache License, Version 2.0 (the "License");
-#  you may not use this file except in compliance with the License.
-#  You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-#  distributed under the License is distributed on an "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#  See the License for the specific language governing permissions and
-#  limitations under the License.
-
-######################################################################
-# JUnit Testing
-######################################################################
-maven.test.failure = false
-maven.junit.fork=true
-maven.junit.sysproperties=org.xml.sax.driver
-org.xml.sax.driver=org.apache.xerces.parsers.SAXParser
-
-#If you wish to skip tests when doing builds, uncomment
-#maven.test.skip = true
-
-######################################################################
-# Checkstyle
-######################################################################
-maven.checkstyle.properties= checkstyle.xml
-maven.linkcheck.enable=false 
-
-######################################################################
-# JavaDoc
-#
-# javadoc urls can be added here, multiple urls are appended using a comma
-#
-# maven.javadoc.links = http://foo/bar/api,\
-#                       http://flim/flam/api/
-######################################################################
-maven.javadoc.links=
-maven.javadoc.author=true
-maven.javadoc.version=false
-
-######################################################################
-# Other opts
-######################################################################
-# uncomment the next line to work in offline mode (no jar download & no linkcheck)
-#maven.mode.online=
-
-maven.compile.debug=on
-maven.compile.deprecation=off
-maven.compile.optimize=off
-
-maven.jarResources.basedir=src/java
-maven.jar.excludes=**/package.html
-
-# specifying additional remote repository for downloading dependencies 
-# not available at www.ibiblio.org/maven/
-maven.repo.remote = http://www.ibiblio.org/maven/,http://www.day.com/maven/
-
-######################################################################
-# Site L&F
-######################################################################
-# maven.xdoc.jsl=
-maven.xdoc.date=
-maven.xdoc.poweredby.image=maven-feather.png
-maven.xdoc.version=${pom.currentVersion}
-maven.xdoc.developmentProcessUrl=http://incubator.apache.org/projects/jackrabbit.html
-maven.changelog.range=60
-maven.changelog.factory=org.apache.maven.svnlib.SvnChangeLogFactory
-
-# ------------------------------------------------------------------------
-# M A V E N  J A R  O V E R R I D E
-# ------------------------------------------------------------------------
-#maven.jar.override = on
-#maven.jar.jcr = ${basedir}/lib/jcr.jar
-
-######################################################################
-# Site Deploy (into ../jackrabbit-site for checkout on incubator.apache.org)
-######################################################################
-maven.site.deploy.method=fs
-
diff --git a/contrib/jcrtaglib/project.xml b/contrib/jcrtaglib/project.xml
deleted file mode 100644
index 8af1505..0000000
--- a/contrib/jcrtaglib/project.xml
+++ /dev/null
@@ -1,119 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project>
-  <pomVersion>3</pomVersion>
-  <artifactId>jcrtaglib</artifactId>
-  <name>JCR taglib</name>
-  <groupId>jcrtaglib</groupId>
-  <currentVersion>0.1</currentVersion>
-  <organization />
-  <inceptionYear>2005</inceptionYear>
-  <package>org.apache.jackrabbit.*</package>
-  <description>This project contains a set of custom tags that lets you read and display information from a JCR repository. </description>
-  <shortDescription>JCR taglib</shortDescription>
-  <repository />
-  <mailingLists>
-    <mailingList>
-      <name>${pom.name} Dev List</name>
-    </mailingList>
-    <mailingList>
-      <name>${pom.name} User List</name>
-    </mailingList>
-  </mailingLists>
-  <developers>
-    <developer>
-      <name>Edgar Poce</name>
-      <id>0</id>
-      <email>edgarpoce@gmail.com</email>
-    </developer>
-  </developers>
-  <licenses>
-    <license>
-      <name>The Apache Software License, Version 2.0</name>
-      <url>/LICENSE.txt</url>
-    </license>
-  </licenses>
-  <dependencies>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <version>3.8.1</version>
-      <type>jar</type>
-    </dependency>
-    <dependency>
-      <groupId>commons-collections</groupId>
-      <artifactId>commons-collections</artifactId>
-      <version>3.1</version>
-      <type>jar</type>
-    </dependency>
-    <dependency>
-      <groupId>commons-logging</groupId>
-      <artifactId>commons-logging</artifactId>
-      <version>1.0</version>
-      <type>jar</type>
-    </dependency>
-    <dependency>
-      <groupId>jstl</groupId>
-      <artifactId>jstl</artifactId>
-      <version>1.0.6</version>
-      <type>jar</type>
-    </dependency>
-    <dependency>
-      <groupId>commons-jexl</groupId>
-      <artifactId>commons-jexl</artifactId>
-      <version>1.0-RC1</version>
-      <type>jar</type>
-    </dependency>
-    <dependency>
-      <groupId>servletapi</groupId>
-      <artifactId>servletapi</artifactId>
-      <version>2.3</version>
-      <type>jar</type>
-    </dependency>
-    <dependency>
-      <groupId>taglibs</groupId>
-      <artifactId>standard</artifactId>
-      <version>1.0.6</version>
-      <type>jar</type>
-    </dependency>
-    <dependency>
-      <groupId>springframework</groupId>
-      <artifactId>spring-beans</artifactId>
-      <version>1.2-rc2</version>
-      <type>jar</type>
-    </dependency>
-    <dependency>
-      <groupId>springframework</groupId>
-      <artifactId>spring-core</artifactId>
-      <version>1.2-rc2</version>
-      <type>jar</type>
-    </dependency>
-    <dependency>
-      <groupId>jsr170</groupId>
-      <artifactId>jcr</artifactId>
-      <version>1.0</version>
-      <type>jar</type>
-      <url>http://www.day.com/maven/jsr170/jars/jcr-1.0.jar</url>
-    </dependency>	
-  </dependencies>
-  <build>
-    <sourceDirectory>src/java</sourceDirectory>
-    <unitTestSourceDirectory>src/test</unitTestSourceDirectory>
-    <unitTest>
-      <includes>
-        <include>**/*Test.*</include>
-      </includes>
-      <resources>
-        <resource>
-          <directory>src/examples/web/WEB-INF/src</directory>
-          <includes>
-            <include>**/*.xml</include>
-            <include>**/*.txt</include>
-          </includes>
-          <filtering>false</filtering>
-        </resource>
-      </resources>
-    </unitTest>
-  </build>
-  <properties />
-</project>
-
diff --git a/contrib/jcrtaglib/src/examples/jcrtaglib.xml b/contrib/jcrtaglib/src/examples/jcrtaglib.xml
deleted file mode 100644
index 2d3cb31..0000000
--- a/contrib/jcrtaglib/src/examples/jcrtaglib.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<Context path="/jcrtaglib" reloadable="true" docBase="C:\eclipse_3_1_M4\workspace\ApacheJackrabbit\contrib\jcr-taglib\src\examples\web">
-<!-- Extra info begin -->
-  <Resource 
-	name="jcr/repositoryFactory" 
-	auth="Container" 
-	type="org.apache.jackrabbit.core.jndi.BindableRepository"/>
-
-  <ResourceParams name="jcr/repositoryFactory">
-    <parameter>
-      <name>factory</name>
-      <value>org.apache.jackrabbit.core.jndi.BindableRepositoryFactory</value>
-    </parameter>
-    <parameter>
-      <name>configFilePath</name>
-      <value>C:\eclipse_3_1_M4\workspace\ApacheJackrabbit\contrib\jcr-taglib\src\examples\web\WEB-INF\repository.xml</value>
-    </parameter>
-    <parameter>
-      <name>repHomeDir</name>
-      <value>C:\eclipse_3_1_M4\workspace\ApacheJackrabbit\contrib\jcr-taglib\src\examples\web\WEB-INF\repository</value>
-    </parameter>
-  </ResourceParams>
-
-  <Resource 
-	name="jcr/beanFactory" 
-	auth="Container" 
-	type="org.apache.jackrabbit.taglib.bean.SimpleBeanFactory"/>
-
-  <ResourceParams name="jcr/beanFactory">
-    <parameter>
-      <name>factory</name>
-      <value>org.apache.naming.factory.BeanFactory</value>
-    </parameter>
-  </ResourceParams>
-<!-- Extra info end -->
-	<Logger className="org.apache.catalina.logger.SystemOutLogger" verbosity="4" timestamp="true"/>
-</Context>
diff --git a/contrib/jcrtaglib/src/examples/web/WEB-INF/repository.xml b/contrib/jcrtaglib/src/examples/web/WEB-INF/repository.xml
deleted file mode 100644
index 153a889..0000000
--- a/contrib/jcrtaglib/src/examples/web/WEB-INF/repository.xml
+++ /dev/null
@@ -1,247 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE Repository [
-    <!--
-        the Repository element configures a repository instance;
-        individual workspaces of the repository are configured through
-        separate configuration files called workspace.xml which are
-        located in a subfolder of the workspaces root directory
-        (see Workspaces element).
-
-        it consists of
-
-            a FileSystem element (the virtual file system
-            used by the repository to persist global state such as
-            registered namespaces, custom node types, etc..
-
-            a Security element that specifies the name of the app-entry
-            in the JAAS config and the access manager
-
-            a Workspaces element that specifies to the location of
-            workspaces root directory and the name of default workspace
-
-            a Workspace element that is used as a workspace configuration
-            template; it is used to create the initial workspace if there's
-            no workspace yet and for creating additional workspaces through
-            the api
-
-            a SearchIndex element that is used for configuring per workspace
-            Indexing-related settings
-
-            a Versioning element that is used for configuring
-            versioning-related settings
-    -->
-    <!ELEMENT Repository (FileSystem,Security,Workspaces,Workspace,Versioning,SearchIndex?)>
-
-    <!--
-        a virtual file system
-    -->
-    <!ELEMENT FileSystem (param*)>
-    <!ATTLIST FileSystem
-      class CDATA #REQUIRED>
-
-    <!--
-        the Security element specifies the name (appName attribute)
-        of the JAAS configuration app-entry for this repository. 
-
-        it also specifies the access manager to be used (AccessManager element).
-    -->
-    <!ELEMENT Security (AccessManager, LoginModule?)>
-    <!ATTLIST Security
-      appName CDATA #REQUIRED>
-
-    <!--
-        the AccessManager element configures the access manager to be used by
-        this repository instance; the class attribute specifies the FQN of the
-        class implementing the AccessManager interface
-    -->
-    <!ELEMENT AccessManager (param*)>
-    <!ATTLIST AccessManager
-      class CDATA #REQUIRED>
-
-    <!--
-        generic parameter (name/value pair)
-    -->
-    <!ELEMENT param EMPTY>
-    <!ATTLIST param
-      name CDATA #REQUIRED
-      value CDATA #REQUIRED>
-
-     <!--
-        the LoginModule element optionally specifies a JAAS login module to
-        authenticate users. This feature allows the use of Jackrabbit in a
-        non-JAAS environment.
-    -->
-    <!ELEMENT LoginModule (param*)>
-    <!ATTLIST LoginModule
-      class CDATA #REQUIRED>
-
-   <!--
-        the Workspaces element specifies the workspaces root directory
-        (rootPath attribute) and the name of the default workspace
-        (defaultWorkspace attribute).
-
-        individual workspaces are configured through individual workspace.xml
-        files located in a subfolder each of the workspaces root directory.
-    -->
-    <!ELEMENT Workspaces EMPTY>
-    <!ATTLIST Workspaces
-      rootPath CDATA #REQUIRED
-      defaultWorkspace CDATA #REQUIRED>
-
-    <!--
-        the Workspace element serves as a workspace configuration template;
-        it is used to create the initial workspace if there's no workspace yet
-        and for creating additional workspaces through the api
-    -->
-    <!ELEMENT Workspace (FileSystem,PersistenceManager,SearchIndex?)>
-    <!ATTLIST Workspace
-      name CDATA #REQUIRED>
-
-    <!--
-        the PersistenceManager element configures the persistence manager
-        to be used for the workspace; the class attribute specifies the
-        FQN of the class implementing the PersistenceManager interface
-    -->
-    <!ELEMENT PersistenceManager (param*)>
-    <!ATTLIST PersistenceManager
-      class CDATA #REQUIRED>
-
-    <!--
-        the SearchIndex element specifies the locaction of the search index
-        (used by the QueryHandler); the class attribute specifies the
-        FQN of the class implementing the QueryHandler interface.
-    -->
-    <!ELEMENT SearchIndex (param*,FileSystem)>
-    <!ATTLIST SearchIndex
-      class CDATA #REQUIRED>
-
-    <!--
-        the Versioning element configures the persistence manager
-        to be used for persisting version state
-    -->
-    <!ELEMENT Versioning (FileSystem, PersistenceManager)>
-    <!ATTLIST Versioning
-      rootPath CDATA #REQUIRED
-    >
-]>
-<!-- Example Repository Configuration File -->
-<Repository>
-    <!--
-        virtual file system where the repository stores global state
-        (e.g. registered namespaces, custom node types, etc.)
-    -->
-    <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
-        <param name="path" value="${rep.home}/repository"/>
-    </FileSystem>
-
-    <!--
-        security configuration
-    -->
-    <Security appName="Jackrabbit">
-        <!--
-            access manager:
-            class: FQN of class implementing the AccessManager interface
-        -->
-        <AccessManager class="org.apache.jackrabbit.core.security.SimpleAccessManager">
-            <!-- <param name="config" value="${rep.home}/access.xml"/> -->
-        </AccessManager>
-
-        <LoginModule class="org.apache.jackrabbit.core.security.SimpleLoginModule">
-           <!-- anonymous user name ('anonymous' is the default value) -->
-           <param name="anonymousId" value="anonymous"/>
-        </LoginModule>
-    </Security>
-
-    <!--
-        location of workspaces root directory and name of default workspace
-    -->
-    <Workspaces rootPath="${rep.home}/workspaces" defaultWorkspace="default"/>
-    <!--
-        workspace configuration template:
-        used to create the initial workspace if there's no workspace yet
-    -->
-    <Workspace name="${wsp.name}">
-        <!--
-            virtual file system of the workspace:
-            class: FQN of class implementing the FileSystem interface
-        -->
-        <FileSystem class="com.day.jackrabbit.fs.cq.CQFileSystem">
-            <param name="path" value="${wsp.home}/wspStore.dat"/>
-            <param name="autoRepair" value="false"/>
-            <param name="blockSize" value="128"/>
-            <param name="autoSync" value="false"/>
-        </FileSystem>
-        <!--
-        <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
-            <param name="path" value="${wsp.home}"/>
-        </FileSystem>
-        -->
-        <!--
-            persistence manager of the workspace:
-            class: FQN of class implementing the PersistenceManager interface
-        -->
-        <!--
-        <PersistenceManager class="org.apache.jackrabbit.core.state.xml.XMLPersistenceManager"/>
-        -->
-        <!--
-        <PersistenceManager class="org.apache.jackrabbit.core.state.mem.InMemPersistenceManager">
-            <param name="initialCapacity" value="100000"/>
-            <param name="loadFactor" value="0.3"/>
-            <param name="persistent" value="true"/>
-        </PersistenceManager>
-        -->
-        <PersistenceManager class="org.apache.jackrabbit.core.state.obj.ObjectPersistenceManager"/>
-        <!--
-            Search index and the file system it uses.
-            class: FQN of class implementing the QueryHandler interface
-        -->
-        <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
-            <param name="path" value="${wsp.home}/index"/>
-        </SearchIndex>
-    </Workspace>
-
-    <!--
-        Configures the versioning
-    -->
-    <Versioning rootPath="${rep.home}/version">
-        <!--
-            Configures the filesystem to use for versioning for the respective
-            persistence manager
-        -->
-        <FileSystem class="com.day.jackrabbit.fs.cq.CQFileSystem">
-            <param name="path" value="${rep.home}/version/version.dat"/>
-            <param name="autoRepair" value="false"/>
-            <param name="blockSize" value="128"/>
-            <param name="autoSync" value="false"/>
-        </FileSystem>
-    
-        <!--
-            <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
-                <param name="path" value="${rep.home}/version"/>
-            </FileSystem>
-        -->
-        
-        <!--
-            Configures the perisistence manager to be used for persisting version state.
-            Please note that the current versioning implementation is based on
-            a 'normal' persistence manager, but this could change in future
-            implementations.
-        -->
-        <PersistenceManager class="org.apache.jackrabbit.core.state.obj.ObjectPersistenceManager"/>
-
-    </Versioning>
-
-    <!--
-        Search index for content that is shared repository wide
-        (/jcr:system tree, contains mainly versions)
-        
-        The same parameters are supported as in the search index configuration
-        inside the workspace definition element.
-        
-        This element is optional. If omitted, the /jcr:system tree will not be
-        indexed and no results will be returned for that tree!
-    -->
-    <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
-        <param name="path" value="${rep.home}/repository/index"/>
-    </SearchIndex>
-</Repository>
diff --git a/contrib/jcrtaglib/src/examples/web/WEB-INF/src/jaas.config b/contrib/jcrtaglib/src/examples/web/WEB-INF/src/jaas.config
deleted file mode 100644
index 1fc3c36..0000000
--- a/contrib/jcrtaglib/src/examples/web/WEB-INF/src/jaas.config
+++ /dev/null
@@ -1,3 +0,0 @@
-Jackrabbit {
-  org.apache.jackrabbit.core.security.SimpleLoginModule required anonymousId="anonymous";
-};
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/examples/web/WEB-INF/src/jcrtaglib-beans.xml b/contrib/jcrtaglib/src/examples/web/WEB-INF/src/jcrtaglib-beans.xml
deleted file mode 100644
index 90374f0..0000000
--- a/contrib/jcrtaglib/src/examples/web/WEB-INF/src/jcrtaglib-beans.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
-
-<beans>
-	<!-- Traversers -->
-	<bean id="traverser.preorder" 
-		class="org.apache.jackrabbit.taglib.traverser.PreorderTraverser" 
-		singleton="false"/>
-	<bean id="traverser.postorder" 
-		class="org.apache.jackrabbit.taglib.traverser.PostorderTraverser" 
-		singleton="false"/>
-	<bean id="traverser.ancestors" 
-		class="org.apache.jackrabbit.taglib.traverser.AncestorsTraverser" 
-		singleton="false"/>
-	<bean id="traverser.expandedNode" 
-		class="org.apache.jackrabbit.taglib.traverser.ExpandedNodeTraverser" 
-		singleton="false"/>
-	<bean id="traverser.expandedNodes" 
-		class="org.apache.jackrabbit.taglib.traverser.ExpandedNodesTraverser" 
-		singleton="false"/>
-	<bean id="traverser.levelByLevel" 
-		class="org.apache.jackrabbit.taglib.traverser.LevelByLevelTraverser" 
-		singleton="false"/>
-	<!-- Template Engines -->
-	<bean id="template.simple" 
-		class="org.apache.jackrabbit.taglib.template.SimpleTemplateEngine" 
-		singleton="false"/>
-	<!-- Size Calculators -->
-	<bean id="size.simple" 
-		class="org.apache.jackrabbit.taglib.size.SimpleSizeCalculator" 
-		singleton="false"/>
-	<!-- Item Comparators -->	
-	<bean id="comparator.jexl" 
-		class="org.apache.jackrabbit.taglib.comparator.JEXLItemComparator" 
-		singleton="false"/>
-	<!-- Item Filters -->	
-	<bean id="filter.jexl" 
-		class="org.apache.jackrabbit.taglib.filter.JEXLItemFilter" 
-		singleton="false"/>
-</beans>
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/examples/web/WEB-INF/src/log4j.properties b/contrib/jcrtaglib/src/examples/web/WEB-INF/src/log4j.properties
deleted file mode 100644
index 6e8a9d1..0000000
--- a/contrib/jcrtaglib/src/examples/web/WEB-INF/src/log4j.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-# Set root logger level to DEBUG and its only appender to A1.
-log4j.rootLogger=INFO, stdout, file
-#log4j.rootLogger=DEBUG, stdout, file
-#log4j.rootLogger=ERROR, stdout, file
-
-log4j.logger.org.apache.jackrabbit.test=DEBUG
-
-# 'stdout' is set to be a ConsoleAppender.
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-
-# 'stdout' uses PatternLayout
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%d{dd.MM.yyyy HH:mm:ss} *%-5p* [%t] %c{1}: %m (%F, line %L)\n
-
-# 'file' is set to be a FileAppender.
-log4j.appender.file=org.apache.log4j.FileAppender
-log4j.appender.file.File=jcr.log
-
-# 'file' uses PatternLayout.
-log4j.appender.file.layout=org.apache.log4j.PatternLayout
-log4j.appender.file.layout.ConversionPattern=%d{dd.MM.yyyy HH:mm:ss} *%-5p* [%t] %c{1}: %m (%F, line %L)\n
diff --git a/contrib/jcrtaglib/src/examples/web/WEB-INF/taglib/c.tld b/contrib/jcrtaglib/src/examples/web/WEB-INF/taglib/c.tld
deleted file mode 100644
index ce80e8d..0000000
--- a/contrib/jcrtaglib/src/examples/web/WEB-INF/taglib/c.tld
+++ /dev/null
@@ -1,416 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE taglib
-  PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
-  "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
-<taglib>
-  <tlib-version>1.0</tlib-version>
-  <jsp-version>1.2</jsp-version>
-  <short-name>c</short-name>
-  <uri>http://java.sun.com/jstl/core</uri>
-  <display-name>JSTL core</display-name>
-  <description>JSTL 1.0 core library</description>
-
-  <validator>
-    <validator-class>
-	org.apache.taglibs.standard.tlv.JstlCoreTLV
-    </validator-class>
-    <init-param>
-	<param-name>expressionAttributes</param-name>
-	<param-value>
-	    out:value
-	    out:default
-	    out:escapeXml
-	    if:test
-	    import:url
-	    import:context
-	    import:charEncoding
-	    forEach:items
-	    forEach:begin
-	    forEach:end
-	    forEach:step
-	    forTokens:items
-	    forTokens:begin
-	    forTokens:end
-	    forTokens:step
-	    param:encode
-	    param:name
-	    param:value
-            redirect:context
-            redirect:url
-	    set:property
-	    set:target
-	    set:value
-	    url:context
-	    url:value
-	    when:test
-	</param-value>
-	<description>
-	    Whitespace-separated list of colon-separated token pairs
-	    describing tag:attribute combinations that accept expressions.
-	    The validator uses this information to determine which
-	    attributes need their syntax validated.
-	</description>
-     </init-param>
-  </validator>
-
-  <tag>
-    <name>catch</name>
-    <tag-class>org.apache.taglibs.standard.tag.common.core.CatchTag</tag-class>
-    <body-content>JSP</body-content>
-    <description>
-        Catches any Throwable that occurs in its body and optionally
-        exposes it.
-    </description>
-    <attribute>
-        <name>var</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <name>choose</name>
-    <tag-class>org.apache.taglibs.standard.tag.common.core.ChooseTag</tag-class>
-    <body-content>JSP</body-content>
-    <description>
-        Simple conditional tag that establishes a context for
-        mutually exclusive conditional operations, marked by
-        &lt;when&gt; and &lt;otherwise&gt;
-    </description>
-  </tag>
-
-  <tag>
-    <name>out</name>
-    <tag-class>org.apache.taglibs.standard.tag.el.core.OutTag</tag-class>
-    <body-content>JSP</body-content>
-    <description>
-	Like &lt;%= ... &gt;, but for expressions.
-    </description>
-    <attribute>
-        <name>value</name>
-        <required>true</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>default</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>escapeXml</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <name>if</name>
-    <tag-class>org.apache.taglibs.standard.tag.el.core.IfTag</tag-class>
-    <body-content>JSP</body-content>
-    <description>
-        Simple conditional tag, which evalutes its body if the
-        supplied condition is true and optionally exposes a Boolean
-        scripting variable representing the evaluation of this condition
-    </description>
-    <attribute>
-        <name>test</name>
-        <required>true</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>var</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>scope</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <name>import</name>
-    <tag-class>org.apache.taglibs.standard.tag.el.core.ImportTag</tag-class>
-    <tei-class>org.apache.taglibs.standard.tei.ImportTEI</tei-class>
-    <body-content>JSP</body-content>
-    <description>
-	Retrieves an absolute or relative URL and exposes its contents
-	to either the page, a String in 'var', or a Reader in 'varReader'.
-    </description>
-    <attribute>
-        <name>url</name>
-        <required>true</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>var</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>scope</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>varReader</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>context</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>charEncoding</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <name>forEach</name>
-    <tag-class>org.apache.taglibs.standard.tag.el.core.ForEachTag</tag-class>
-    <tei-class>org.apache.taglibs.standard.tei.ForEachTEI</tei-class>
-    <body-content>JSP</body-content>
-    <description>
-	The basic iteration tag, accepting many different
-        collection types and supporting subsetting and other
-        functionality
-    </description>
-    <attribute>
-	<name>items</name>
-	<required>false</required>
-	<rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-	<name>begin</name>
-	<required>false</required>
-	<rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-	<name>end</name>
-	<required>false</required>
-	<rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-	<name>step</name>
-	<required>false</required>
-	<rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-	<name>var</name>
-	<required>false</required>
-	<rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-	<name>varStatus</name>
-	<required>false</required>
-	<rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <name>forTokens</name>
-    <tag-class>org.apache.taglibs.standard.tag.el.core.ForTokensTag</tag-class>
-    <body-content>JSP</body-content>
-    <description>
-	Iterates over tokens, separated by the supplied delimeters
-    </description>
-    <attribute>
-	<name>items</name>
-	<required>true</required>
-	<rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-	<name>delims</name>
-	<required>true</required>
-	<rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-	<name>begin</name>
-	<required>false</required>
-	<rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-	<name>end</name>
-	<required>false</required>
-	<rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-	<name>step</name>
-	<required>false</required>
-	<rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-	<name>var</name>
-	<required>false</required>
-	<rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-	<name>varStatus</name>
-	<required>false</required>
-	<rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <name>otherwise</name>
-    <tag-class>org.apache.taglibs.standard.tag.common.core.OtherwiseTag</tag-class>
-    <body-content>JSP</body-content>
-    <description>
-	Subtag of &lt;choose&gt; that follows &lt;when&gt; tags
-	and runs only if all of the prior conditions evaluated to
-	'false'
-    </description>
-  </tag>
-
-  <tag>
-    <name>param</name>
-    <tag-class>org.apache.taglibs.standard.tag.el.core.ParamTag</tag-class>
-    <body-content>JSP</body-content>
-    <description>
-	Adds a parameter to a containing 'import' tag's URL.
-    </description>
-    <attribute>
-        <name>name</name>
-        <required>true</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>value</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <name>redirect</name>
-    <tag-class>org.apache.taglibs.standard.tag.el.core.RedirectTag</tag-class>
-    <body-content>JSP</body-content>
-    <description>
-	Redirects to a new URL.
-    </description>
-    <attribute>
-        <name>var</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>scope</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>url</name>
-        <required>true</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>context</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <name>remove</name>
-    <tag-class>org.apache.taglibs.standard.tag.common.core.RemoveTag</tag-class>
-    <body-content>empty</body-content>
-    <description>
-	Removes a scoped variable (from a particular scope, if specified).
-    </description>
-    <attribute>
-        <name>var</name>
-        <required>true</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>scope</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <name>set</name>
-    <tag-class>org.apache.taglibs.standard.tag.el.core.SetTag</tag-class>
-    <body-content>JSP</body-content>
-    <description>
-	Sets the result of an expression evaluation in a 'scope'
-    </description>
-    <attribute>
-        <name>var</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>value</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>target</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>property</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>scope</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <name>url</name>
-    <tag-class>org.apache.taglibs.standard.tag.el.core.UrlTag</tag-class>
-    <body-content>JSP</body-content>
-    <description>
-	Prints or exposes a URL with optional query parameters
-        (via the c:param tag).
-    </description>
-    <attribute>
-        <name>var</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>scope</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>value</name>
-        <required>true</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>context</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <name>when</name>
-    <tag-class>org.apache.taglibs.standard.tag.el.core.WhenTag</tag-class>
-    <body-content>JSP</body-content>
-    <description>
-        Subtag of &lt;choose&gt; that includes its body if its
-        condition evalutes to 'true'
-    </description>
-    <attribute>
-        <name>test</name>
-        <required>true</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-</taglib>
diff --git a/contrib/jcrtaglib/src/examples/web/WEB-INF/taglib/jcr.tld b/contrib/jcrtaglib/src/examples/web/WEB-INF/taglib/jcr.tld
deleted file mode 100644
index 14df513..0000000
--- a/contrib/jcrtaglib/src/examples/web/WEB-INF/taglib/jcr.tld
+++ /dev/null
@@ -1,470 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE taglib
-  PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
-  "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
-
-<taglib>
-  <tlib-version>1.0</tlib-version>
-  <jsp-version>1.2</jsp-version>
-  <short-name>jcr</short-name>
-  <uri>http://unknown</uri>
-  <display-name>JCR taglib</display-name>
-  <description>JCR tag library</description>
-	
-	<!-- Session -->
-	<tag>
-		<name>session</name>
-		<tag-class>org.apache.jackrabbit.taglib.SessionTag</tag-class>
-		<body-content>JSP</body-content>
-		<attribute>
-			<name>var</name>
-			<required>false</required>
-			<rtexprvalue>false</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>repositoryJNDI</name>
-			<required>false</required>
-			<rtexprvalue>false</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>workspace</name>
-			<required>false</required>
-			<rtexprvalue>false</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>var</name>
-			<required>false</required>
-			<rtexprvalue>false</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>user</name>
-			<required>false</required>
-			<rtexprvalue>false</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>password</name>
-			<required>false</required>
-			<rtexprvalue>false</rtexprvalue>
-		</attribute>
-	</tag>
-	
-	<!-- Nodes -->
-	<tag>
-		<name>nodes</name>
-		<tag-class>org.apache.jackrabbit.taglib.NodesTag</tag-class>
-		<body-content>JSP</body-content>
-		<attribute>
-			<name>session</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>node</name>
-			<required>true</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>var</name>
-			<required>true</required>
-			<rtexprvalue>false</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>sortID</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>sortExp</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>ascending</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-			<type>boolean</type>
-		</attribute>
-		<attribute>
-			<name>traverserID</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>traverserParam</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>traverserDepth</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-			<type>int</type>
-		</attribute>
-		<attribute>
-			<name>filterID</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>filterExp</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-	</tag>
-
-	<!-- Properties -->
-	<tag>
-		<name>properties</name>
-		<tag-class>org.apache.jackrabbit.taglib.PropertiesTag</tag-class>
-		<body-content>JSP</body-content>
-		<attribute>
-			<name>session</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>node</name>
-			<required>true</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>var</name>
-			<required>true</required>
-			<rtexprvalue>false</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>sortID</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>sortExp</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>ascending</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-			<type>boolean</type>
-		</attribute>
-		<attribute>
-			<name>filterID</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>filterExp</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-	</tag>
-
-	<!-- OUT -->
-	<tag>
-		<name>out</name>
-		<tag-class>org.apache.jackrabbit.taglib.OutTag</tag-class>
-		<body-content>empty</body-content>
-		<attribute>
-			<name>session</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>item</name>
-			<required>true</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>property</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>		
-		<attribute>
-			<name>templateEngineID</name>
-			<required>false</required>
-			<rtexprvalue>false</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>template</name>
-			<required>false</required>
-			<rtexprvalue>false</rtexprvalue>
-		</attribute>
-	</tag>
-
-	<!-- SET -->
-	<tag>
-		<name>set</name>
-		<tag-class>org.apache.jackrabbit.taglib.SetTag</tag-class>
-		<body-content>empty</body-content>
-		<attribute>
-			<name>session</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>item</name>
-			<required>true</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>property</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>		
-		<attribute>
-			<name>var</name>
-			<required>true</required>
-			<rtexprvalue>false</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>scope</name>
-			<required>false</required>
-			<rtexprvalue>false</rtexprvalue>
-		</attribute>
-	</tag>
-
-	<!-- Count -->
-	<tag>
-		<name>count</name>
-		<tag-class>org.apache.jackrabbit.taglib.CountTag</tag-class>
-		<body-content>empty</body-content>
-		<attribute>
-			<name>session</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>node</name>
-			<required>true</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>traverserID</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>traverserParam</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>traverserDepth</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-			<type>int</type>
-		</attribute>
-		<attribute>
-			<name>filterID</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>filterExp</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-	</tag>	
-	
-	<!-- Size -->
-	<tag>
-		<name>size</name>
-		<tag-class>org.apache.jackrabbit.taglib.SizeTag</tag-class>
-		<body-content>empty</body-content>
-		<attribute>
-			<name>session</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>node</name>
-			<required>true</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>traverserID</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>traverserParam</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>traverserDepth</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-			<type>int</type>
-		</attribute>
-		<attribute>
-			<name>filterID</name>
-			<required>false</required>
-			<rtexprvalue>false</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>filterExp</name>
-			<required>false</required>
-			<rtexprvalue>false</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>calculatorId</name>
-			<required>false</required>
-			<rtexprvalue>false</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>unit</name>
-			<required>false</required>
-			<rtexprvalue>false</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>format</name>
-			<required>false</required>
-			<rtexprvalue>false</rtexprvalue>
-		</attribute>
-	</tag>	
-
-	<!-- CD -->
-	<tag>
-		<name>cd</name>
-		<tag-class>org.apache.jackrabbit.taglib.CdTag</tag-class>
-		<body-content>JSP</body-content>
-		<attribute>
-			<name>session</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>node</name>
-			<required>true</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>scope</name>
-			<required>false</required>
-			<rtexprvalue>false</rtexprvalue>
-		</attribute>		
-	</tag>
-
-	<!-- Versions -->
-	<tag>
-		<name>versions</name>
-		<tag-class>org.apache.jackrabbit.taglib.VersionsTag</tag-class>
-		<body-content>JSP</body-content>
-		<attribute>
-			<name>session</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>node</name>
-			<required>true</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>var</name>
-			<required>true</required>
-			<rtexprvalue>false</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>sortID</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>sortExp</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>ascending</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-			<type>boolean</type>
-		</attribute>
-		<attribute>
-			<name>traverserID</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>traverserParam</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>traverserDepth</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-			<type>int</type>
-		</attribute>
-		<attribute>
-			<name>filterID</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>filterExp</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-	</tag>
-
-	<!-- Query -->
-	<tag>
-		<name>query</name>
-		<tag-class>org.apache.jackrabbit.taglib.QueryTag</tag-class>
-		<body-content>JSP</body-content>
-		<attribute>
-			<name>session</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>stmt</name>
-			<required>true</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>var</name>
-			<required>true</required>
-			<rtexprvalue>false</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>lang</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>				
-	</tag>
-
-	<!-- If Present -->
-	<tag>
-		<name>ifPresent</name>
-		<tag-class>org.apache.jackrabbit.taglib.IfPresentTag</tag-class>
-		<body-content>JSP</body-content>
-		<attribute>
-			<name>session</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>item</name>
-			<required>true</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>property</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>		
-		<attribute>
-			<name>value</name>
-			<required>false</required>
-			<rtexprvalue>false</rtexprvalue>
-			<type>boolean</type>
-		</attribute>				
-	</tag>
-
-		
-</taglib>
diff --git a/contrib/jcrtaglib/src/examples/web/WEB-INF/web.xml b/contrib/jcrtaglib/src/examples/web/WEB-INF/web.xml
deleted file mode 100644
index 742640d..0000000
--- a/contrib/jcrtaglib/src/examples/web/WEB-INF/web.xml
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE 
-	web-app
-	PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
-	"web-app_2_3.dtd">
-<web-app>
-	<display-name>JCR taglib examples</display-name>
-
-	<description>Examples for the jcr taglib</description>
-
-	<servlet>
-		<servlet-name>jackrabbit</servlet-name>
-		<servlet-class>
-			org.apache.jackrabbit.taglib.InitServlet
-		</servlet-class>
-		<load-on-startup>1</load-on-startup>
-	</servlet>
-
-	<welcome-file-list>
-		<welcome-file>index.jsp</welcome-file>
-		<welcome-file>index.html</welcome-file>
-	</welcome-file-list>
-
-
-	<taglib>
-		<taglib-uri>/taglib/jcr</taglib-uri>
-		<taglib-location>
-			/WEB-INF/taglib/jcr.tld
-		</taglib-location>
-	</taglib>
-
-	<taglib>
-		<taglib-uri>/taglib/c</taglib-uri>
-		<taglib-location>
-			/WEB-INF/taglib/c.tld
-		</taglib-location>
-	</taglib>
-	
-	<!--  Default repository -->
-	<resource-env-ref>
-		<description>
-			Jackrabbit repository factory
-		</description>
-		<resource-env-ref-name>
-			jcr/repositoryFactory
-		</resource-env-ref-name>
-		<resource-env-ref-type>
-			org.apache.jackrabbit.core.jndi.BindableRepository
-		</resource-env-ref-type>
-	</resource-env-ref>
-
-	<!--  Bean Factory  -->
-	<resource-env-ref>
-		<description>
-			Bean Factory
-		</description>
-		<resource-env-ref-name>
-			jcr/beanFactory
-		</resource-env-ref-name>
-		<resource-env-ref-type>
-			org.apache.jackrabbit.taglib.bean.BeanFactory
-		</resource-env-ref-type>
-	</resource-env-ref>
-	
-	<!--  Traverser -->
-	<env-entry>
-		<env-entry-name>jcr/traverser/default</env-entry-name>
-		<env-entry-value>org.apache.jackrabbit.taglib.traverser.PreorderTraverser</env-entry-value>
-		<env-entry-type>java.lang.String</env-entry-type>
-	</env-entry>
-	
-	<!--  Filter -->
-	<env-entry>
-		<env-entry-name>jcr/filter/default</env-entry-name>
-		<env-entry-value>org.apache.jackrabbit.taglib.filter.JEXLItemFilter</env-entry-value>
-		<env-entry-type>java.lang.String</env-entry-type>
-	</env-entry>
-	
-	<!--  Comparator -->
-	<env-entry>
-		<env-entry-name>jcr/comparator/default</env-entry-name>
-		<env-entry-value>org.apache.jackrabbit.taglib.comparator.JEXLItemComparator</env-entry-value>
-		<env-entry-type>java.lang.String</env-entry-type>
-	</env-entry>	
-		
-	<!--  Template Engine -->
-	<env-entry>
-		<env-entry-name>jcr/template/engine/default</env-entry-name>
-		<env-entry-value>org.apache.jackrabbit.taglib.template.SimpleTemplateEngine</env-entry-value>
-		<env-entry-type>java.lang.String</env-entry-type>
-	</env-entry>
-	
-	<!--  Size calculator -->
-	<env-entry>
-		<env-entry-name>jcr/size/default</env-entry-name>
-		<env-entry-value>org.apache.jackrabbit.taglib.size.SimpleSizeCalculator</env-entry-value>
-		<env-entry-type>java.lang.String</env-entry-type>
-	</env-entry>		
-
-	<!--  Anonymous login -->	
-	<env-entry>
-		<env-entry-name>jcr/login/anonuser</env-entry-name>
-		<env-entry-value>anonymous</env-entry-value>
-		<env-entry-type>java.lang.String</env-entry-type>
-	</env-entry>
-	<env-entry>
-		<env-entry-name>jcr/login/anonpwd</env-entry-name>
-		<env-entry-value></env-entry-value>
-		<env-entry-type>java.lang.String</env-entry-type>
-	</env-entry>
-
-</web-app>
diff --git a/contrib/jcrtaglib/src/examples/web/cd.jsp b/contrib/jcrtaglib/src/examples/web/cd.jsp
deleted file mode 100644
index 320dbbd..0000000
--- a/contrib/jcrtaglib/src/examples/web/cd.jsp
+++ /dev/null
@@ -1,28 +0,0 @@
-<%@taglib uri="/taglib/jcr" prefix="jcr" %>
-<%@taglib uri="/taglib/c" prefix="c" %>
-<h1>Nodes Tag with default traverser</h1>
-
-<jcr:session>
-
-<h3>Current directory stored in the page Context</h3>
-<h2>Depth = 1</h2>
-<jcr:cd node="/TestA">
-	<jcr:nodes node="A-L2" var="node" traverserDepth="1">
-		<c:out value="${node.path}"/><br>
-	</jcr:nodes>
-</jcr:cd>
-
-<h2>Depth = 2</h2>
-<jcr:cd node="/TestA">
-	<jcr:nodes node="A-L2" var="node" traverserDepth="2">
-		<c:out value="${node.path}"/><br>
-	</jcr:nodes>
-</jcr:cd>
-
-<h3>Current directory stored in the request</h3>
-<jcr:cd node="/TestA" scope="request">
-	<jcr:out item="A-L2"/><br>
-</jcr:cd>
-
-</jcr:session>
-
diff --git a/contrib/jcrtaglib/src/examples/web/comparators.jsp b/contrib/jcrtaglib/src/examples/web/comparators.jsp
deleted file mode 100644
index 6cf664d..0000000
--- a/contrib/jcrtaglib/src/examples/web/comparators.jsp
+++ /dev/null
@@ -1,37 +0,0 @@
-<%@taglib uri="/taglib/jcr" prefix="jcr" %>
-<%@taglib uri="/taglib/c" prefix="c" %>
-<h1>Nodes Tag with default traverser</h1>
-<font color="red">Sorted by "item.name"</font>
-
-<jcr:session>
-
-<h2>Descending</h2>
-<table border="1" cellpadding="5">
-<tr>
-	<TH>Path</TH>
-	<TH>Name</TH>	
-</tr>
-<jcr:nodes node="/" var="node" traverserDepth="2" sortExp="item.name" ascending="false">
-<tr>
-	<TD><c:out value="${node.path}"/></TD>
-	<TD><c:out value="${node.name}"/></TD>	
-</tr>
-</jcr:nodes>
-</table>
-
-<h2>Ascending</h2>
-<table border="1" cellpadding="5">
-<tr>
-	<TH>Path</TH>
-	<TH>Name</TH>	
-</tr>
-<jcr:nodes node="/" var="node" traverserDepth="2" sortExp="item.name" ascending="true">
-<tr>
-	<TD><c:out value="${node.path}"/></TD>
-	<TD><c:out value="${node.name}"/></TD>	
-</tr>
-</jcr:nodes>
-</table>
-
-
-</jcr:session>
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/examples/web/count.jsp b/contrib/jcrtaglib/src/examples/web/count.jsp
deleted file mode 100644
index ad9260c..0000000
--- a/contrib/jcrtaglib/src/examples/web/count.jsp
+++ /dev/null
@@ -1,18 +0,0 @@
-<%@taglib uri="/taglib/jcr" prefix="jcr" %>
-<%@taglib uri="/taglib/c" prefix="c" %>
-<h1>Count Tag with default traverser</h1>
-
-<jcr:session>
-Child nodes of "/": 
-
-<h2>Depth = 0</h2>
-<jcr:count node="/" traverserDepth="0" /><br/>
-
-<h2>Depth = 1</h2>
-<jcr:count node="/" traverserDepth="1"/><br/>
-
-<h2>Depth = 2</h2>
-<jcr:count node="/" traverserDepth="2"/><br/>
-
-</jcr:session>
-
diff --git a/contrib/jcrtaglib/src/examples/web/filters.jsp b/contrib/jcrtaglib/src/examples/web/filters.jsp
deleted file mode 100644
index 3b9ba6d..0000000
--- a/contrib/jcrtaglib/src/examples/web/filters.jsp
+++ /dev/null
@@ -1,22 +0,0 @@
-<%@taglib uri="/taglib/jcr" prefix="jcr" %>
-<%@taglib uri="/taglib/c" prefix="c" %>
-<h1>Nodes Tag with default traverser</h1>
-<font color="red">Filtered by "item.name.equals('TestA')"</font>
-
-<jcr:session>
-
-<h2>Depth = 2</h2>
-<table border="1" cellpadding="5">
-<tr>
-	<TH>Path</TH>
-	<TH>Name</TH>	
-</tr>
-<jcr:nodes node="/" var="node" traverserDepth="2" filterExp="item.name.equals('TestA')">
-<tr>
-	<TD><c:out value="${node.path}"/></TD>
-	<TD><c:out value="${node.name}"/></TD>	
-</tr>
-</jcr:nodes>
-</table>
-
-</jcr:session>
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/examples/web/ifPresent.jsp b/contrib/jcrtaglib/src/examples/web/ifPresent.jsp
deleted file mode 100644
index 4262b1a..0000000
--- a/contrib/jcrtaglib/src/examples/web/ifPresent.jsp
+++ /dev/null
@@ -1,28 +0,0 @@
-<%@taglib uri="/taglib/jcr" prefix="jcr" %>
-<%@taglib uri="/taglib/c" prefix="c" %>
-<h1>IfPresent tag</h1>
-
-<jcr:session>
-
-<jcr:ifPresent item="/TestA">
-	/TestA is present<br>
-</jcr:ifPresent>
-
-<jcr:ifPresent item="/john" value="false">
-	/john is not present<br>
-</jcr:ifPresent>
-
-<jcr:ifPresent item="/">
-	Root is present<br>
-</jcr:ifPresent>
-
-<jcr:ifPresent item="/" property="jcr:primcaryType">
-	Property 'jcr:primaryType' is present in Root<br>
-</jcr:ifPresent>
-
-<jcr:ifPresent item="/" value="false">
-	Root is not present<br>
-</jcr:ifPresent>
-
-</jcr:session>
-
diff --git a/contrib/jcrtaglib/src/examples/web/index.jsp b/contrib/jcrtaglib/src/examples/web/index.jsp
deleted file mode 100644
index e42b10d..0000000
--- a/contrib/jcrtaglib/src/examples/web/index.jsp
+++ /dev/null
@@ -1,59 +0,0 @@
-<html>
-<HEAD>
-</HEAD>
-<BODY>
-
-<h1>JCR taglib</h1>
-
-<h3>Basic usage</h3>
-<ol>
-	<LI>
-		<a href="session.jsp">SessionTag</a>. <br/>
-		jrc:session  sets the boundaries of a JCR session. 
-		It creates a Session and stores it in a page scope variable.
-	</LI>
-	<LI>
-		<a href="cd.jsp">CdTag</a>. <br/>
-		jrc:cd sets the current working directory. 
-	</LI>	
-	<LI><a href="nodes.jsp">NodesTag</a><br/>
-		jrc:nodes iterates over all the traversed nodes from the given node.	
-	</LI>
-	<LI><a href="properties.jsp">PropertiesTag</a><br/>
-		jcr:properties iterates over the properties of the given node.
-	</LI>
-	<LI><a href="out.jsp">OutTag</a><br/>
-		jcr:out displays Node and property values through 
-		the given template engine and template.	
-	</LI>
-	<LI><a href="set.jsp">SetTag</a><br/>
-		jcr:set stores the given node or property in a 
-		page context scoped variable.
-	</LI>
-	<LI><a href="count.jsp">CountTag</a><br/>
-		jcr:counts counts the nodes returned by the given 
-		Traverser and writes the value.
-	</LI>
-	<LI><a href="size.jsp">SizeTag</a><br/>
-		jcr:size Estimates the cumulative size of the nodes returned by the given
-		Traverser and writes the value.
-	</LI>	
-	<LI><a href="query.jsp">QueryTag</a><br/>
-		jcr:query Iterates over the query result nodes. 
-	</LI>		
-	<LI><a href="ifPresent.jsp">IfPresentTag</a><br/>
-		jcr:ifPresent Conditional tag which evaluates a node existence. 
-	</LI>	
-	<LI><a href="versions.jsp">versionsTag</a><br/>
-		jcr:versions Iterates over the versions of the given node 
-	</LI>
-</ol>
-
-<h3>Advanced usage</h3>
-<ol>
-	<LI>Test <a href="traversers.jsp">traversers</a> </LI>
-	<LI>Test <a href="filters.jsp">filters</a> </LI>
-	<LI>Test <a href="comparators.jsp">comparators</a> </LI>
-</ol>
-</BODY>
-</html>
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/examples/web/nodes.jsp b/contrib/jcrtaglib/src/examples/web/nodes.jsp
deleted file mode 100644
index de5647c..0000000
--- a/contrib/jcrtaglib/src/examples/web/nodes.jsp
+++ /dev/null
@@ -1,23 +0,0 @@
-<%@taglib uri="/taglib/jcr" prefix="jcr" %>
-<%@taglib uri="/taglib/c" prefix="c" %>
-<h1>Nodes Tag with default traverser</h1>
-
-<h2>Depth = 0</h2>
-<jcr:session>
-
-<jcr:nodes node="/" var="node" traverserDepth="0">
-	<c:out value="${node.path}"/><br>
-</jcr:nodes>
-
-<h2>Depth = 1</h2>
-<jcr:nodes node="/" var="node" traverserDepth="1">
-	<c:out value="${node.path}"/><br>
-</jcr:nodes>
-
-<h2>Depth = 2</h2>
-<jcr:nodes node="/" var="node" traverserDepth="2">
-	<c:out value="${node.path}"/><br>
-</jcr:nodes>
-
-</jcr:session>
-
diff --git a/contrib/jcrtaglib/src/examples/web/out.jsp b/contrib/jcrtaglib/src/examples/web/out.jsp
deleted file mode 100644
index 1b07de3..0000000
--- a/contrib/jcrtaglib/src/examples/web/out.jsp
+++ /dev/null
@@ -1,28 +0,0 @@
-<%@taglib uri="/taglib/jcr" prefix="jcr" %>
-<%@taglib uri="/taglib/c" prefix="c" %>
-<h1>Out</h1>
-
-<jcr:session>
-<table cellpadding="10" border="1" > 
-	<tr>
-		<TH>Node</TH>
-		<TH>Property</TH>
-		<TH>Node: Template engine output</TH>
-		<TH>Property: Template engine output</TH>
-	</tr>
-	<jcr:nodes node="/TestB" var="node" traverserDepth="0">
-		<jcr:properties node="${node}" var="property">
-			<tr>
-				<TD><c:out value="${property.path}"/></TD>
-				<TD><c:out value="${property.name}"/></TD>
-				<TD>
-					<jcr:out item="${node}" />
-				</TD>
-				<TD>
-					<jcr:out item="${node}" property="jcr:primaryType" />
-				</TD>
-			</tr>
-		</jcr:properties>
-	</jcr:nodes>
-</table>		
-</jcr:session>
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/examples/web/properties.jsp b/contrib/jcrtaglib/src/examples/web/properties.jsp
deleted file mode 100644
index 536355c..0000000
--- a/contrib/jcrtaglib/src/examples/web/properties.jsp
+++ /dev/null
@@ -1,35 +0,0 @@
-<%@taglib uri="/taglib/jcr" prefix="jcr" %>
-<%@taglib uri="/taglib/c" prefix="c" %>
-<h1>Properties</h1>
-
-<jcr:session>
-	Session: <c:out value="${session.userId}"/><br>
-<table cellpadding="10" border="1" > 
-	<tr>
-		<TH>Path</TH>
-		<TH>Name</TH>
-		<TH>Type</TH>
-		<TH>Value</TH>
-	</tr>
-	<jcr:nodes node="/TestB" var="node">
-		<jcr:properties node="${node}" var="property" sortExp="item.name">
-			<tr>
-				<TD><c:out value="${property.path}"/></TD>
-				<TD><c:out value="${property.name}"/></TD>
-				<TD>
-				<c:if test="${!empty property.value}">
-					<c:out value="${property.value.type}"/>
-				</c:if>
-				&nbsp;
-				</TD>
-				<TD>
-				<c:if test="${!empty property.value}">
-					<c:out value="${property.value.string}"/>
-				</c:if>
-				&nbsp;
-				</TD>
-			</tr>
-		</jcr:properties>
-	</jcr:nodes>
-</table>	
-</jcr:session>
diff --git a/contrib/jcrtaglib/src/examples/web/query.jsp b/contrib/jcrtaglib/src/examples/web/query.jsp
deleted file mode 100644
index 9fdb2ba..0000000
--- a/contrib/jcrtaglib/src/examples/web/query.jsp
+++ /dev/null
@@ -1,22 +0,0 @@
-<%@taglib uri="/taglib/jcr" prefix="jcr" %>
-<%@taglib uri="/taglib/c" prefix="c" %>
-<h1>Query tag</h1>
-
-<%
- String q = "SELECT * FROM nt:base WHERE jcr:path LIKE '/TestA/%'" ;
-%>
-
-<jcr:session>
-
-<h3>SQL: <%=q%> </h3>
-<jcr:query stmt="<%= q %>" var="node" lang="sql">
-	Node: <c:out value="${node.path}"/><br>
-</jcr:query>
-
-<h3>XPATH: //* </h3>
-<jcr:query stmt="//*" var="node" lang="xpath">
-	Node: <c:out value="${node.path}"/><br>
-</jcr:query>
-
-</jcr:session>
-
diff --git a/contrib/jcrtaglib/src/examples/web/session.jsp b/contrib/jcrtaglib/src/examples/web/session.jsp
deleted file mode 100644
index a3c8100..0000000
--- a/contrib/jcrtaglib/src/examples/web/session.jsp
+++ /dev/null
@@ -1,7 +0,0 @@
-<%@taglib uri="/taglib/jcr" prefix="jcr" %>
-
-<h1>Session</h1>
-
-<jcr:session>
-Hello session
-</jcr:session>
diff --git a/contrib/jcrtaglib/src/examples/web/set.jsp b/contrib/jcrtaglib/src/examples/web/set.jsp
deleted file mode 100644
index d41538e..0000000
--- a/contrib/jcrtaglib/src/examples/web/set.jsp
+++ /dev/null
@@ -1,11 +0,0 @@
-<%@taglib uri="/taglib/jcr" prefix="jcr" %>
-<%@taglib uri="/taglib/c" prefix="c" %>
-<h1>Set</h1>
-
-<jcr:session>
-	<jcr:set item="/TestA" var="myA" scope="request"/>
-	node: <jcr:out item="${myA}" /><br/>
-	<jcr:set item="/TestA" property="jcr:primaryType" var="type" />
-	Node type: <c:out value="${type.string}" />	
-	
-</jcr:session>
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/examples/web/size.jsp b/contrib/jcrtaglib/src/examples/web/size.jsp
deleted file mode 100644
index b55b945..0000000
--- a/contrib/jcrtaglib/src/examples/web/size.jsp
+++ /dev/null
@@ -1,34 +0,0 @@
-<%@taglib uri="/taglib/jcr" prefix="jcr" %>
-<%@taglib uri="/taglib/c" prefix="c" %>
-<h1>Size Tag with default traverser</h1>
-
-<jcr:session>
-
-	<h2>Size of root node: </h2>
-	<jcr:size node="/" traverserDepth="0" /> bytes <br/>
-	<jcr:properties node="/" var="prop">
-		<jcr:out item="${prop}"/> <br>
-	</jcr:properties>
-
-	<h2>Size of testA node</h2>
-	<jcr:size node="TestA" traverserDepth="0" /> bytes <br/>
-	<jcr:properties node="/TestA" var="prop">
-		<jcr:out item="${prop}"/><br>
-	</jcr:properties>
-
-	<h2>Size of A-L2 node</h2>
-	<jcr:size node="TestA/A-L2" traverserDepth="0" /> bytes <br/>
-	<jcr:properties node="/TestA/A-L2" var="prop">
-		<jcr:out item="${prop}"/><br>
-	</jcr:properties>
-
-	<h2>Size of testA node with depth=1</h2>
-	<jcr:size node="TestA" traverserDepth="1" /> bytes <br/>
-
-	<h2>Size of testB node</h2>
-	<jcr:size node="/TestB" traverserDepth="0" /> bytes <br/>
-	<jcr:properties node="TestB" var="prop">
-		<jcr:out item="${prop}"/><br>
-	</jcr:properties>
-
-</jcr:session>
diff --git a/contrib/jcrtaglib/src/examples/web/traversers.jsp b/contrib/jcrtaglib/src/examples/web/traversers.jsp
deleted file mode 100644
index e4f7e30..0000000
--- a/contrib/jcrtaglib/src/examples/web/traversers.jsp
+++ /dev/null
@@ -1,80 +0,0 @@
-<%@taglib uri="/taglib/jcr" prefix="jcr" %>
-<%@taglib uri="/taglib/c" prefix="c" %>
-<h1>Traversers</h1>
-
-<jcr:session>
-
-<h2>Preorder traverser</h2>
-<jcr:nodes 
-	node="/" 
-	var="node" 
-	traverserID="org.apache.jackrabbit.taglib.traverser.PreorderTraverser" 
-	traverserDepth="5">
-	<c:out value="${node.path}"/><br>
-</jcr:nodes>
-
-<h2>Postorder traverser</h2>
-<jcr:nodes 
-	node="/" 
-	var="node" 
-	traverserID="org.apache.jackrabbit.taglib.traverser.PostorderTraverser" 
-	traverserDepth="5">
-	<c:out value="${node.path}"/><br>
-</jcr:nodes>
-
-<h2>AncestorTraverser (breadcrumb) from node "Apples/Apple1/Nice apple1"</h2>
-<jcr:nodes 
-	node="Apples/Apple1/Nice apple1" 
-	var="node" 
-	traverserID="org.apache.jackrabbit.taglib.traverser.AncestorsTraverser" 
-	traverserDepth="5">
-	<c:out value="${node.name}"/> /
-</jcr:nodes>
-<br>
-
-<h2>ExpandedNodeTraverser (navigator) to node "Apples/Apple1"</h2>
-<p>Depth is ignored in this Traverser implementation</p>
-<jcr:nodes 
-	node="/" 
-	var="node" 
-	traverserID="org.apache.jackrabbit.taglib.traverser.ExpandedNodeTraverser" 
-	traverserParam="Apples/Apple1"
-	traverserDepth="5">
-
-	<c:forEach begin="0" end="${node.depth}">
-		&nbsp;&nbsp;
-	</c:forEach>
-	/ <c:out value="${node.name}"/><br/>
-</jcr:nodes>
-<br>
-
-<h2>
-	ExpandedNodesTraverser (navigator with multiple expanded nodes)<br> 
-	to node "/Apples/Apple1" and <br>
-	to node "/Oranges" 
-	</h2>
-<p>Depth is ignored in this Traverser implementation</p>
-
-<jcr:set item="Apples/Apple1" var="apple1" />
-<jcr:set item="Oranges" var="oranges" />
-
-<%
- 	java.util.Collection c = new java.util.ArrayList() ;
- 	c.add(pageContext.getAttribute("apple1"));
- 	c.add(pageContext.getAttribute("oranges")); 	
- 	pageContext.setAttribute("target", c);
-%>
-<jcr:nodes 
-	node="/" 
-	var="node" 
-	traverserID="org.apache.jackrabbit.taglib.traverser.ExpandedNodesTraverser" 
-	traverserParam="${target}"
-	traverserDepth="5">
-	<c:forEach begin="0" end="${node.depth}">
-		&nbsp;&nbsp;
-	</c:forEach>
-	/ <c:out value="${node.name}"/><br/>
-</jcr:nodes>
-
-
-</jcr:session>
diff --git a/contrib/jcrtaglib/src/examples/web/versions.jsp b/contrib/jcrtaglib/src/examples/web/versions.jsp
deleted file mode 100644
index e8c0fe1..0000000
--- a/contrib/jcrtaglib/src/examples/web/versions.jsp
+++ /dev/null
@@ -1,12 +0,0 @@
-<%@taglib uri="/taglib/jcr" prefix="jcr" %>
-<%@taglib uri="/taglib/c" prefix="c" %>
-<h1>Versions</h1>
-
-<jcr:session>
-
-<jcr:versions node="/TestA" var="node" traverserDepth="1">
-	<c:out value="${node.path}"/><br>
-</jcr:versions>
-
-</jcr:session>
-
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/CdTag.java b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/CdTag.java
deleted file mode 100644
index bc932a0..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/CdTag.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.taglib;
-
-import javax.jcr.Item;
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-import javax.servlet.jsp.JspException;
-
-import org.apache.jackrabbit.taglib.utils.JCRTagConstants;
-
-/**
- * Changes the current directory. Nested tags must read the paths relative to
- * this node.<br>
- * 
- * @author <a href="mailto:edgarpoce@gmail.com">Edgar Poce </a>
- */
-public class CdTag extends SetTag
-{
-
-    /**
-     * Constructor
-     */
-    public CdTag()
-    {
-        super();
-        this.init();
-    }
-
-    /**
-     * Init
-     */
-    private void init()
-    {
-        this.var = JCRTagConstants.KEY_CD;
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public int doEndTag() throws JspException
-    {
-        // Restore the previous attribute
-        pageContext.removeAttribute(this.var, this.scope);
-        return super.doEndTag();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public int doStartTag() throws JspException
-    {
-        super.doStartTag();
-        return EVAL_BODY_INCLUDE;
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public void release()
-    {
-        super.release();
-        this.init();
-    }
-
-    /**
-     * Sets the node
-     * 
-     * @param node
-     */
-    public void setNode(String node)
-    {
-        this.item = node;
-    }
-
-    /**
-     * Retrieve and validate the Item. It must be a Node instance.
-     * 
-     * @return curren working node
-     * @throws JspException
-     * @throws RepositoryException
-     */
-    protected Item getItem() throws JspException, RepositoryException
-    {
-        Item item = super.getItem();
-
-        // Validate
-        if (!(item instanceof Node))
-        {
-            throw new JspException("The referenced item is not a Node instance");
-        }
-
-        return item;
-    }
-
-}
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/CountTag.java b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/CountTag.java
deleted file mode 100644
index 0b73c67..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/CountTag.java
+++ /dev/null
@@ -1,276 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.taglib;
-
-import java.io.IOException;
-
-import javax.jcr.Node;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.JspTagException;
-import javax.servlet.jsp.tagext.TagSupport;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.taglib.filter.ItemFilter;
-import org.apache.jackrabbit.taglib.traverser.Traverser;
-import org.apache.jackrabbit.taglib.utils.JCRTagConstants;
-import org.apache.jackrabbit.taglib.utils.JCRTagUtils;
-import org.apache.taglibs.standard.tag.common.core.NullAttributeException;
-import org.apache.taglibs.standard.tag.el.core.ExpressionUtil;
-
-/**
- * <p>
- * Counts the nodes returned by the given <code>Traverser</code> and writes
- * the value.
- * </p>
- * 
- * @author <a href="mailto:edgarpoce@gmail.com">Edgar Poce </a>
- */
-public class CountTag extends TagSupport
-{
-    private static Log log = LogFactory.getLog(CountTag.class);
-
-    public static String TAG_NAME = "count";
-
-    /**
-     * Name of the scoped variable where the jcr session is stored. If not set
-     * then JCRTagConstants.KEY_SESSION is used.
-     */
-    private String session;
-
-    /**
-     * JSTL expression or full path. <br>
-     * e.g. /mynode <br>
-     * or ${mynode}
-     */
-    private String node;
-
-    /**
-     * Traverser ID.
-     */
-    private String traverserID;
-
-    /**
-     * Expression that affects Traverser behaviour
-     */
-    private String traverserParam;
-
-    /**
-     * Traverse depth
-     */
-    private int traverserDepth = 0;
-
-    /**
-     * NodePredicate ID.
-     */
-    private String filterID;
-
-    /**
-     * Expression used by the NodePredicate to evaluate nodes. The evaluation
-     * must return a Boolean instance.
-     */
-    private String filterExp;
-
-    /**
-     * Constructor
-     */
-    public CountTag()
-    {
-        super();
-        this.init();
-    }
-
-    /**
-     * Sets the filter expression
-     * 
-     * @param filterExp
-     */
-    public void setFilterExp(String filterExp)
-    {
-        this.filterExp = filterExp;
-    }
-
-    /**
-     * Sets the filter ID
-     * 
-     * @param filterID
-     */
-    public void setFilterID(String filterID)
-    {
-        this.filterID = filterID;
-    }
-
-    /**
-     * Sets the node
-     * 
-     * @param node
-     */
-    public void setNode(String node)
-    {
-        this.node = node;
-    }
-
-    /**
-     * Sets the session
-     * 
-     * @param session
-     */
-    public void setSession(String session)
-    {
-        this.session = session;
-    }
-
-    /**
-     * Set the traverser depth
-     * 
-     * @param traverseDepth
-     */
-    public void setTraverserDepth(int traverseDepth)
-    {
-        this.traverserDepth = traverseDepth;
-    }
-
-    /**
-     * Sets the traverser ID
-     * 
-     * @param traverseID
-     */
-    public void setTraverserID(String traverseID)
-    {
-        this.traverserID = traverseID;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.servlet.jsp.tagext.Tag#release()
-     */
-    public void release()
-    {
-        super.release();
-        this.init();
-    }
-
-    /**
-     * init
-     */
-    private void init()
-    {
-        this.filterExp = null;
-        this.filterID = (String) JCRTagUtils
-                .lookup(JCRTagConstants.JNDI_DEFAULT_ITEM_FILTER);
-
-        this.node = "/";
-
-        this.session = "${" + JCRTagConstants.KEY_SESSION + "}";
-
-        this.traverserDepth = 1;
-        this.traverserID = (String) JCRTagUtils
-                .lookup(JCRTagConstants.JNDI_DEFAULT_TRAVERSER);
-
-    }
-
-    /**
-     * Sets the traverser parameter. The paremeter is Traverser specific.
-     * 
-     * @param traverserParam
-     */
-    public void setTraverserParam(String traverserParam)
-    {
-        this.traverserParam = traverserParam;
-    }
-
-    /**
-     * Gets the traverser instance
-     * 
-     * @return @throws
-     *         JspException
-     */
-    private Object getTraverserParam() throws JspException
-    {
-        Object o = null;
-        try
-        {
-            o = ExpressionUtil.evalNotNull(TAG_NAME, "traverserParam",
-                    this.traverserParam, Object.class, this, this.pageContext);
-        } catch (NullAttributeException e)
-        {
-        }
-        return o;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.servlet.jsp.tagext.Tag#doEndTag()
-     */
-    public int doEndTag() throws JspException
-    {
-        try
-        {
-            // get a session
-            Session s = JCRTagUtils.getSession(TAG_NAME, this.session, this,
-                    this.pageContext);
-
-            // get the node
-            Node jcrNode = (Node) JCRTagUtils.getItem(TAG_NAME, this.node, this,
-                    this.pageContext, s);
-
-            // Configure traverse strategy
-            Traverser traverser = (Traverser) JCRTagUtils
-                    .getBean(this.traverserID);
-            traverser.setDepth(this.traverserDepth);
-            traverser.setNode(jcrNode);
-            traverser.setParameter(this.getTraverserParam());
-
-            // Filter
-            if (this.filterExp != null)
-            {
-                ItemFilter predicate = (ItemFilter) JCRTagUtils
-                        .getBean(this.filterID);
-                predicate.setExpression(this.filterExp);
-                traverser.setFilter(predicate);
-            }
-            // Traverse nodes
-            traverser.traverse();
-            // Retrieve Nodes
-            pageContext.getOut().write(
-                    String.valueOf(traverser.getNodes().size()));
-
-        } catch (PathNotFoundException e)
-        {
-            String msg = JCRTagUtils.getMessage(e);
-            log.warn(msg, e);
-            throw new JspTagException(msg);
-        } catch (RepositoryException e)
-        {
-            String msg = JCRTagUtils.getMessage(e);
-            log.error(msg, e);
-            throw new JspTagException(msg);
-        } catch (IOException e)
-        {
-            String msg = JCRTagUtils.getMessage(e);
-            log.error(msg, e);
-            throw new JspTagException(msg);
-        }
-        return EVAL_PAGE;
-    }
-
-}
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/IfPresentTag.java b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/IfPresentTag.java
deleted file mode 100644
index add40a6..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/IfPresentTag.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.taglib;
-
-import javax.jcr.Item;
-import javax.jcr.Node;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.JspTagException;
-import javax.servlet.jsp.jstl.core.ConditionalTagSupport;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.taglib.utils.JCRTagConstants;
-import org.apache.jackrabbit.taglib.utils.JCRTagUtils;
-
-/**
- * Conditional tag that evaluates the existence of the given node.
- * 
- * @author <a href="mailto:edgarpoce@gmail.com">Edgar Poce </a>
- */
-public class IfPresentTag extends ConditionalTagSupport
-{
-    /** Logger */
-    private static Log log = LogFactory.getLog(IfPresentTag.class);
-
-    /** Tag Name */
-    public static String TAG_NAME = "set";
-
-    /**
-     * Session
-     */
-    private String session;
-
-    /**
-     * expression or full path.
-     */
-    private String item;
-
-    /**
-     * Property.
-     */
-    private String property;
-
-    /**
-     * Expected evaluation result (true | false)
-     */
-    private boolean value = true;
-
-    /**
-     * Constructor
-     */
-    public IfPresentTag()
-    {
-        super();
-        this.init();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    protected boolean condition() throws JspTagException
-    {
-        boolean present = false;
-
-        try
-        {
-            Session jcrSession = JCRTagUtils.getSession(TAG_NAME, this.session,
-                    this, this.pageContext);
-            try
-            {
-                Item i = JCRTagUtils.getItem(TAG_NAME, this.item, this,
-                        this.pageContext, jcrSession);
-
-                // If the property is set
-                if (this.property != null)
-                {
-                    Node n = (Node) i;
-                    i = n.getProperty(this.property);
-                }
-
-                present = true;
-            } catch (PathNotFoundException e)
-            {
-                // Do nothing
-            }
-        } catch (RepositoryException e)
-        {
-            String msg = JCRTagUtils.getMessage(e);
-            log.error(msg, e);
-            throw new JspTagException(msg);
-        } catch (JspException e)
-        {
-            String msg = JCRTagUtils.getMessage(e);
-            log.error(msg, e);
-            throw new JspTagException(msg);
-        }
-
-        return (present == this.value);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    protected void init()
-    {
-        this.session = "${" + JCRTagConstants.KEY_SESSION + "}";
-        this.item = null;
-        this.value = true;
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public void release()
-    {
-        super.release();
-        this.init();
-    }
-
-    /**
-     * Sets the item
-     * 
-     * @param item
-     */
-    public void setItem(String item)
-    {
-        this.item = item;
-    }
-
-    /**
-     * Sets the session
-     * 
-     * @param session
-     */
-    public void setSession(String session)
-    {
-        this.session = session;
-    }
-
-    /**
-     * Sets the value
-     * 
-     * @param value
-     */
-    public void setValue(boolean value)
-    {
-        this.value = value;
-    }
-
-    /**
-     * Sets the property. This value can be set only when the item is a node.
-     * 
-     * @param property
-     */
-    public void setProperty(String property)
-    {
-        this.property = property;
-    }
-
-}
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/NodesTag.java b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/NodesTag.java
deleted file mode 100644
index 3463a34..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/NodesTag.java
+++ /dev/null
@@ -1,369 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.taglib;
-
-import java.util.Iterator;
-
-import javax.jcr.Node;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.JspTagException;
-import javax.servlet.jsp.jstl.core.LoopTagSupport;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.taglib.comparator.ItemComparator;
-import org.apache.jackrabbit.taglib.filter.ItemFilter;
-import org.apache.jackrabbit.taglib.traverser.Traverser;
-import org.apache.jackrabbit.taglib.utils.JCRTagConstants;
-import org.apache.jackrabbit.taglib.utils.JCRTagUtils;
-import org.apache.taglibs.standard.tag.common.core.NullAttributeException;
-import org.apache.taglibs.standard.tag.el.core.ExpressionUtil;
-
-/**
- * Iterates through the traversed nodes from the given node
- * 
- * @author <a href="mailto:edgarpoce@gmail.com">Edgar Poce </a>
- */
-public class NodesTag extends LoopTagSupport
-{
-    private static Log log = LogFactory.getLog(NodesTag.class);
-
-    public static String TAG_NAME = "nodes";
-
-    /**
-     * Name of the scoped variable where the jcr session is stored.
-     */
-    private String session;
-
-    /**
-     * JSTL expression referencing a node or or full path. <br>
-     * e.g. /mynode <br>
-     * or ${mynode}
-     */
-    private String node;
-
-    /**
-     * NodeComparator ID
-     */
-    private String sortID;
-
-    /**
-     * Expression used by the NodeComparator to evaluate nodes. <br>
-     * The evaluation must return a Comparable instance. <br>
-     */
-    private String sortExp;
-
-    /**
-     * Sort order <br>
-     * true / false
-     */
-    private boolean ascending = true;
-
-    /**
-     * Traverser ID.
-     */
-    private String traverserID;
-
-    /**
-     * Parameter that affects Traverser behaviour
-     */
-    private String traverserParam;
-
-    /**
-     * Traverse depth
-     */
-    private int traverserDepth = 0;
-
-    /**
-     * NodePredicate ID.
-     */
-    private String filterID;
-
-    /**
-     * Expression used by the NodePredicate to evaluate nodes. The evaluation
-     * must return a Boolean instance.
-     */
-    private String filterExp;
-
-    /**
-     * Children Nodes
-     */
-    private Iterator nodes;
-
-    /**
-     *  
-     */
-    public NodesTag()
-    {
-        super();
-        this.init();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    protected boolean hasNext() throws JspTagException
-    {
-        return nodes.hasNext();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    protected Object next() throws JspTagException
-    {
-        return nodes.next();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    protected void prepare() throws JspTagException
-    {
-        try
-        {
-            // get the node
-            Node jcrNode = this.getNode();
-
-            // Configure traverse strategy
-            Traverser traverser = (Traverser) JCRTagUtils
-                    .getBean(this.traverserID);
-            traverser.setDepth(this.traverserDepth);
-            traverser.setNode(jcrNode);
-            traverser.setParameter(this.getTraverserParam());
-
-            // Sort
-            if (this.sortExp != null)
-            {
-                ItemComparator order = (ItemComparator) JCRTagUtils
-                        .getBean(this.sortID);
-                order.setExpression(this.sortExp);
-                order.setAscending(this.ascending);
-                traverser.setOrder(order);
-            }
-
-            // Filter
-            if (this.filterExp != null)
-            {
-                ItemFilter predicate = (ItemFilter) JCRTagUtils
-                        .getBean(this.filterID);
-                predicate.setExpression(this.filterExp);
-                traverser.setFilter(predicate);
-            }
-
-            // Traverse nodes
-            traverser.traverse();
-
-            // Retrieve Nodes
-            this.nodes = traverser.getNodes().iterator();
-
-        } catch (PathNotFoundException e)
-        {
-            String msg = JCRTagUtils.getMessage(e);
-            log.warn(msg, e);
-            throw new JspTagException(msg);
-        } catch (RepositoryException e)
-        {
-            String msg = JCRTagUtils.getMessage(e);
-            log.error(msg, e);
-            throw new JspTagException(msg);
-        } catch (JspException e)
-        {
-            String msg = JCRTagUtils.getMessage(e);
-            log.error(msg, e);
-            throw new JspTagException(msg);
-        }
-    }
-
-    /**
-     * Sets the order ( ascending | descending )
-     * 
-     * @param ascending
-     */
-    public void setAscending(boolean ascending)
-    {
-        this.ascending = ascending;
-    }
-
-    /**
-     * Sets the filter expression
-     * 
-     * @param filterExp
-     */
-    public void setFilterExp(String filterExp)
-    {
-        this.filterExp = filterExp;
-    }
-
-    /**
-     * Sets the filter ID
-     * 
-     * @param filterID
-     */
-    public void setFilterID(String filterID)
-    {
-        this.filterID = filterID;
-    }
-
-    /**
-     * Sets the node
-     * 
-     * @param node
-     */
-    public void setNode(String node)
-    {
-        this.node = node;
-    }
-
-    /**
-     * Sets the session
-     * 
-     * @param session
-     */
-    public void setSession(String session)
-    {
-        this.session = session;
-    }
-
-    /**
-     * Sets the sort expression
-     * 
-     * @param sortExp
-     */
-    public void setSortExp(String sortExp)
-    {
-        this.sortExp = sortExp;
-    }
-
-    /**
-     * Sets the sort ID
-     * 
-     * @param sortJNDI
-     */
-    public void setSortID(String sortJNDI)
-    {
-        this.sortID = sortJNDI;
-    }
-
-    /**
-     * Sets the Traverser depth
-     * 
-     * @param traverseDepth
-     */
-    public void setTraverserDepth(int traverseDepth)
-    {
-        this.traverserDepth = traverseDepth;
-    }
-
-    /**
-     * Sets the Traverser ID
-     * 
-     * @param traverseID
-     */
-    public void setTraverserID(String traverseID)
-    {
-        this.traverserID = traverseID;
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public void release()
-    {
-        super.release();
-        this.init();
-    }
-
-    /**
-     * init
-     *  
-     */
-    private void init()
-    {
-        this.ascending = true;
-
-        this.filterExp = null;
-        this.filterID = (String) JCRTagUtils
-                .lookup(JCRTagConstants.JNDI_DEFAULT_ITEM_FILTER);
-
-        this.node = "/";
-        this.nodes = null;
-
-        this.session = "${" + JCRTagConstants.KEY_SESSION + "}";
-
-        this.sortExp = null;
-        this.sortID = (String) JCRTagUtils
-                .lookup(JCRTagConstants.JNDI_DEFAULT_ITEM_COMPARATOR);
-
-        this.traverserDepth = 1;
-        this.traverserID = (String) JCRTagUtils
-                .lookup(JCRTagConstants.JNDI_DEFAULT_TRAVERSER);
-
-    }
-
-    /**
-     * Sets the Traverer parameter
-     * 
-     * @param traverserExp
-     */
-    public void setTraverserParam(String traverserExp)
-    {
-        this.traverserParam = traverserExp;
-    }
-
-    /**
-     * Gets the traverser parameter evaluation
-     * 
-     * @return @throws
-     *         JspException
-     */
-    private Object getTraverserParam() throws JspException
-    {
-        Object o = null;
-        try
-        {
-            o = ExpressionUtil.evalNotNull(TAG_NAME, "traverserParam",
-                    this.traverserParam, Object.class, this, this.pageContext);
-        } catch (NullAttributeException e)
-        {
-        }
-        return o;
-    }
-
-    /**
-     * Retrieves the node
-     * 
-     * @return @throws
-     *         JspException
-     * @throws RepositoryException
-     * @throws PathNotFoundException
-     */
-    protected Node getNode() throws PathNotFoundException, JspException,
-            RepositoryException
-    {
-        // Get the session
-        Session jcrSession = JCRTagUtils.getSession(TAG_NAME, this.session,
-                this, this.pageContext);
-
-        return (Node) JCRTagUtils.getItem(TAG_NAME, this.node, this,
-                this.pageContext, jcrSession);
-    }
-
-}
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/OutTag.java b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/OutTag.java
deleted file mode 100644
index 68f353a..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/OutTag.java
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.taglib;
-
-import javax.jcr.Item;
-import javax.jcr.Node;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.tagext.TagSupport;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.taglib.template.TemplateEngine;
-import org.apache.jackrabbit.taglib.utils.JCRTagConstants;
-import org.apache.jackrabbit.taglib.utils.JCRTagUtils;
-
-/**
- * Displays Node and property values with the given template engine.
- * 
- * @author <a href="mailto:edgarpoce@gmail.com">Edgar Poce</a>
- */
-public class OutTag extends TagSupport
-{
-    private static Log log = LogFactory.getLog(OutTag.class);
-
-    /** Tag Name */
-    public static String TAG_NAME = "out";
-
-    /**
-     * Name of the scoped variable where the jcr session is stored. If not set
-     * then JCRTagConstants.KEY_SESSION is used.
-     */
-    private String session;
-
-    /**
-     * expression or full path.
-     */
-    private String item;
-
-    /**
-     * Property of the given node
-     */
-    private String property;
-
-    /**
-     * Template engine id
-     */
-    private String templateEngineID;
-
-    /**
-     * Template name
-     */
-    private String template;
-
-    /**
-     * Constructor
-     */
-    public OutTag()
-    {
-        super();
-        this.init();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public int doEndTag() throws JspException
-    {
-        try
-        {
-            // Get a session
-            Session s = JCRTagUtils.getSession(TAG_NAME, this.session, this,
-                    this.pageContext);
-
-            // Get the node
-            Item item = JCRTagUtils.getItem(TAG_NAME, this.item, this,
-                    this.pageContext, s);
-
-            // If the property is set
-            if (this.property != null)
-            {
-                Node n = (Node) item;
-                item = n.getProperty(this.property);
-            }
-
-            // Get the template Engine
-            TemplateEngine engine = (TemplateEngine) JCRTagUtils
-                    .getBean(this.templateEngineID);
-            engine.setTemplate(this.template);
-            engine.write(this.pageContext, item);
-
-        } catch (PathNotFoundException e)
-        {
-            String msg = JCRTagUtils.getMessage(e);
-            log.error(msg, e);
-            throw new JspException(msg, e);
-        } catch (RepositoryException e)
-        {
-            String msg = JCRTagUtils.getMessage(e);
-            log.error(msg, e);
-            throw new JspException(msg, e);
-        }
-        return EVAL_PAGE;
-    }
-
-    /**
-     * Sets the item
-     * 
-     * @param item
-     */
-    public void setItem(String item)
-    {
-        this.item = item;
-    }
-
-    /**
-     * Sets the session
-     * 
-     * @param session
-     */
-    public void setSession(String session)
-    {
-        this.session = session;
-    }
-
-    /**
-     * Init
-     *  
-     */
-    private void init()
-    {
-        this.session = "${" + JCRTagConstants.KEY_SESSION + "}";
-
-        this.item = null;
-
-        this.property = null;
-
-        this.templateEngineID = (String) JCRTagUtils
-                .lookup(JCRTagConstants.JNDI_DEFAULT_TEMPLATE_ENGINE);
-        this.template = null;
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public void release()
-    {
-        super.release();
-        this.init();
-    }
-
-    /**
-     * Sets the template
-     * 
-     * @param template
-     */
-    public void setTemplate(String template)
-    {
-        this.template = template;
-    }
-
-    /**
-     * Sets the template engine ID
-     * 
-     * @param templateEngine
-     */
-    public void setTemplateEngineID(String templateEngine)
-    {
-        this.templateEngineID = templateEngine;
-    }
-
-    /**
-     * Sets the property. This value can be set only when the item is a node.
-     * 
-     * @param property
-     */
-    public void setProperty(String property)
-    {
-        this.property = property;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/PropertiesTag.java b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/PropertiesTag.java
deleted file mode 100644
index bb64312..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/PropertiesTag.java
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.taglib;
-
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.jcr.Node;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.JspTagException;
-import javax.servlet.jsp.jstl.core.LoopTagSupport;
-
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.collections.IteratorUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.taglib.comparator.ItemComparator;
-import org.apache.jackrabbit.taglib.filter.ItemFilter;
-import org.apache.jackrabbit.taglib.utils.JCRTagConstants;
-import org.apache.jackrabbit.taglib.utils.JCRTagUtils;
-
-/**
- * Iterates over the properties of the given node.
- * 
- * @author <a href="mailto:edgarpoce@gmail.com">Edgar Poce </a>
- */
-public class PropertiesTag extends LoopTagSupport
-{
-    /** logger */
-    private static Log log = LogFactory.getLog(PropertiesTag.class);
-
-    /** tag name */
-    public static String TAG_NAME = "properties";
-
-    /**
-     * Name of the scoped variable where the jcr session is stored. If not set
-     * then JCRTagConstants.KEY_SESSION is used.
-     */
-    private String session;
-
-    /**
-     * JSTL expression or or full path. <br>
-     * e.g. /mynode <br>
-     * or ${mynode}
-     */
-    private String node;
-
-    /**
-     * JNDI address where the <code>ItemComparator</code> is bound. <br>
-     * e.g. myproperty
-     */
-    private String sortID;
-
-    /**
-     * Expression used by the <code>ItemComparator</code><br>
-     * The evaluation must return a Comparable instance. <br>
-     */
-    private String sortExp;
-
-    /**
-     * Sort order <br>
-     * true / false
-     */
-    private boolean ascending = true;
-
-    /**
-     * JNDI address where the NodePredicate is bound.
-     */
-    private String filterID;
-
-    /**
-     * Expression used by the NodePredicate to evaluate nodes. The evaluation
-     * must return a Boolean instance.
-     */
-    private String filterExp;
-
-    /**
-     * Properties
-     */
-    private Iterator properties;
-
-    /**
-     *  Constructor
-     */
-    public PropertiesTag()
-    {
-        super();
-        this.init();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    protected boolean hasNext() throws JspTagException
-    {
-        return this.properties.hasNext();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    protected Object next() throws JspTagException
-    {
-        return this.properties.next();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    protected void prepare() throws JspTagException
-    {
-        try
-        {
-            // get a session
-            Session jcrSession = JCRTagUtils.getSession(TAG_NAME, this.session, this,
-                    this.pageContext);
-
-            // get the node
-            Node node = (Node) JCRTagUtils.getItem(TAG_NAME, this.node, this,
-                    this.pageContext, jcrSession);
-
-            // Get the properties
-            List props = IteratorUtils.toList(node.getProperties());
-
-            // Sort
-            if (this.sortExp != null)
-            {
-                ItemComparator order = (ItemComparator) JCRTagUtils
-                        .getBean(this.sortID);
-                order.setExpression(this.sortExp);
-                order.setAscending(this.ascending);
-                Collections.sort(props, order);
-            }
-
-            // Filter
-            if (this.filterExp != null)
-            {
-                ItemFilter predicate = (ItemFilter) JCRTagUtils
-                        .getBean(this.filterID);
-                predicate.setExpression(this.filterExp);
-                CollectionUtils.filter(props, predicate);
-            }
-
-            // get iterator
-            this.properties = props.iterator();
-        } catch (PathNotFoundException e)
-        {
-            String msg = JCRTagUtils.getMessage(e);
-            log.error(msg, e);
-            throw new JspTagException(msg);
-        } catch (RepositoryException e)
-        {
-            String msg = JCRTagUtils.getMessage(e);
-            log.error(msg, e);
-            throw new JspTagException(msg);
-        } catch (JspException e)
-        {
-            String msg = JCRTagUtils.getMessage(e);
-            log.error(msg, e);
-            throw new JspTagException(msg);
-        }
-    }
-
-    /**
-     * Set the order ( ascending | descending)
-     * @param ascending
-     */
-    public void setAscending(boolean ascending)
-    {
-        this.ascending = ascending;
-    }
-
-    /**
-     * Sets the filter expression
-     * @param filterExp
-     */
-    public void setFilterExp(String filterExp)
-    {
-        this.filterExp = filterExp;
-    }
-
-    /**
-     * Sets the filter ID
-     * @param filterID
-     */
-    public void setFilterID(String filterID)
-    {
-        this.filterID = filterID;
-    }
-
-    /**
-     * Sets the node
-     * @param node
-     */
-    public void setNode(String node)
-    {
-        this.node = node;
-    }
-
-    /**
-     * Sets the session
-     * @param session
-     */
-    public void setSession(String session)
-    {
-        this.session = session;
-    }
-
-    /**
-     * Sets the sort expression
-     * @param sortExp
-     */
-    public void setSortExp(String sortExp)
-    {
-        this.sortExp = sortExp;
-    }
-
-    /**
-     * Sets the sortID
-     * @param sortID
-     */
-    public void setSortID(String sortID)
-    {
-        this.sortID = sortID;
-    }
-
-    /**
-     * init
-     *
-     */
-    private void init()
-    {
-        this.ascending = true;
-
-        this.filterExp = null;
-        this.filterID = (String) JCRTagUtils
-                .lookup(JCRTagConstants.JNDI_DEFAULT_ITEM_FILTER);
-
-        this.node = "/";
-
-        this.session = "${" + JCRTagConstants.KEY_SESSION + "}";
-
-        this.sortExp = null;
-        this.sortID = (String) JCRTagUtils
-                .lookup(JCRTagConstants.JNDI_DEFAULT_ITEM_COMPARATOR);
-
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public void release()
-    {
-        super.release();
-        this.init();
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/QueryTag.java b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/QueryTag.java
deleted file mode 100644
index abb89ce..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/QueryTag.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.taglib;
-
-import java.util.Iterator;
-
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.query.Query;
-import javax.jcr.query.QueryResult;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.JspTagException;
-import javax.servlet.jsp.jstl.core.LoopTagSupport;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.taglib.utils.JCRTagConstants;
-import org.apache.jackrabbit.taglib.utils.JCRTagUtils;
-import org.apache.taglibs.standard.tag.el.core.ExpressionUtil;
-
-/**
- * <p>
- * Iterates over the nodes returned by the given query.
- * </p>
- * 
- * @author <a href="mailto:edgarpoce@gmail.com">Edgar Poce </a>
- */
-public class QueryTag extends LoopTagSupport
-{
-    /** logger */
-    private static Log log = LogFactory.getLog(QueryTag.class);
-
-    /** tag name */
-    public static String TAG_NAME = "query";
-
-    /**
-     * Name of the scoped variable where the jcr session is stored. If not set
-     * then JCRTagConstants.KEY_SESSION is used.
-     */
-    private String session;
-
-    /**
-     * Query
-     */
-    private String stmt;
-
-    /**
-     * Query type ( SQL | XPATH )
-     */
-    private String lang;
-
-    /**
-     * Children Nodes
-     */
-    private Iterator nodes;
-
-    /**
-     * Constructor
-     */
-    public QueryTag()
-    {
-        super();
-        this.init();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    protected boolean hasNext() throws JspTagException
-    {
-        return nodes.hasNext();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    protected Object next() throws JspTagException
-    {
-        return nodes.next();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    protected void prepare() throws JspTagException
-    {
-        try
-        {
-            // get a session
-            Session s = JCRTagUtils.getSession(TAG_NAME, this.session, this,
-                    this.pageContext);
-
-            Query q = s.getWorkspace().getQueryManager().createQuery(
-                    this.getStmt(), this.getLang());
-
-            QueryResult qr = q.execute();
-
-            this.nodes = qr.getNodes();
-
-        } catch (RepositoryException e)
-        {
-            String msg = JCRTagUtils.getMessage(e);
-            log.error(msg, e);
-            throw new JspTagException(msg);
-        } catch (JspException e)
-        {
-            String msg = JCRTagUtils.getMessage(e);
-            log.warn(msg);
-            throw new JspTagException(msg);
-        }
-    }
-
-    /**
-     * Sets the session
-     * 
-     * @param session
-     */
-    public void setSession(String session)
-    {
-        this.session = session;
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public void release()
-    {
-        super.release();
-        this.init();
-    }
-
-    /**
-     * init
-     *  
-     */
-    private void init()
-    {
-        this.nodes = null;
-
-        this.stmt = null;
-
-        this.lang = "xpath";
-
-        this.session = "${" + JCRTagConstants.KEY_SESSION + "}";
-
-    }
-
-    /**
-     * @return the query
-     * @throws JspException
-     */
-    private String getStmt() throws JspException
-    {
-        return (String) ExpressionUtil.evalNotNull(TAG_NAME, "query",
-                this.stmt, String.class, this, this.pageContext);
-    }
-
-    /**
-     * Sets the query
-     * 
-     * @param query
-     */
-    public void setStmt(String query)
-    {
-        this.stmt = query;
-    }
-
-    /**
-     * Gets the query type
-     * 
-     * @return @throws
-     *         JspTagException
-     */
-    private String getLang() throws JspTagException
-    {
-        if (this.lang.equalsIgnoreCase("xpath"))
-        {
-            return Query.XPATH;
-        } else if (this.lang.equalsIgnoreCase("sql"))
-        {
-            return Query.SQL;
-        } else
-        {
-            throw new JspTagException("No such Query type. " + this.lang);
-        }
-    }
-
-    /**
-     * Sets the query type
-     * 
-     * @param type
-     */
-    public void setLang(String language)
-    {
-        this.lang = language;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/SessionTag.java b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/SessionTag.java
deleted file mode 100644
index 3b5b714..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/SessionTag.java
+++ /dev/null
@@ -1,298 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.taglib;
-
-import java.security.Principal;
-
-import javax.jcr.Repository;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.SimpleCredentials;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.PageContext;
-import javax.servlet.jsp.tagext.TagSupport;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.taglib.utils.JCRTagConstants;
-import org.apache.jackrabbit.taglib.utils.JCRTagUtils;
-
-/**
- * <p>
- * Creates a session stores it in a page scope variable.
- * </p>
- * 
- * @author <a href="mailto:edgarpoce@gmail.com">Edgar Poce </a>
- */
-public class SessionTag extends TagSupport
-{
-    /** logger */
-    private static Log log = LogFactory.getLog(SessionTag.class);
-
-    /**
-     * Session instance
-     */
-    private Session session;
-
-    /**
-     * Name of the jndi address of a repository other than the default.
-     */
-    private String repositoryJNDI = JCRTagConstants.JNDI_DEFAULT_REPOSITORY;;
-
-    /**
-     * Workspace name.
-     */
-    private String workspace;
-
-    /**
-     * Name of the target page context variable where the session will be
-     * stored.
-     */
-    private String var;
-
-    /**
-     * Name of the user for loggin in. <br>
-     * If no user is set then the request.getUserPrincipal is used. <br>
-     * If no user is logged in the default user is used (See config options).
-     */
-    private String user;
-
-    /**
-     * User's password. <br>
-     * Password used for creating a new JCR Session.
-     */
-    private String password;
-
-    /**
-     * previous session. (nested sessions)
-     */
-    private Object previousSession;
-
-    /**
-     * Constructor and initialization
-     */
-    public SessionTag()
-    {
-        super();
-        this.init();
-    }
-
-    /**
-     * Init
-     */
-    private void init()
-    {
-        if (log.isDebugEnabled())
-        {
-            log.debug("Cleaning state");
-        }
-        this.password = null;
-        this.repositoryJNDI = JCRTagConstants.JNDI_DEFAULT_REPOSITORY;
-        this.var = JCRTagConstants.KEY_SESSION;
-        this.user = null;
-        this.workspace = null;
-        this.session = null;
-    }
-
-    /**
-     * Sets the password
-     * 
-     * @param pwd
-     */
-    public void setPassword(String pwd)
-    {
-        this.password = pwd;
-    }
-
-    /**
-     * Sets the repository JNDI address
-     * 
-     * @param repository
-     */
-    public void setRepositoryJNDI(String repository)
-    {
-        this.repositoryJNDI = repository;
-    }
-
-    /**
-     * Sets the variable where the Session will be stored
-     * 
-     * @param target
-     */
-    public void setVar(String target)
-    {
-        this.var = target;
-    }
-
-    /**
-     * Sets the user
-     * 
-     * @param user
-     */
-    public void setUser(String user)
-    {
-        this.user = user;
-    }
-
-    /**
-     * Sets the workspace
-     * 
-     * @param workspace
-     */
-    public void setWorkspace(String workspace)
-    {
-        this.workspace = workspace;
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public int doEndTag() throws JspException
-    {
-        // Restore the previous session (if any)
-        if (this.previousSession != null)
-        {
-            pageContext.setAttribute(this.var, this.previousSession);
-            this.previousSession=null ;
-        } else {
-            this.pageContext.removeAttribute(this.var, PageContext.PAGE_SCOPE);
-        }
-
-        // Logout
-        session.logout();
-
-        if (log.isDebugEnabled())
-        {
-            log.debug("logged out");
-        }
-
-        // Return
-        return EVAL_PAGE;
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public int doStartTag() throws JspException
-    {
-        this.previousSession = pageContext.getAttribute(this.var);
-
-        // Get the repository
-        Repository repo = (Repository) JCRTagUtils.lookup(this.repositoryJNDI);
-
-        // Get the session
-        try
-        {
-            if (this.workspace == null)
-            {
-                session = repo.login(this.getCredentials());
-            } else
-            {
-                session = repo.login(this.getCredentials(), this.workspace);
-            }
-            if (log.isDebugEnabled())
-            {
-                log.debug("logged in");
-            }
-        } catch (RepositoryException e)
-        {
-            String msg = JCRTagUtils.getMessage(e);
-            log.error(msg, e);
-            throw new JspException(msg, e);
-        }
-
-        // Store the session in the page scope
-        pageContext.setAttribute(this.var, session);
-
-        // Return
-        return EVAL_BODY_INCLUDE;
-    }
-
-    /**
-     * <p>
-     * Create credentials
-     * </p>
-     * <ol>
-     * <li>Try to create credentials for the given user (user and pwd)</li>
-     * <li>Try to create credentials for the logged user (logged user and no
-     * pwd)</li>
-     * <li>Try to create credentials for anonymous user (JNDI config)</li>
-     * </ol>
-     * 
-     * @return @throws
-     *         JspException
-     */
-    private SimpleCredentials getCredentials() throws JspException
-    {
-        // Session credentials
-        SimpleCredentials cred = null;
-
-        // Try to create credentials for the given user
-        if (this.user != null)
-        {
-            if (this.password == null)
-            {
-                cred = new SimpleCredentials(this.user, "".toCharArray());
-            } else
-            {
-                cred = new SimpleCredentials(this.user, this.password
-                        .toCharArray());
-            }
-        }
-
-        // Try to create credentials for the logged user
-        if (cred == null)
-        {
-            Principal p = ((HttpServletRequest) this.pageContext.getRequest())
-                    .getUserPrincipal();
-            if (p != null)
-            {
-                cred = new SimpleCredentials(p.getName(), "".toCharArray());
-            }
-        }
-
-        // Try to create credentials for anonymous user
-        if (cred == null)
-        {
-            String usr = (String) JCRTagUtils
-                    .lookup(JCRTagConstants.JNDI_ANON_USER);
-
-            String pwd = (String) JCRTagUtils
-                    .lookup(JCRTagConstants.JNDI_ANON_PWD);
-
-            if (usr == null || pwd == null)
-            {
-                log.error("Configure user name and password "
-                        + "for anonymous user properly");
-            }
-            cred = new SimpleCredentials(usr, pwd.toCharArray());
-        }
-
-        return cred;
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public void release()
-    {
-        super.release();
-        this.init();
-    }
-
-}
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/SetTag.java b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/SetTag.java
deleted file mode 100644
index 457f565..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/SetTag.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.taglib;
-
-import javax.jcr.Item;
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.PageContext;
-import javax.servlet.jsp.tagext.TagSupport;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.taglib.utils.JCRTagConstants;
-import org.apache.jackrabbit.taglib.utils.JCRTagUtils;
-import org.apache.taglibs.standard.tag.common.core.Util;
-
-/**
- * Stores the given node or property in a scoped variable.
- * 
- * @author <a href="mailto:edgarpoce@gmail.com">Edgar Poce </a>
- */
-public class SetTag extends TagSupport
-{
-    /** logger */
-    private static Log log = LogFactory.getLog(SetTag.class);
-
-    /** Tag Name */
-    public static String TAG_NAME = "set";
-
-    /**
-     * Name of the scoped variable where the jcr session will be stored. If not set
-     * then JCRTagConstants.KEY_SESSION is used.
-     */
-    protected String session;
-
-    /**
-     * Item
-     */
-    protected String item;
-
-    /**
-     * Property
-     */
-    private String property;
-
-    /**
-     * Scoped variable where the jcr Item will be stored
-     */
-    protected String var;
-
-    /**
-     * Scope
-     */
-    protected int scope;
-
-    /**
-     * Constructor
-     */
-    public SetTag()
-    {
-        super();
-        this.init();
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public int doEndTag() throws JspException
-    {
-        return EVAL_PAGE;
-    }
-
-    /**
-     * Sets the item
-     * 
-     * @param item
-     */
-    public void setItem(String item)
-    {
-        this.item = item;
-    }
-
-    /**
-     * Sets the session
-     * 
-     * @param session
-     */
-    public void setSession(String session)
-    {
-        this.session = session;
-    }
-
-    /**
-     * init
-     */
-    private void init()
-    {
-        this.session = "${" + JCRTagConstants.KEY_SESSION + "}";
-        this.item = null;
-        this.scope = PageContext.PAGE_SCOPE;
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public void release()
-    {
-        super.release();
-        this.init();
-    }
-
-    /**
-     * Sets the variable name where the Item will be stored.
-     * 
-     * @param var
-     */
-    public void setVar(String var)
-    {
-        this.var = var;
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public int doStartTag() throws JspException
-    {
-        try
-        {
-            Item i = this.getItem();
-            // If the property is set
-            if (this.property != null)
-            {
-                Node n = (Node) i;
-                i = n.getProperty(this.property);
-            }
-            this.pageContext.setAttribute(this.var, i, this.scope);
-        } catch (RepositoryException e)
-        {
-            String msg = JCRTagUtils.getMessage(e);
-            log.error(msg, e);
-            throw new JspException(msg, e);
-        }
-        return SKIP_BODY;
-    }
-
-    /**
-     * Gets the item
-     * 
-     * @return @throws
-     *         JspException
-     * @throws RepositoryException
-     */
-    protected Item getItem() throws JspException, RepositoryException
-    {
-        // Get a session
-        Session session = JCRTagUtils.getSession(TAG_NAME, this.session, this,
-                this.pageContext);
-
-        // Get the item
-        Item item = JCRTagUtils.getItem(TAG_NAME, this.item, this,
-                this.pageContext, session);
-
-        return item;
-    }
-
-    /**
-     * Sets the property. This can be set only when the item is a node.
-     * 
-     * @param property
-     */
-    public void setProperty(String property)
-    {
-        this.property = property;
-    }
-
-    /**
-     * Sets the scope
-     * 
-     * @param scope
-     */
-    public void setScope(String scope)
-    {
-        this.scope = Util.getScope(scope);
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/SizeTag.java b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/SizeTag.java
deleted file mode 100644
index 1d43c02..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/SizeTag.java
+++ /dev/null
@@ -1,381 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.taglib;
-
-import java.io.IOException;
-import java.text.DecimalFormat;
-import java.text.NumberFormat;
-import java.util.Iterator;
-
-import javax.jcr.Node;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.JspTagException;
-import javax.servlet.jsp.tagext.TagSupport;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.taglib.filter.ItemFilter;
-import org.apache.jackrabbit.taglib.size.SizeCalculator;
-import org.apache.jackrabbit.taglib.traverser.Traverser;
-import org.apache.jackrabbit.taglib.utils.JCRTagConstants;
-import org.apache.jackrabbit.taglib.utils.JCRTagUtils;
-import org.apache.taglibs.standard.tag.common.core.NullAttributeException;
-import org.apache.taglibs.standard.tag.el.core.ExpressionUtil;
-
-/**
- * Estimates the cumulative size of the nodes returned by the given
- * <code>Traverser</code> and displays the value.
- * 
- * @author <a href="mailto:edgarpoce@gmail.com">Edgar Poce </a>
- */
-public class SizeTag extends TagSupport
-{
-    /** logger */
-    private static Log log = LogFactory.getLog(SizeTag.class);
-
-    /** tag name */
-    public static String TAG_NAME = "size";
-
-    /** number format */
-    private static NumberFormat NF;
-
-    // Default Format
-    static
-    {
-        NF = new DecimalFormat("###,##0.0");
-        NF.setMaximumFractionDigits(2);
-    }
-
-    /**
-     * Name of the scoped variable where the jcr session is stored. If not set
-     * then JCRTagConstants.KEY_SESSION is used.
-     */
-    private String session;
-
-    /**
-     * JSTL expression or full path. <br>
-     * e.g. /mynode <br>
-     * or ${mynode}
-     */
-    private String node;
-
-    /**
-     * Traverser ID.
-     */
-    private String traverserID;
-
-    /**
-     * Expression that affects Traverser behaviour
-     */
-    private String traverserParam;
-
-    /**
-     * Traverse depth
-     */
-    private int traverserDepth = 0;
-
-    /**
-     * NodePredicate ID.
-     */
-    private String filterID;
-
-    /**
-     * Expression used by the NodePredicate to evaluate nodes. The evaluation
-     * must return a Boolean instance.
-     */
-    private String filterExp;
-
-    /**
-     * Storage calculator ID.
-     */
-    private String calculatorID;
-
-    /**
-     * Unit.
-     */
-    private int unit;
-
-    /**
-     * Decimal format pattern
-     */
-    private String format;
-
-    /**
-     * Constructor
-     */
-    public SizeTag()
-    {
-        super();
-        this.init();
-    }
-
-    /**
-     * Sets the filter expression
-     * 
-     * @param filterExp
-     */
-    public void setFilterExp(String filterExp)
-    {
-        this.filterExp = filterExp;
-    }
-
-    /**
-     * Sets the filter ID
-     * 
-     * @param filterID
-     */
-    public void setFilterID(String filterID)
-    {
-        this.filterID = filterID;
-    }
-
-    /**
-     * Sets the node
-     * 
-     * @param node
-     */
-    public void setNode(String node)
-    {
-        this.node = node;
-    }
-
-    /**
-     * Sets the session
-     * 
-     * @param session
-     */
-    public void setSession(String session)
-    {
-        this.session = session;
-    }
-
-    /**
-     * Sets the traverser depth
-     * 
-     * @param traverseDepth
-     */
-    public void setTraverserDepth(int traverseDepth)
-    {
-        this.traverserDepth = traverseDepth;
-    }
-
-    /**
-     * Sets the traverser ID
-     * 
-     * @param traverseID
-     */
-    public void setTraverserID(String traverseID)
-    {
-        this.traverserID = traverseID;
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public void release()
-    {
-        super.release();
-        this.init();
-    }
-
-    /**
-     * init
-     *  
-     */
-    private void init()
-    {
-        this.filterExp = null;
-        this.filterID = (String) JCRTagUtils
-                .lookup(JCRTagConstants.JNDI_DEFAULT_ITEM_FILTER);
-
-        this.node = "/";
-
-        this.session = "${" + JCRTagConstants.KEY_SESSION + "}";
-
-        this.traverserDepth = 1;
-        this.traverserID = (String) JCRTagUtils
-                .lookup(JCRTagConstants.JNDI_DEFAULT_TRAVERSER);
-
-        this.calculatorID = (String) JCRTagUtils
-                .lookup(JCRTagConstants.JNDI_DEFAULT_SIZE_CALCULATOR);
-
-        this.unit = SizeCalculator.BYTES;
-
-        this.format = null;
-
-    }
-
-    /**
-     * Sets the traverser parameter
-     * 
-     * @param traverserExp
-     */
-    public void setTraverserParam(String traverserExp)
-    {
-        this.traverserParam = traverserExp;
-    }
-
-    /**
-     * gets the traverser parameter evaluation
-     * 
-     * @return @throws
-     *         JspException
-     */
-    private Object getTraverserParam() throws JspException
-    {
-        Object o = null;
-        try
-        {
-            o = ExpressionUtil.evalNotNull(TAG_NAME, "traverserParam",
-                    this.traverserParam, Object.class, this, this.pageContext);
-        } catch (NullAttributeException e)
-        {
-        }
-        return o;
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public int doEndTag() throws JspException
-    {
-        try
-        {
-            // get a session
-            Session s = JCRTagUtils.getSession(TAG_NAME, this.session, this,
-                    this.pageContext);
-
-            // get the node
-            Node jcrNode = (Node) JCRTagUtils.getItem(TAG_NAME, this.node,
-                    this, this.pageContext, s);
-
-            // Configure traverse strategy
-            Traverser traverser = (Traverser) JCRTagUtils
-                    .getBean(this.traverserID);
-            traverser.setDepth(this.traverserDepth);
-            traverser.setNode(jcrNode);
-            traverser.setParameter(this.getTraverserParam());
-
-            // Filter
-            if (this.filterExp != null)
-            {
-                ItemFilter predicate = (ItemFilter) JCRTagUtils
-                        .getBean(this.filterID);
-                predicate.setExpression(this.filterExp);
-                traverser.setFilter(predicate);
-            }
-            // Traverse nodes
-            traverser.traverse();
-
-            // Estimate size
-            SizeCalculator calculator = (SizeCalculator) JCRTagUtils
-                    .getBean(this.calculatorID);
-            calculator.setUnit(this.unit);
-
-            double size = 0;
-            Iterator iter = traverser.getNodes().iterator();
-            while (iter.hasNext())
-            {
-                Node n = (Node) iter.next();
-                size = size + calculator.getSize(n);
-            }
-
-            // Write the size
-            pageContext.getOut().write(this.getNumberFormat().format(size));
-
-        } catch (PathNotFoundException e)
-        {
-            String msg = JCRTagUtils.getMessage(e);
-            log.warn(msg, e);
-            throw new JspTagException(msg);
-        } catch (RepositoryException e)
-        {
-            String msg = JCRTagUtils.getMessage(e);
-            log.error(msg, e);
-            throw new JspTagException(msg);
-        } catch (IOException e)
-        {
-            String msg = JCRTagUtils.getMessage(e);
-            log.error(msg, e);
-            throw new JspTagException(msg);
-        }
-        return EVAL_PAGE;
-    }
-
-    /**
-     * Sets the unit ( bytes | kb | mb | gb )
-     * 
-     * @param unit
-     * @throws JspTagException
-     */
-    public void setUnit(String unit) throws JspTagException
-    {
-        if (unit.equalsIgnoreCase("bytes"))
-        {
-            this.unit = SizeCalculator.BYTES;
-        } else if (unit.equalsIgnoreCase("kb"))
-        {
-            this.unit = SizeCalculator.KILOBYTES;
-        } else if (unit.equalsIgnoreCase("mb"))
-        {
-            this.unit = SizeCalculator.MEGABYTES;
-        } else if (unit.equalsIgnoreCase("gb"))
-        {
-            this.unit = SizeCalculator.GIGABYTES;
-        } else
-        {
-            throw new JspTagException("No such unit. " + unit);
-        }
-    }
-
-    /**
-     * Sets the storage calculator ID
-     * 
-     * @param calculatorID
-     */
-    public void setCalculatorID(String calculatorID)
-    {
-        this.calculatorID = calculatorID;
-    }
-
-    /**
-     * Sets the format pattern
-     * 
-     * @param format
-     */
-    public void setFormat(String format)
-    {
-        this.format = format;
-    }
-
-    /**
-     * @return the number format
-     */
-    private NumberFormat getNumberFormat()
-    {
-        if (this.format == null)
-        {
-            return NF;
-        } else
-        {
-            return new DecimalFormat(this.format);
-        }
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/VersionsTag.java b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/VersionsTag.java
deleted file mode 100644
index 6e23286..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/VersionsTag.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.taglib;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-import javax.jcr.version.Version;
-import javax.servlet.jsp.JspException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * Iterates over the versions of the given node
- * 
- * @author <a href="mailto:edgarpoce@gmail.com">Edgar Poce </a>
- */
-public class VersionsTag extends NodesTag
-{
-    /** logger */
-    private static Log log = LogFactory.getLog(VersionsTag.class);
-
-    /** tag name */
-    public static String TAG_NAME = "versions";
-
-    /**
-     * Override superclass getNode.
-     * @return the baseVersion of the given Node
-     */
-    protected Node getNode() throws JspException, RepositoryException
-    {
-        Node node = super.getNode() ;
-        Version version = node.getBaseVersion() ;
-        return version ;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/bean/BeanFactory.java b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/bean/BeanFactory.java
deleted file mode 100644
index 656f308..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/bean/BeanFactory.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.taglib.bean;
-
-/**
- * BeanFactory implementation are responsible of creating bean instances.
- * 
- * @author <a href="mailto:edgarpoce@gmail.com">Edgar Poce </a>
- */
-public interface BeanFactory
-{
-    /** gets a bean for the given ID */
-    Object getBean(String id);
-
-}
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/bean/SimpleBeanFactory.java b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/bean/SimpleBeanFactory.java
deleted file mode 100644
index 448ea39..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/bean/SimpleBeanFactory.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.taglib.bean;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * Bean creation based on class name.<br>
- * It creates a new instance on each call.<br>
- * 
- * @author <a href="mailto:edgarpoce@gmail.com">Edgar Poce </a>
- */
-public class SimpleBeanFactory implements BeanFactory
-{
-    private static Log log = LogFactory.getLog(SimpleBeanFactory.class);
-
-    /**
-     * @param id
-     * @return a new instance of the given class name
-     */
-    public Object getBean(String id)
-    {
-        try
-        {
-            ClassLoader tcl = Thread.currentThread().getContextClassLoader();
-            Class beanClass = Class.forName(id);
-            Object bean = beanClass.newInstance();
-            return bean;
-        } catch (Exception e)
-        {
-            log.error("Unable to create an instance of " + id, e);
-            return null;
-        }
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/bean/SpringBeanFactory.java b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/bean/SpringBeanFactory.java
deleted file mode 100644
index b6d3fcf..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/bean/SpringBeanFactory.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.taglib.bean;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.springframework.beans.factory.xml.XmlBeanFactory;
-import org.springframework.core.io.ClassPathResource;
-
-/**
- * BeanFactory backed by the Spring Framework
- */
-public class SpringBeanFactory implements BeanFactory
-{
-    /** Logger */
-    private static Log log = LogFactory.getLog(SpringBeanFactory.class);
-
-    /** Bean registration */
-    private String config = "jcrtaglib-beans.xml";
-
-    /** Spring Factory instance */
-    org.springframework.beans.factory.BeanFactory factory;
-
-    /**
-     * 
-     */
-    public SpringBeanFactory()
-    {
-        super();
-    }
-
-    /**
-     * Init the factory
-     */
-    private void init()
-    {
-        ClassPathResource res = new ClassPathResource(this.config);
-        if (!res.exists())
-        {
-            log.error("Unable to init Spring bean Factory. Config file not found at "
-                    + res.getFilename() + ".");
-            return;
-        }
-        factory = new XmlBeanFactory(res);
-    }
-
-    /**
-     * @inheritDoc
-     */
-    public Object getBean(String id)
-    {
-        if (factory == null)
-        {
-            init();
-        }
-        return factory.getBean(id);
-    }
-
-    /**
-     * Sets the spring bean config file 
-     * @param config
-     */
-    public void setConfig(String config)
-    {
-        this.config = config;
-    }
-}
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/bean/package.html b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/bean/package.html
deleted file mode 100644
index 72dd784..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/bean/package.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<body>
-Contains BeanFactory interface and implementations.
-</body>
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/comparator/ItemComparator.java b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/comparator/ItemComparator.java
deleted file mode 100644
index c324229..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/comparator/ItemComparator.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.taglib.comparator;
-
-import java.util.Comparator;
-
-/**
- * An ItemComparator implementation is responsible of handling comparison of any
- * Node or Item based on a given expression.
- * 
- * @author <a href="mailto:edgarpoce@gmail.com">Edgar Poce </a>
- */
-public interface ItemComparator extends Comparator
-{
-    /**
-     * Expression to evaluate
-     */
-    public void setExpression(String exp);
-
-    /**
-     * Sort order
-     */
-    public void setAscending(boolean asc);
-
-}
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/comparator/JEXLItemComparator.java b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/comparator/JEXLItemComparator.java
deleted file mode 100644
index 3d7391d..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/comparator/JEXLItemComparator.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.taglib.comparator;
-
-import javax.jcr.Item;
-
-import org.apache.commons.jexl.Expression;
-import org.apache.commons.jexl.ExpressionFactory;
-import org.apache.commons.jexl.JexlContext;
-import org.apache.commons.jexl.JexlHelper;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * It compares any javax.jcr.Item based on a JEXL valid expression wich returns
- * a comparable instance. The javax.jcr.Item is added to the JEXLContext with
- * the name of "item". A valid JEXL expression would be "item.name".
- * 
- * @author <a href="mailto:edgarpoce@gmail.com">Edgar Poce </a>
- */
-public class JEXLItemComparator implements ItemComparator
-{
-    private static Log log = LogFactory.getLog(JEXLItemComparator.class);
-
-    /** Context */
-    JexlContext jc = JexlHelper.createContext();
-
-    /** Expression to evaluate */
-    private Expression expression;
-
-    /** Sort order */
-    private boolean ascending;
-
-    public int compare(Object o1, Object o2)
-    {
-        // Cast nodes
-        Item i1 = (Item) o1;
-        Item i2 = (Item) o2;
-        try
-        {
-            Comparable c1 = this.evaluate(i1);
-            Comparable c2 = this.evaluate(i2);
-            if (this.ascending)
-            {
-                return c1.compareTo(c2);
-            } else
-            {
-                return c2.compareTo(c1);
-            }
-        } catch (Exception e)
-        {
-            log.error("Unable to evaluate expression. " + e.getMessage(), e);
-            return 0;
-        }
-    }
-
-    /**
-     * Expression to evaluate
-     */
-    public void setExpression(String exp)
-    {
-        try
-        {
-            this.expression = ExpressionFactory.createExpression(exp);
-        } catch (Exception e)
-        {
-            log.error("Unable to create expression from String " + exp + ". "
-                    + e.getMessage(), e);
-        }
-    }
-
-    /**
-     * Sort order
-     */
-    public void setAscending(boolean asc)
-    {
-        this.ascending = asc;
-    }
-
-    /**
-     * Evaluate the expression for the given node
-     * 
-     * @param node
-     * @return @throws
-     *         Exception
-     */
-    private Comparable evaluate(Item item) throws Exception
-    {
-        // Clear the context
-        jc.getVars().clear();
-
-        // Add nodes to the context
-        jc.getVars().put("item", item);
-
-        // Evaluate
-        return (Comparable) expression.evaluate(jc);
-    }
-
-}
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/comparator/package.html b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/comparator/package.html
deleted file mode 100644
index aa8a2d9..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/comparator/package.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<body>
-Contains ItemComparator interface and implementations.
-</body>
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/filter/ItemFilter.java b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/filter/ItemFilter.java
deleted file mode 100644
index 070f2c6..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/filter/ItemFilter.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.taglib.filter;
-
-import org.apache.commons.collections.Predicate;
-
-/**
- * An ItemPredicate implementation is responsible of evaluating whether the
- * given javax.jcr.Item should be included based on the given expression
- * 
- * @author <a href="mailto:edgarpoce@gmail.com">Edgar Poce </a>
- */
-public interface ItemFilter extends Predicate
-{
-
-    /**
-     * Filter expression
-     * 
-     * @param exp
-     */
-    void setExpression(String exp);
-
-}
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/filter/JEXLItemFilter.java b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/filter/JEXLItemFilter.java
deleted file mode 100644
index 638c7c1..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/filter/JEXLItemFilter.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.taglib.filter;
-
-import javax.jcr.Item;
-
-import org.apache.commons.jexl.Expression;
-import org.apache.commons.jexl.ExpressionFactory;
-import org.apache.commons.jexl.JexlContext;
-import org.apache.commons.jexl.JexlHelper;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * It evaluates any javax.jcr.Item based on a JEXL valid expression which
- * returns a Boolean instance. The javax.jcr.Item is added to the JEXLContext
- * with the name of "item". A valid JEXL expression would be
- * "item.name.equals('MyNodeName')".
- * 
- * @author <a href="mailto:edgarpoce@gmail.com">Edgar Poce </a>
- */
-public class JEXLItemFilter implements ItemFilter
-{
-    private static Log log = LogFactory.getLog(JEXLItemFilter.class);
-
-    /** Contex */
-    JexlContext jc = JexlHelper.createContext();
-
-    private Expression expression;
-
-    /**
-     * Set the expression to evaluate
-     */
-    public void setExpression(String exp)
-    {
-        try
-        {
-            this.expression = ExpressionFactory.createExpression(exp);
-        } catch (Exception e)
-        {
-            log.error("Unable to create expression. " + e.getMessage(), e);
-        }
-    }
-
-    /**
-     * Evaluate a node. <br>
-     */
-    public boolean evaluate(Object o)
-    {
-        // Evaluate
-        try
-        {
-            Item item = (Item) o;
-
-            // Clear the context
-            jc.getVars().clear();
-
-            // Add nodes to the context
-            jc.getVars().put("item", item);
-
-            // Evaluate
-            return ((Boolean) this.expression.evaluate(jc)).booleanValue();
-        } catch (Exception e)
-        {
-            if (log.isDebugEnabled())
-            {
-                log.debug("Unable to evalute " + e.getMessage(), e);
-            }
-            return false;
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/filter/package.html b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/filter/package.html
deleted file mode 100644
index 0cc38a8..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/filter/package.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<body>
-Contains ItemFilter interface and implementations.
-</body>
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/package.html b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/package.html
deleted file mode 100644
index 9badd38..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/package.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<body>
-Contains the tag classes that provide access to the JCR implementation.
-</body>
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/size/AbstractSizeCalculator.java b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/size/AbstractSizeCalculator.java
deleted file mode 100644
index e62cd75..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/size/AbstractSizeCalculator.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.taglib.size;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * Superclass of SizeCalculator 
- * 
- * @author <a href="mailto:edgarpoce@gmail.com">Edgar Poce</a>
- */
-public abstract class AbstractSizeCalculator implements SizeCalculator
-{
-    /** Logger */
-    private static Log log = LogFactory.getLog(AbstractSizeCalculator.class);
-
-    /** Unit */
-    protected int unit = SizeCalculator.BITS;
-
-    /**
-     * Unit conversion
-     * @param bits
-     * @param unit
-     * @return
-     */
-    protected double convert(long size, int unit) {
-        switch (unit)
-        {
-            case SizeCalculator.BITS:
-                return size ;
-            case SizeCalculator.BYTES:
-                return size / 8d ;
-            case SizeCalculator.KILOBYTES:
-                return size / 8192d ;
-            case SizeCalculator.MEGABYTES:
-                return size / 8388608d ;
-            case SizeCalculator.GIGABYTES:
-                return size / 8589934592d ;
-            default:
-                String msg = "No such unit." + unit ;
-                log.error(msg);
-            	throw new IllegalArgumentException(msg) ;
-        }
-    }
-
-    /** @inheritDoc */
-    public void setUnit(int unit)
-    {
-        this.unit = unit;
-    }
-    
-}
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/size/SimpleSizeCalculator.java b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/size/SimpleSizeCalculator.java
deleted file mode 100644
index d558580..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/size/SimpleSizeCalculator.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.taglib.size;
-
-import javax.jcr.Node;
-import javax.jcr.Property;
-import javax.jcr.PropertyIterator;
-import javax.jcr.PropertyType;
-import javax.jcr.RepositoryException;
-import javax.jcr.ValueFormatException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * SizeCalculator for testing purposes.
- * 
- * @author <a href="mailto:edgarpoce@gmail.com">Edgar Poce </a>
- */
-public class SimpleSizeCalculator extends AbstractSizeCalculator
-{
-    /** Logger */
-    private static Log log = LogFactory.getLog(SimpleSizeCalculator.class);
-
-    /**
-     * Constructor
-     */
-    public SimpleSizeCalculator()
-    {
-        super();
-    }
-    
-    /** @inheritDoc */
-    public double getSize(Node node)
-    {
-        double size = 0;
-        try
-        {
-            PropertyIterator iter = node.getProperties();
-            while (iter.hasNext())
-            {
-                Property prop = iter.nextProperty();
-                size = size + this.getSize(prop);
-            }
-        } catch (RepositoryException e)
-        {
-            log.error("Unable to get properties from node. " + e.getMessage(),
-                    e);
-        }
-        return size;
-    }
-
-    /** @inheritDoc */
-    public double getSize(Property property)
-    {
-        long bits = 0;
-        try
-        {
-            switch (property.getType())
-            {
-            case PropertyType.BINARY:
-                bits = this.getBinarySize(property) ;
-                break;
-            case PropertyType.BOOLEAN:
-                if (property.getDefinition().isMultiple()) {
-                    bits = property.getValues().length * 1 ;
-                } else {
-                    bits = 1 ;
-                }
-                break;
-            case PropertyType.DOUBLE:
-            case PropertyType.DATE:
-            case PropertyType.LONG:
-                if (property.getDefinition().isMultiple()) {
-                    bits = property.getValues().length * 64 ;
-                } else {
-                    bits = 64 ;
-                }
-                break;
-            default:
-                bits = this.getStringSize(property);
-                break;
-            }
-        } catch (RepositoryException e)
-        {
-            log.error("Unable to get values from property. " + e.getMessage(),
-                    e);
-        }
-        return this.convert(bits, this.unit);
-    }
-
-    /**
-     * @param property
-     * @return the size in bits of a binary property
-     * @throws ValueFormatException
-     * @throws RepositoryException
-     */
-    private long getBinarySize(Property prop) throws ValueFormatException, RepositoryException {
-        if (prop.getDefinition().isMultiple()) {
-            long[] sizes = prop.getLengths() ;
-            long size = 0 ;
-            for (int i = 0; i < sizes.length; i++)
-            {
-                size = size + sizes[i];
-            }
-            return size * 8 ;
-        } else {
-            return prop.getLength() * 8;
-        }
-    }
-    
-    /**
-     * @param prop
-     * @return size in bits
-     * @throws ValueFormatException
-     * @throws RepositoryException
-     */
-    private long getStringSize(Property prop) throws ValueFormatException, RepositoryException {
-        if (prop.getDefinition().isMultiple()) {
-            long[] sizes = prop.getLengths() ;
-            long size = 0 ;
-            for (int i = 0; i < sizes.length; i++)
-            {
-                size = size + sizes[i] * 16 ;
-            }
-            return size;
-        } else {
-            return prop.getLength() * 16 ;
-        }
-    }
-    
-}
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/size/SizeCalculator.java b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/size/SizeCalculator.java
deleted file mode 100644
index 5bfd048..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/size/SizeCalculator.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.taglib.size;
-
-import javax.jcr.Node;
-import javax.jcr.Property;
-
-/**
- * StorageCalculator implementations are responsible of calculating the size
- * that uses a given Node or Property.
- * 
- * @author <a href="mailto:edgarpoce@gmail.com">Edgar Poce </a>
- */
-public interface SizeCalculator
-{
-    int BITS = 0;
-    
-    int BYTES = 1;
-
-    int KILOBYTES = 2;
-
-    int MEGABYTES = 3;
-
-    int GIGABYTES = 4;
-
-    /**
-     * Sets the unit
-     * 
-     * @param unit
-     */
-    void setUnit(int unit);
-
-    /**
-     * Calculate the size of the given node.
-     * 
-     * @param node
-     * @return size
-     */
-    double getSize(Node node);
-
-    /**
-     * Calculate the size of the given property.
-     * 
-     * @param property
-     * @return size
-     */
-    double getSize(Property property);
-
-}
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/size/package.html b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/size/package.html
deleted file mode 100644
index 23b556d..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/size/package.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<body>
-Contains SizeCalculator interface and implementations.
-</body>
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/template/SimpleTemplateEngine.java b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/template/SimpleTemplateEngine.java
deleted file mode 100644
index 506f31e..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/template/SimpleTemplateEngine.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.taglib.template;
-
-import javax.jcr.Item;
-import javax.jcr.Node;
-import javax.jcr.Property;
-import javax.servlet.jsp.PageContext;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * Template for testing purposes.
- * 
- * @author <a href="mailto:edgarpoce@gmail.com">Edgar Poce </a>
- */
-public class SimpleTemplateEngine implements TemplateEngine
-{
-    private static Log log = LogFactory.getLog(SimpleTemplateEngine.class);
-
-    public void setTemplate(String id)
-    {
-        // Nothing to do
-    }
-
-    public void write(PageContext ctx, Item item)
-    {
-        try
-        {
-            if (item instanceof Node)
-            {
-                ctx.getOut().write(item.getName());
-            } else if (item instanceof Property)
-            {
-                Property prop = (Property) item;
-                if (prop.getDefinition().isMultiple())
-                {
-                    ctx.getOut().write("Multiple: " + prop.getValues().length); 
-                } else {
-                    String value = prop.getValue().getString();
-                    ctx.getOut().write(value);
-                }
-            } else
-            {
-                throw new IllegalArgumentException("Unsupported item. "
-                        + item.getClass().getName());
-            }
-        } catch (Exception e)
-        {
-            log.error(e);
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/template/TemplateEngine.java b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/template/TemplateEngine.java
deleted file mode 100644
index b797886..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/template/TemplateEngine.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.taglib.template;
-
-import javax.jcr.Item;
-import javax.servlet.jsp.PageContext;
-
-/**
- * TemplateEngine implementations write nodes and properties with the given
- * template.
- * 
- * @author <a href="mailto:edgarpoce@gmail.com">Edgar Poce </a>
- */
-public interface TemplateEngine
-{
-    /**
-     * Template ID
-     * 
-     * @param id
-     */
-    void setTemplate(String id);
-
-    /**
-     * Write the given node
-     * 
-     * @param page
-     *            context
-     * @param item
-     */
-    void write(PageContext ctx, Item item);
-
-}
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/template/package.html b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/template/package.html
deleted file mode 100644
index ae6d6fc..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/template/package.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<body>
-Contains TemplateEngine interface and implementations.
-Implementations for Velocity and other template engines
-will be added.
-</body>
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/AbstractTraverser.java b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/AbstractTraverser.java
deleted file mode 100644
index c13e2d0..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/AbstractTraverser.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.taglib.traverser;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-
-import org.apache.commons.collections.IteratorUtils;
-import org.apache.commons.collections.Predicate;
-
-/**
- * Abstract Traverser
- * 
- * @author <a href="mailto:edgarpoce@gmail.com">Edgar Poce </a>
- */
-public abstract class AbstractTraverser implements Traverser
-{
-    /**
-     * Traverse root
-     */
-    protected Node node;
-
-    /**
-     * Container of traversed nodes
-     */
-    protected Collection nodes = new ArrayList();
-
-    /**
-     * Max depth from the relative root node
-     */
-    protected int depth = 0;
-
-    /**
-     * Per Children order
-     */
-    protected Comparator order;
-
-    /**
-     * Predicate (filter)
-     */
-    protected Predicate filter;
-
-    /**
-     * Parameter that affects the <code>Traverser<code> behaviour
-     */
-    protected Object parameter;
-
-    /**
-     * Constructor
-     */
-    public AbstractTraverser()
-    {
-        super();
-    }
-
-    /**
-     * @return travesed nodes
-     */
-    public Collection getNodes()
-    {
-        return nodes ;
-    }
-
-    /**
-     * Visit node
-     * 
-     * @param node
-     */
-    protected void visit(Node node)
-    {
-        if (this.filter== null || this.filter.evaluate(node))
-        {
-            this.nodes.add(node);
-        } 
-    }
-
-    public int getDepth()
-    {
-        return depth;
-    }
-
-    public void setDepth(int depth)
-    {
-        this.depth = depth;
-    }
-
-    public Node getNode()
-    {
-        return node;
-    }
-
-    public void setNode(Node node)
-    {
-        this.node = node;
-    }
-
-    public void setFilter(Predicate predicate)
-    {
-        this.filter = predicate;
-    }
-
-    public void setOrder(Comparator comparator)
-    {
-        this.order = comparator;
-    }
-
-    /**
-     * Get the children for the given node. <br>
-     * Filtered and sorted if necesary.
-     * 
-     * @param node
-     * @return @throws
-     *         DepthExceededException
-     */
-    protected Iterator getChildren(Node node) throws DepthExceededException,
-            RepositoryException
-    {
-        // Check depth
-        if (node.getDepth() - this.node.getDepth() >= this.depth )
-            throw new DepthExceededException();
-
-        Iterator children = node.getNodes();
-
-        // Sort
-        if (this.order != null)
-        {
-            List l = IteratorUtils.toList(children);
-            Collections.sort(l, this.order);
-            children = l.iterator();
-        }
-
-        return children;
-    }
-
-    public void traverse() throws RepositoryException
-    {
-        this.nodes.clear();
-        this.internalTraverse();
-    }
-
-    protected abstract void internalTraverse() throws RepositoryException;
-
-    public void setParameter(Object parameter)
-    {
-        this.parameter = parameter;
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/AncestorsTraverser.java b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/AncestorsTraverser.java
deleted file mode 100644
index 6d7316c..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/AncestorsTraverser.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.taglib.traverser;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-
-/**
- * This Traverser collect the parent nodes.<br>
- * It may be useful for building the breadcrumb.
- * 
- * @author <a href="mailto:edgarpoce@gmail.com">Edgar Poce </a>
- */
-public class AncestorsTraverser extends AbstractTraverser
-{
-    /**
-     * Visit the ancestors recursively
-     * 
-     * @param myNode
-     * @throws RepositoryException
-     */
-    private void ancestor(Node myNode) throws RepositoryException
-    {
-        if (myNode.getDepth() > this.node.getDepth() - this.depth
-                && myNode.getDepth() > 0)
-        {
-            this.ancestor(myNode.getParent());
-        }
-        this.nodes.add(myNode);
-    }
-
-    protected void internalTraverse() throws RepositoryException
-    {
-        this.ancestor(super.node);
-    }
-
-    /** Parameters are ignored */
-    public void setParameter(Object parameter)
-    {
-        // Any parameter is ignored.
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/DepthExceededException.java b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/DepthExceededException.java
deleted file mode 100644
index 8d06276..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/DepthExceededException.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.taglib.traverser;
-
-/**
- * Depth exceeded
- * 
- * @author <a href="mailto:edgarpoce@gmail.com">Edgar Poce</a>
- */
-class DepthExceededException extends Exception 
-{
-
-    /**
-     * Comment for <code>serialVersionUID</code>
-     */
-    private static final long serialVersionUID = 3834024770894443576L;
-    
-    /**
-     * 
-     */
-    public DepthExceededException()
-    {
-        super();
-    }
-    /**
-     * @param message
-     */
-    public DepthExceededException(String message)
-    {
-        super(message);
-    }
-    /**
-     * @param message
-     * @param cause
-     */
-    public DepthExceededException(String message, Throwable cause)
-    {
-        super(message, cause);
-    }
-    /**
-     * @param cause
-     */
-    public DepthExceededException(Throwable cause)
-    {
-        super(cause);
-    }
-}
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/ExpandedNodeTraverser.java b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/ExpandedNodeTraverser.java
deleted file mode 100644
index 2c31a2a..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/ExpandedNodeTraverser.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.taglib.traverser;
-
-import java.util.Iterator;
-
-import javax.jcr.AccessDeniedException;
-import javax.jcr.ItemNotFoundException;
-import javax.jcr.Node;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.RepositoryException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * <p>
- * ExpandedNodeTraverser collects only the children of the ancestors in the path from
- * the root node to the target node.
- * </p>
- * <p>
- * The parameter must be a Node instance or a String with the path to the target
- * Node.
- * </p>
- * 
- * @author <a href="mailto:edgarpoce@gmail.com">Edgar Poce </a>
- */
-public class ExpandedNodeTraverser extends AbstractTraverser
-{
-    private static Log log = LogFactory.getLog(ExpandedNodeTraverser.class);
-
-    /**
-     * Preorder strategy recusively only for parent Nodes.
-     * 
-     * @param node
-     * @throws RepositoryException
-     */
-    private void preorder(Node myNode) throws RepositoryException
-    {
-        visit(myNode);
-
-        if (!this.isAncestor(myNode) && !this.getTarget().isSame(myNode))
-        {
-            return;
-        }
-
-        try
-        {
-            Iterator iter = this.getChildren(myNode);
-            while (iter.hasNext())
-            {
-                this.preorder((Node) iter.next());
-            }
-        } catch (DepthExceededException e)
-        {
-            log.error("Depth should never be exceeded in this traverser.", e);
-        }
-    }
-
-    /**
-     *  
-     */
-    protected void internalTraverse() throws RepositoryException
-    {
-        // Override depth.
-        this.depth = Integer.MAX_VALUE;
-        this.preorder(node);
-    }
-
-    /**
-     * Validates the parameter. <br>
-     * It only accepts the target Node. <br>
-     * The path (String) or a Node instance;
-     * 
-     * @throws IllegalArgumentException
-     */
-    public void setParameter(Object param)
-    {
-        if (param == null
-                || (!(param instanceof String) && !(param instanceof Node)))
-        {
-            throw new IllegalArgumentException(
-                    "The parameter is not a Node. Class: " + param);
-        }
-
-        if (param instanceof String)
-        {
-            try
-            {
-                Node node = this.node.getSession().getRootNode().getNode(
-                        (String) param);
-                this.parameter = node;
-            } catch (PathNotFoundException e)
-            {
-                throw new IllegalArgumentException("No node in " + parameter);
-            } catch (RepositoryException e)
-            {
-                log.error("Unable to get node" + e.getMessage(), e);
-            }
-        } else
-        {
-            this.parameter = param;
-        }
-
-    }
-
-    private Node getTarget()
-    {
-        return (Node) this.parameter;
-    }
-
-    private boolean isAncestor(Node ancestor) throws ItemNotFoundException,
-            AccessDeniedException, RepositoryException
-    {
-        if (ancestor.getDepth() >= this.getTarget().getDepth())
-        {
-            return false;
-        }
-        return this.getTarget().getAncestor(ancestor.getDepth()).isSame(
-                ancestor);
-    }
-
-}
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/ExpandedNodesTraverser.java b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/ExpandedNodesTraverser.java
deleted file mode 100644
index 36e63a7..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/ExpandedNodesTraverser.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.taglib.traverser;
-
-import java.util.Collection;
-import java.util.Iterator;
-
-import javax.jcr.AccessDeniedException;
-import javax.jcr.ItemNotFoundException;
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-
-import org.apache.commons.collections.IteratorUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * This Traverser collects the children of the ancestors in the path from the
- * root node to any of the target nodes. <br>
- * The parameter must be a Collection or Iterator containing the target nodes.
- * 
- * @author <a href="mailto:edgarpoce@gmail.com">Edgar Poce </a>
- */
-public class ExpandedNodesTraverser extends AbstractTraverser
-{
-
-    private static Log log = LogFactory.getLog(ExpandedNodesTraverser.class);
-
-    /**
-     * Preorder strategy recusively only for parent Nodes.
-     * 
-     * @param node
-     * @throws RepositoryException
-     */
-    private void preorder(Node myNode) throws RepositoryException
-    {
-        visit(myNode);
-
-        
-        if (!this.isAncestor(myNode) && !this.getTarget().contains(myNode))
-        {
-            return;
-        }
-
-        try
-        {
-            Iterator iter = this.getChildren(myNode);
-            while (iter.hasNext())
-            {
-                this.preorder((Node) iter.next());
-            }
-        } catch (DepthExceededException e)
-        {
-            log.error("Depth should never be exceeded in this traverser.", e);
-        }
-    }
-
-    /**
-     * @inheritDoc
-     */
-    protected void internalTraverse() throws RepositoryException
-    {
-        // Override depth.
-        this.depth = Integer.MAX_VALUE;
-        this.preorder(node);
-    }
-
-    /**
-     * Sets the parameter. <br>
-     * It only accepts Collection or Iterator instances.<br>
-     * The path (String) or a Node instance;
-     * 
-     * @throws IllegalArgumentException
-     */
-    public void setParameter(Object param)
-    {
-
-        if (param == null
-                || (!(param instanceof Collection) && !(param instanceof Iterator)))
-        {
-            throw new IllegalArgumentException(
-                    "The parameter is not a Collection or Iterator. " + param);
-        }
-        if (param instanceof Collection)
-        {
-            this.parameter = (Collection) param;
-        } else if (param instanceof Iterator)
-        {
-            this.parameter = IteratorUtils.toList((Iterator) param);
-        }
-    }
-
-    /**
-     * Checks if the node is ancestor of any af the target nodes
-     * 
-     * @param ancestor
-     * @return @throws
-     *         RepositoryException
-     * @throws AccessDeniedException
-     * @throws ItemNotFoundException
-     */
-    private boolean isAncestor(Node ancestor) throws ItemNotFoundException,
-            AccessDeniedException, RepositoryException
-    {
-        Iterator iter = this.getTarget().iterator();
-        while (iter.hasNext())
-        {
-            Node target = (Node) iter.next();
-            if (this.isAncestor(ancestor, target))
-            {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Checks if the node is ancestor of the given target node.
-     * 
-     * @param ancestor
-     * @param target
-     * @return @throws
-     *         RepositoryException
-     * @throws AccessDeniedException
-     * @throws ItemNotFoundException
-     */
-    private boolean isAncestor(Node ancestor, Node target)
-            throws ItemNotFoundException, AccessDeniedException,
-            RepositoryException
-    {
-        if (ancestor.getDepth() >= target.getDepth())
-        {
-            return false;
-        }
-        return target.getAncestor(ancestor.getDepth()).isSame(ancestor);
-    }
-
-    /**
-     * Get the collection of target nodes.
-     * 
-     * @return
-     */
-    private Collection getTarget()
-    {
-        return (Collection) this.parameter;
-    }
-
-}
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/LevelByLevelTraverser.java b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/LevelByLevelTraverser.java
deleted file mode 100644
index e01a043..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/LevelByLevelTraverser.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.taglib.traverser;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.jcr.RepositoryException;
-
-/**
- * Level by level traverse strategy 
- * 
- * @author <a href="mailto:edgarpoce@gmail.com">Edgar Poce </a>
- */
-public class LevelByLevelTraverser extends AbstractTraverser
-{
-    private Map levels = new HashMap() ;
-    
-
-    /**
-     * Traverse the node children tree
-     * 
-     * @throws RepositoryException
-     */
-    protected void internalTraverse() throws RepositoryException
-    {
-        throw new UnsupportedOperationException();
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/PostorderTraverser.java b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/PostorderTraverser.java
deleted file mode 100644
index cf3ec9f..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/PostorderTraverser.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.taglib.traverser;
-
-import java.util.Iterator;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.collections.IteratorUtils;
-
-/**
- * Postorder traverse strategy
- * 
- * @author <a href="mailto:edgarpoce@gmail.com">Edgar Poce </a>
- */
-public class PostorderTraverser extends AbstractTraverser
-{
-
-    /**
-     * Postorder traversal
-     * 
-     * @param node
-     * @throws RepositoryException
-     */
-    private void postorder(Node node) throws RepositoryException
-    {
-        try
-        {
-            Object[] nodes = IteratorUtils.toArray(this.getChildren(node)) ;
-            CollectionUtils.reverseArray(nodes);
-            Iterator iter = IteratorUtils.arrayIterator(nodes);
-            while (iter.hasNext())
-            {
-                this.postorder((Node) iter.next());
-            }
-        } catch (DepthExceededException e)
-        {
-            // Do nothing
-        }
-        visit(node);
-    }
-
-    /**
-     * Traverse the node children tree
-     * 
-     * @throws RepositoryException
-     */
-    protected void internalTraverse() throws RepositoryException
-    {
-        this.postorder(this.node);
-    }
-}
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/PreorderTraverser.java b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/PreorderTraverser.java
deleted file mode 100644
index bf41921..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/PreorderTraverser.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.taglib.traverser;
-
-import java.util.Iterator;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-
-/**
- * Preorder traverse strategy 
- * 
- * @author <a href="mailto:edgarpoce@gmail.com">Edgar Poce</a>
- */
-public class PreorderTraverser extends AbstractTraverser
-{
-    
-    /**
-     * Preorder traversal
-     * 
-     * @param node
-     * @throws RepositoryException
-     */
-    private void preorder(Node node) throws RepositoryException
-    {
-        visit(node);
-        try
-        {
-            Iterator iter = this.getChildren(node);
-            while (iter.hasNext())
-            {
-                this.preorder((Node) iter.next());
-            }
-        } catch (DepthExceededException e)
-        {
-            // Do nothing
-        }
-    }
-    
-    /**
-     * Traverse the node children tree
-     * @throws RepositoryException
-     */
-    protected void internalTraverse() throws RepositoryException
-    {
-        this.preorder(this.node);
-    }
-}
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/Traverser.java b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/Traverser.java
deleted file mode 100644
index 484ba6b..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/Traverser.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.taglib.traverser;
-
-import java.util.Collection;
-import java.util.Comparator;
-
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-
-import org.apache.commons.collections.Predicate;
-
-/**
- * Traverser implementations are responsible of collecting nodes from the root
- * node base on custom strategies.
- * 
- * @author <a href="mailto:edgarpoce@gmail.com">Edgar Poce </a>
- */
-public interface Traverser
-{
-
-    /**
-     * Parameter that optionally affect the Traverser behaviour. <br>
-     * 
-     * @param expression
-     */
-    public void setParameter(Object parameter);
-
-    /**
-     * Set a node filter
-     * 
-     * @param node
-     */
-    public void setFilter(Predicate predicate);
-
-    /**
-     * Set the comparator to order the nodes
-     * 
-     * @param node
-     */
-    public void setOrder(Comparator comparator);
-
-    /**
-     * Set the node to traverse from
-     * 
-     * @param node
-     */
-    public void setNode(Node node);
-
-    /**
-     * Set the depth
-     * 
-     * @param depth
-     */
-    public void setDepth(int depth);
-
-    /**
-     * Perform traverse
-     */
-    public void traverse() throws RepositoryException;
-
-    /**
-     * Get the nodes
-     * 
-     * @return
-     */
-    public Collection getNodes();
-
-}
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/package.html b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/package.html
deleted file mode 100644
index a19f886..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/package.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<body>
-Contains Traverser interface and implementations.
-</body>
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/utils/JCRTagConstants.java b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/utils/JCRTagConstants.java
deleted file mode 100644
index a414b5c..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/utils/JCRTagConstants.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.taglib.utils;
-
-/**
- * JCR Taglib Constants
- * 
- * @author <a href="mailto:edgarpoce@gmail.com">Edgar Poce </a>
- */
-public interface JCRTagConstants
-{
-    public static String JNDI_DEFAULT_REPOSITORY = "jcr/repositoryFactory";
-
-    public static String JNDI_BEAN_FACTORY = "jcr/beanFactory";
-
-    
-    public static String JNDI_ANON_USER = "jcr/login/anonuser";
-
-    public static String JNDI_ANON_PWD = "jcr/login/anonpwd";
-
-    // Bean factory Defaults 
-    public static String JNDI_DEFAULT_TEMPLATE_ENGINE = "jcr/template/engine/default";
-    
-    public static String JNDI_DEFAULT_TRAVERSER = "jcr/traverser/default";
-
-    public static String JNDI_DEFAULT_ITEM_FILTER = "jcr/filter/default";
-    
-    public static String JNDI_DEFAULT_ITEM_COMPARATOR = "jcr/comparator/default";
-
-    public static String JNDI_DEFAULT_SIZE_CALCULATOR = "jcr/size/default";
-    
-    public static String JNDI_DEFAULT_SIZE_FORMAT = "jcr/size/format/default";
-    
-    // Default keys
-    public static String KEY_SESSION = "jcrsession";
-    
-    public static String KEY_CD = "jcrcd";    
-    
-}
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/utils/JCRTagUtils.java b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/utils/JCRTagUtils.java
deleted file mode 100644
index 627ae85..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/utils/JCRTagUtils.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.taglib.utils;
-
-import javax.jcr.Item;
-import javax.jcr.Node;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.PageContext;
-import javax.servlet.jsp.tagext.Tag;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.taglib.bean.BeanFactory;
-import org.apache.taglibs.standard.tag.common.core.NullAttributeException;
-import org.apache.taglibs.standard.tag.el.core.ExpressionUtil;
-
-/**
- * JCR taglib utils
- * 
- * @author <a href="mailto:edgarpoce@gmail.com">Edgar Poce </a>
- */
-public class JCRTagUtils
-{
-    private static Log log = LogFactory.getLog(JCRTagUtils.class);
-
-    /**
-     * Get an object from jndi
-     * 
-     * @param name
-     * @return @throws
-     *         JspException
-     */
-    public static Object lookup(String name)
-    {
-        Object o = null;
-        try
-        {
-            InitialContext ctx = new InitialContext();
-            Context env = (Context) ctx.lookup("java:comp/env");
-            o = env.lookup(name);
-        } catch (NamingException e)
-        {
-            String msg = "Unable to get object from jndi: " + name + ". "
-                    + e.getMessage();
-            log.error(msg, e);
-        }
-        return o;
-    }
-
-    /**
-     * Get a session for the given key
-     * 
-     * @param pc
-     * @param key
-     * @throws JspException
-     */
-    public static Session getSession(String tagName, String expression,
-            Tag tag, PageContext pageCtx) throws JspException
-    {
-        Session session = null;
-        try
-        {
-            session = (Session) ExpressionUtil.evalNotNull(tagName, "session",
-                    expression, Object.class, tag, pageCtx);
-            if (log.isDebugEnabled())
-            {
-                log.debug("Session found. User=" + session.getUserID());
-            }
-
-        } catch (ClassCastException e)
-        {
-            String msg = "Unable to get session for expression= " + expression
-                    + ". " + e.getMessage();
-            log.error(msg, e);
-            throw new IllegalArgumentException(msg);
-        }
-        return session;
-    }
-
-    /**
-     * <p>
-     * Get a node.
-     * </p>
-     * <p>
-     * The value can be a String or a EL expression referencing a Node instance.
-     * </p>
-     * 
-     * @param tagName
-     * @param attribute
-     * @param expression
-     * @param tag
-     * @param pageCtx
-     * @param session
-     * @return a node
-     * @throws JspException
-     * @throws RepositoryException
-     * @throws PathNotFoundException
-     */
-    public static Item getItem(String tagName, String expression, Tag tag,
-            PageContext pageCtx, Session session) throws JspException,
-            PathNotFoundException, RepositoryException
-    {
-        Item item = null;
-        Object o = (Object) ExpressionUtil.evalNotNull(tagName, "node",
-                expression, Object.class, tag, pageCtx);
-        // Path to the node
-        if (o instanceof String)
-        {
-            String path = (String) o;
-            if (path.startsWith("/"))
-            { // Absolute path
-                item = (Item) session.getItem(path);
-            } else
-            { // Relative path
-                item = getCD(tagName, tag, pageCtx, session).getNode(path);
-            }
-        } else if (o instanceof Item)
-        {
-            item = (Item) o;
-            if (!item.getSession().equals(session))
-            {
-                throw new JspException(
-                        "The referenced node belongs to another session.");
-            }
-        } else
-        {
-            String msg = "The node attribute evaluation "
-                    + "returned an unexpected type. " + o.getClass().getName();
-            log.warn(msg);
-            throw new JspException(msg);
-        }
-        return item;
-    }
-
-    /**
-     * Get the current working directory
-     * 
-     * @param session
-     * @param pc
-     * @return a node 
-     * @throws RepositoryException
-     * @throws JspException
-     */
-    private static Node getCD(String tagName, Tag tag, PageContext pageCtx,
-            Session session) throws RepositoryException, JspException
-    {
-        Node item = null ;
-        try {
-            item = (Node) ExpressionUtil.evalNotNull(tagName, "node", "${"
-                    + JCRTagConstants.KEY_CD + "}", Object.class, tag, pageCtx);
-        } catch (NullAttributeException e) {
-            item = session.getRootNode();
-        }
-        return item;
-    }
-
-    /**
-     * Create a bean for the class specified in the given jndi entry
-     * 
-     * @param jndi
-     * @return a bean
-     */
-    public static Object getBean(String id)
-    {
-        BeanFactory factory = (BeanFactory) lookup(JCRTagConstants.JNDI_BEAN_FACTORY);
-        Object bean = factory.getBean(id);
-        if (bean == null)
-        {
-            log.warn("No bean for id = " + id);
-        }
-        return bean;
-    }
-
-    /**
-     * Get the message from the Exception
-     * @param e
-     * @return
-     */
-    public static String getMessage(Exception e) {
-        return e.getClass().getName() + ". " + e.getMessage() ;
-    }
-
-}
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/utils/package.html b/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/utils/package.html
deleted file mode 100644
index fcceb49..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/utils/package.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<body>
-Contains Utils classes.
-</body>
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/test/org/apache/jackrabbit/taglib/InitServlet.java b/contrib/jcrtaglib/src/test/org/apache/jackrabbit/taglib/InitServlet.java
deleted file mode 100644
index cc22ca7..0000000
--- a/contrib/jcrtaglib/src/test/org/apache/jackrabbit/taglib/InitServlet.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package org.apache.jackrabbit.taglib;
-
-import javax.jcr.Node;
-import javax.jcr.Repository;
-import javax.jcr.Session;
-import javax.jcr.SimpleCredentials;
-import javax.jcr.query.Query;
-import javax.jcr.query.QueryResult;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-
-import org.apache.commons.collections.IteratorUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.taglib.utils.JCRTagConstants;
-
-/**
- * Create test nodes    
- */
-public class InitServlet extends HttpServlet
-{
-    private static Log log = LogFactory.getLog(InitServlet.class);
-
-    private Repository repo;
-
-    public void destroy()
-    {
-    }
-
-    public void init() throws ServletException
-    {
-        this.createTree() ;
-    }
-    
-    private void createTree(){
-        try {
-            Repository repo = this.getRepository() ;
-            Session s = repo.login(new SimpleCredentials("admin", "".toCharArray())) ;
-            Node root = s.getRootNode() ;
-            if (!root.hasNode("TestA")) {
-                // Tree
-                Node ta = root.addNode("TestA", "nt:unstructured") ;
-                ta.setProperty("prop1", "prop1 value V0");
-                Node tb= root.addNode("TestB") ;
-                
-                // Versionable
-                ta.addMixin("mix:versionable");
-                s.save() ;
-                ta.checkin() ;
-                ta.checkout() ;
-                ta.setProperty("prop1", "prop1 value V1");
-                ta.save() ;
-                ta.checkin() ;
-                
-                // Level 2
-                ta.checkout() ;
-                Node ta2= ta.addNode("A-L2") ;
-                ta2.setProperty("msg", "test message");
-                tb.addNode("B-L2(1)");
-                tb.addNode("B-L2(2)");
-                // Level 3
-                Node ta3 = ta2.addNode("A-L3") ;
-                Node ta4_1 = ta3.addNode("A-L4_1") ;
-                Node ta4_2 = ta3.addNode("A-L4_3") ;
-                s.save() ;
-                
-                Query q = s.getWorkspace().getQueryManager().createQuery("SELECT * FROM nt:unstructured WHERE jcr:path LIKE '/A/%'", Query.SQL) ;
-                QueryResult qr = q.execute() ;
-                if (IteratorUtils.toList(qr.getNodes()).size()==0) {
-                    log.error("Index is not working");
-                }
-            }
-            s.logout() ;
-        } catch (Exception e) {
-            log.error("Unable to init repo",e);
-        }
-        
-    }
-    
-    private Repository getRepository() throws ServletException {
-        try {
-            InitialContext ctx = new InitialContext() ;
-            Context env = (Context) ctx.lookup("java:comp/env");
-            Repository repo = (Repository) env.lookup(JCRTagConstants.JNDI_DEFAULT_REPOSITORY);
-            return repo ;
-        }catch (Exception e) {
-            throw new ServletException(e.toString(), e);
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/contrib/jcrtaglib/src/test/org/apache/jackrabbit/taglib/test/BeanFactoryTest.java b/contrib/jcrtaglib/src/test/org/apache/jackrabbit/taglib/test/BeanFactoryTest.java
deleted file mode 100644
index fbe0a68..0000000
--- a/contrib/jcrtaglib/src/test/org/apache/jackrabbit/taglib/test/BeanFactoryTest.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.taglib.test;
-
-import org.apache.jackrabbit.taglib.bean.SimpleBeanFactory;
-import org.apache.jackrabbit.taglib.bean.SpringBeanFactory;
-import org.apache.jackrabbit.taglib.traverser.PreorderTraverser;
-import org.apache.jackrabbit.taglib.traverser.Traverser;
-
-import junit.framework.TestCase;
-
-/**
- * Bean factory test
- */
-public class BeanFactoryTest extends TestCase
-{
-    public void testSpring() {
-        SpringBeanFactory factory = new SpringBeanFactory() ;
-        factory.setConfig("jcrtaglib-beans.xml") ;
-        Traverser traverser  = (Traverser) factory.getBean("traverser.preorder") ;
-        if (traverser==null) {
-            fail("Traverser not found") ;
-        }
-    }
-    
-    public void testSimple() {
-        SimpleBeanFactory factory = new SimpleBeanFactory() ;
-        Traverser traverser = (Traverser) factory.getBean(PreorderTraverser.class.getName()) ;
-        if (traverser==null) {
-            fail("Traverser not found") ;
-        }
-    }
-
-}
diff --git a/contrib/jcrtaglib/xdocs/configuration.xml b/contrib/jcrtaglib/xdocs/configuration.xml
deleted file mode 100644
index c418443..0000000
--- a/contrib/jcrtaglib/xdocs/configuration.xml
+++ /dev/null
@@ -1,95 +0,0 @@
-<?xml version="1.0"?>
-<!--
-	Copyright 2004-2005 The Apache Software Foundation or its licensors,
-	as applicable.
-	
-	Licensed under the Apache License, Version 2.0 (the "License");
-	you may not use this file except in compliance with the License.
-	You may obtain a copy of the License at
-	
-	http://www.apache.org/licenses/LICENSE-2.0
-	
-	Unless required by applicable law or agreed to in writing, software
-	distributed under the License is distributed on an "AS IS" BASIS,
-	WITHOUT 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</title>
-	</properties>
-	<body>
-		<section name="Configuration">
-			<p>
-				See:<br/>
-				1. web.xml - /src/examples/web/WEB-INF/web.xml<br/>
-				1. context.xml - /src/examples/web/jcrtaglib.xml<br/>
-			</p>
-			<subsection name="JCR repository factory">
-				<p>
-					The default JCR repository must be set under the
-					following JNDI address: "jcr/repositoryFactory".
-				</p>
-			</subsection>
-
-			<subsection name="BeanFactory">
-				<p>
-					The default BeanFactory must be set under the
-					following JNDI address: "jcr/beanFactory".
-				</p>
-			</subsection>
-
-			<subsection name="Traverser">
-				<p>
-					The default traverser ID must be set under the
-					following JNDI address: "jcr/traverser/default"
-				</p>
-			</subsection>
-
-			<subsection name="ItemFilter">
-				<p>
-					The default filter ID must be set under the
-					following JNDI address: "jcr/filter/default"
-				</p>
-			</subsection>
-
-			<subsection name="ItemComparator">
-				<p>
-					The default sort ID must be set under the following
-					JNDI address: "jcr/comparator/default"
-				</p>
-			</subsection>
-
-			<subsection name="TemplateEngine">
-				<p>
-					The default template Engine ID must be set under the
-					following JNDI address:
-					"jcr/template/engine/default"
-				</p>
-			</subsection>
-
-			<subsection name="SizeCalculator">
-				<p>
-					The default SizeCalculator ID must be set under
-					the following JNDI address: "jcr/size/default"
-				</p>
-			</subsection>
-
-			<subsection name="Login">
-				<p>
-					This information is used when no user and password
-					is provided in jcr:session tag, and the user is not
-					logged through container managed security.
-					<br />
-					The default user name must be set under the
-					following JNDI address: "jcr/login/anonuser"
-					<br />
-					The password for the default user must be set under
-					the following JNDI address: "jcr/login/anonpwd"
-				</p>
-			</subsection>
-
-		</section>
-	</body>
-</document>
\ No newline at end of file
diff --git a/contrib/jcrtaglib/xdocs/customization.xml b/contrib/jcrtaglib/xdocs/customization.xml
deleted file mode 100644
index e83509c..0000000
--- a/contrib/jcrtaglib/xdocs/customization.xml
+++ /dev/null
@@ -1,142 +0,0 @@
-<?xml version="1.0"?>
-<!--
-	Copyright 2004-2005 The Apache Software Foundation or its licensors,
-	as applicable.
-	
-	Licensed under the Apache License, Version 2.0 (the "License");
-	you may not use this file except in compliance with the License.
-	You may obtain a copy of the License at
-	
-	http://www.apache.org/licenses/LICENSE-2.0
-	
-	Unless required by applicable law or agreed to in writing, software
-	distributed under the License is distributed on an "AS IS" BASIS,
-	WITHOUT 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>Customization</title>
-	</properties>
-	<body>
-		<section name="BeanFactory">
-			<p>
-				The BeanFactory is responsible of the creation and
-				lifecycle of beans. It can be a simple implementation or
-				it can be a wrapper of an IoC framework such as
-				Spring (included). <br/>
-				Traverser, ItemFilter, ItemComparator and
-				SizeCalculator instances are provided by this class
-				based on the ID. The beanFactory is accessed through a
-				JNDI address (see
-				<a href="configuration.html#BeanFactory">
-					configuration
-				</a>
-				).
-			</p>
-		</section>
-		<section name="Traverser">
-			<p>
-				The Traverser is a visitor which walks through the tree
-				and returns a Collection of nodes.
-				<br />
-				Included traversers are:
-			</p>
-			<ol>
-				<li>
-					<b>PreorderTraverser</b>
-					<br />
-					Preorder traverse strategy
-				</li>
-				<li>
-					<b>PostorderTraverser</b>
-					<br />
-					Postorder traverse strategy
-				</li>
-				<li>
-					<b>LevelByLevelTraverser</b>
-					<br />
-					Level by level traverse strategy
-				</li>
-				<li>
-					<b>AncestorsTraverser</b>
-					<br />
-					This implementation may be useful for displaying the
-					breadcrumb.
-				</li>
-				<li>
-					<b>ExpandedNodeTraverser</b>
-					<br />
-					This Traverser collects only the children of the
-					ancestors in the path from the root node to the
-					target node. It's useful for displaying a tree with
-					only one node expanded.
-					<br />
-					In order to work the target node must be provided as
-					a parameter (see traverserParam attribute in
-					<a href="tag-reference.html#nodes">jcr:nodes</a>
-					).
-				</li>
-				<li>
-					<b>ExpandedNodesTraverser</b>
-					<br />
-					This Traverser collects the children of the
-					ancestors in the path from the root node to any of
-					the target nodes. It's useful for displaying a tree
-					with many nodes expanded.
-					<br />
-					In order to work the target nodes must be provided
-					as a parameter (see traverserParam attribute in
-					<a href="tag-reference.html#nodes">jcr:nodes</a>
-					), a jstl expression referencing a Collection or
-					Iterator of Nodes.
-				</li>
-			</ol>
-		</section>
-		<section name="ItemFilter">
-			<p>
-				An ItemFilter implementation is responsible of
-				evaluating whether the given javax.jcr.Item should be
-				included based on the given expression (see filterExp
-				attribute in
-				<a href="tag-reference.html#nodes">jcr:nodes</a>
-				).
-				<br />
-				A JEXLItemFilter implementation is provided. It
-				evaluates any javax.jcr.Item based on a JEXL valid
-				expression which returns a Boolean instance. The
-				javax.jcr.Item to be evaluated is added to the
-				JEXLContext under the key "item". A valid JEXL
-				expression would be "item.name.equals('MyNodeName')".
-			</p>
-		</section>
-		<section name="ItemComparator">
-			<p>
-				An ItemComparator implementation is responsible of
-				handling comparison of any javax.jcr.Item based on the
-				given expression.
-				<br />
-				A JEXLItemComparator implementation is provided. It
-				compares any javax.jcr.Item based on a JEXL valid
-				expression which returns a comparable instance. The
-				javax.jcr.Item is added to the JEXLContext with the name
-				of "item". A valid JEXL expression would be "item.name".
-			</p>
-		</section>
-		<section name="TemplateEngine">
-			<p>
-				A TemplateEngine can be a simple template engine or can
-				be a wrapper of a powerful template engine such as
-				Velocity. It writes nodes and properties with the given
-				template to the given writer.
-			</p>
-		</section>
-		<section name="SizeCalculator">
-			<p>
-				A SizeCalculator implementation is responsible of
-				calculating the size that uses a given Node or Property.
-			</p>
-		</section>
-	</body>
-</document>
\ No newline at end of file
diff --git a/contrib/jcrtaglib/xdocs/examples.xml b/contrib/jcrtaglib/xdocs/examples.xml
deleted file mode 100644
index 5023915..0000000
--- a/contrib/jcrtaglib/xdocs/examples.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0"?>
-<!--
-	Copyright 2004-2005 The Apache Software Foundation or its licensors,
-	as applicable.
-	
-	Licensed under the Apache License, Version 2.0 (the "License");
-	you may not use this file except in compliance with the License.
-	You may obtain a copy of the License at
-	
-	http://www.apache.org/licenses/LICENSE-2.0
-	
-	Unless required by applicable law or agreed to in writing, software
-	distributed under the License is distributed on an "AS IS" BASIS,
-	WITHOUT 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>Examples</title>
-	</properties>
-	<body>
-		<section name="Displaying a menu">
-			<p>
-				JCR tags contains a few Traversers which will help you
-				on drawing trees.
-			</p>
-			<subsection name="ExpandedNodeTraverser">
-				<p>
-					With this traverser you get a menu with only one
-					node expanded.
-				</p>
-				<p>
-					&lt;jcr:nodes
-					<br />
-					node="/"
-					<br />
-					var="node"
-					<br />
-					traverserID="org.apache.jackrabbit.tags.traverser.ExpandedNodeTraverser"
-					<br />
-					traverserParam="/pathToMyNode/myNode"
-					<br />
-					traverserDepth="5"&gt;
-					<br />
-					<br />
-					&lt;c:forEach begin="0" end="${node.depth}"&gt;
-					<br />
-					&amp;nbsp;
-					<br />
-					&lt;/c:forEach&gt;
-					<br />
-					/ &lt;c:out value="${node.name}"/&gt;&lt;br/&gt;
-					<br />
-					&lt;/jcr:nodes&gt;
-					<br />
-				</p>
-			</subsection>
-		</section>
-	</body>
-</document>
\ No newline at end of file
diff --git a/contrib/jcrtaglib/xdocs/index.xml b/contrib/jcrtaglib/xdocs/index.xml
deleted file mode 100644
index 0b91b1b..0000000
--- a/contrib/jcrtaglib/xdocs/index.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0"?>
-<!--
-	Copyright 2004-2005 The Apache Software Foundation or its licensors,
-	as applicable.
-	
-	Licensed under the Apache License, Version 2.0 (the "License");
-	you may not use this file except in compliance with the License.
-	You may obtain a copy of the License at
-	
-	http://www.apache.org/licenses/LICENSE-2.0
-	
-	Unless required by applicable law or agreed to in writing, software
-	distributed under the License is distributed on an "AS IS" BASIS,
-	WITHOUT 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>Overview</title>
-	</properties>
-	<body>
-		<section name="JCR taglib">
-			<p>
-				This project contains a set of custom tags that lets you
-				read and display information from a JCR repository.<br/>
-				Generated on may 12th, 2005.
-			</p>
-		</section>
-		<section name="Requirements">
-			<p>
-				This software requires a JSP container that supports the Java Servlet 2.3 and JavaServer Pages 1.2 specifications.
-			</p>
-		</section>
-		<section name="Download">
-			<p>
-				Download <a href="jcrtaglib.zip">sources</a>.
-			</p>
-		</section>
-	</body>
-</document>
diff --git a/contrib/jcrtaglib/xdocs/navigation.xml b/contrib/jcrtaglib/xdocs/navigation.xml
deleted file mode 100644
index d9bc304..0000000
--- a/contrib/jcrtaglib/xdocs/navigation.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
-	Copyright 2004-2005 The Apache Software Foundation or its licensors,
-	as applicable.
-	
-	Licensed under the Apache License, Version 2.0 (the "License");
-	you may not use this file except in compliance with the License.
-	You may obtain a copy of the License at
-	
-	http://www.apache.org/licenses/LICENSE-2.0
-	
-	Unless required by applicable law or agreed to in writing, software
-	distributed under the License is distributed on an "AS IS" BASIS,
-	WITHOUT 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="JCRTags">
-	<title>JCRTags</title>
-	<body>
-		<menu name="JCR Tags">
-			<item name="Overview" href="/index.html" />
-			<item name="Tag reference" href="/tag-reference.html" />
-			<item name="Configuration" href="/configuration.html" />
-			<item name="Customization" href="/customization.html" />
-			<item name="Examples" href="/examples.html" />
-		</menu>
-	</body>
-</project>
diff --git a/contrib/jcrtaglib/xdocs/tag-reference.xml b/contrib/jcrtaglib/xdocs/tag-reference.xml
deleted file mode 100644
index 7d783ef..0000000
--- a/contrib/jcrtaglib/xdocs/tag-reference.xml
+++ /dev/null
@@ -1,959 +0,0 @@
-<?xml version="1.0"?>
-<!--
-	Copyright 2004-2005 The Apache Software Foundation or its licensors,
-	as applicable.
-	
-	Licensed under the Apache License, Version 2.0 (the "License");
-	you may not use this file except in compliance with the License.
-	You may obtain a copy of the License at
-	
-	http://www.apache.org/licenses/LICENSE-2.0
-	
-	Unless required by applicable law or agreed to in writing, software
-	distributed under the License is distributed on an "AS IS" BASIS,
-	WITHOUT 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>Tag reference</title>
-	</properties>
-
-	<body>
-		<section name="Tag reference">
-			JCR tags detailed description.
-			<ul>
-				<li>
-					<a href="#jcr:session">jcr:session</a>
-				</li>
-				<li>
-					<a href="#jcr:cd">jcr:cd</a>
-				</li>
-				<li>
-					<a href="#jcr:nodes">jcr:nodes</a>
-				</li>
-				<li>
-					<a href="#jcr:properties">jcr:properties</a>
-				</li>
-				<li>
-					<a href="#jcr:set">jcr:set</a>
-				</li>
-				<li>
-					<a href="#jcr:out">jcr:out</a>
-				</li>
-				<li>
-					<a href="#jcr:count">jcr:count</a>
-				</li>
-				<li>
-					<a href="#jcr:size">jcr:size</a>
-				</li>
-				<li>
-					<a href="#jcr:versions">jcr:versions</a>
-				</li>
-				<li>
-					<a href="#jcr:query">jcr:query</a>
-				</li>
-				<li>
-					<a href="#jcr:ifPresent">jcr:ifPresent</a>
-				</li>
-			</ul>
-		</section>
-
-		<!--  Session -->
-		<section name="jcr:session">
-			<a name="session" />
-			<p>
-				Creates a session for the given repository.
-				<br />
-				It creates a jcr Session and stores it in a page scope
-				variable.
-			</p>
-			<subsection name="Attributes">
-				<ul>
-					<li>
-						<b>repositoryJNDI</b>
-						[optional]
-						<br />
-						Name of the jndi address of a repository other
-						than the default. See
-						<a href="configuration.html#repository">
-							configuration
-						</a>
-						.
-					</li>
-					<li>
-						<b>workspace</b>
-						[optional]
-						<br />
-						Workspace name.
-					</li>
-					<li>
-						<b>var</b>
-						[optional]
-						<br />
-						Name of the target page context variable where
-						the session will be stored.
-					</li>
-					<li>
-						<b>user</b>
-						[optional]
-						<br />
-						<ol>
-							<li>Name of the user for loggin in</li>
-							<li>
-								If no user is provided then use
-								Container managed security principal.
-							</li>
-							<li>
-								If the user is not logged in use default
-								user and password.
-							</li>
-						</ol>
-
-					</li>
-					<li>
-						<b>password</b>
-						[optional]
-						<br />
-						User's password.
-						<br />
-						Password used for creating a new JCR Session.
-					</li>
-				</ul>
-			</subsection>
-			<subsection name="Examples">
-				<p>
-					&lt;jcr:session&gt;
-					<br />
-					... Use the session here
-					<br />
-					&lt;/jcr:session&gt;
-					<br />
-				</p>
-			</subsection>
-		</section>
-
-		<!-- CD -->
-		<section name="jcr:cd">
-			<a name="cd" />
-			<p>
-				Sets the current directory. Relative paths in jcr tags
-				will be be relative to the current directory.
-			</p>
-			<subsection name="Attributes">
-				<ul>
-					<li>
-						<b>session</b>
-						[optional]
-						<br />
-						Name of the scoped variable where the jcr
-						session is stored.
-					</li>
-					<li>
-						<b>node [required]</b>
-						<br />
-						JSTL expression referencing a node instance or
-						full path
-						<br />
-						e.g. "${mynode}" or "mynode"
-					</li>
-					<li>
-						<b>scope</b>
-						[optional] default is Page context
-						<br />
-						Scope of the variable to store the current
-						working directory.
-					</li>
-				</ul>
-			</subsection>
-			<subsection name="Examples">
-				<p>
-					<br />
-					&lt;jcr:session&gt;
-					<br />
-					&lt;jcr:cd node="/myNode"/&gt;
-					<br />
-					...
-					<br />
-					&lt;/jcr:cd&gt;
-					<br />
-					&lt;/jcr:session&gt;
-				</p>
-			</subsection>
-		</section>
-
-		<!--  Nodes -->
-		<section name="jcr:nodes">
-			<a name="nodes" />
-			<p>
-				Iterates through the traversed nodes from the given
-				node.
-			</p>
-			<subsection name="Attributes">
-				<ul>
-					<li>
-						<b>session</b>
-						[optional]
-						<br />
-						Name of the scoped variable where the jcr
-						session is stored.
-					</li>
-					<li>
-						<b>node [required]</b>
-						<br />
-						JSTL expression referencing a node instance or
-						full path
-						<br />
-						e.g. "${mynode}" or "mynode"
-					</li>
-					<li>
-						<b>sortID</b>
-						[optional]
-						<br />
-						<a href="customization.html#ItemComparator">
-							ItemComparator
-						</a>
-						ID.
-						<br />
-						See
-						<a href="customization.html#BeanFactory">
-							BeanFactory
-						</a>
-						.
-					</li>
-					<li>
-						<b>sortExp</b>
-						[optional]
-						<br />
-						Expression used by the ItemComparator to
-						evaluate nodes.
-					</li>
-					<li>
-						<b>ascending</b>
-						[optional]
-						<br />
-						Sort order
-					</li>
-					<li>
-						<b>traverserID</b>
-						[optional]
-						<br />
-						<a href="customization.html#Traverser">
-							Traverser
-						</a>
-						ID. See
-						<a href="customization.html#BeanFactory">
-							BeanFactory
-						</a>
-						.
-					</li>
-					<li>
-						<b>traverserParam</b>
-						[optional]
-						<br />
-						Parameter that affects Traverser behaviour. See
-						<a href="customization.html#Traverser">
-							customization
-						</a>
-						.
-					</li>
-					<li>
-						<b>traverserDepth</b>
-						[optional]
-						<br />
-						Traverse depth
-					</li>
-					<li>
-						<b>filterID</b>
-						[optional]
-						<br />
-						<a href="customization.html#ItemFilter">
-							ItemFilter
-						</a>
-						ID. See
-						<a href="customization.html#BeanFactory">
-							BeanFactory
-						</a>
-						.
-					</li>
-					<li>
-						<b>filterExp</b>
-						[optional]
-						<br />
-						Expression used by the ItemFilter to evaluate
-						nodes. The evaluation must return a Boolean
-						instance.
-					</li>
-				</ul>
-			</subsection>
-			<subsection name="Examples">
-				<p>
-					Using jstl core taglib to show the node's path.
-					<br />
-					&lt;jcr:session&gt;
-					<br />
-					&lt;jcr:nodes node="/" var="node"
-					traverserDepth="1"&gt;
-					<br />
-					&lt;c:out value="${node.path}"/&gt;
-					<br />
-					&lt;/jcr:nodes&gt;
-					<br />
-					&lt;/jcr:session&gt;
-				</p>
-			</subsection>
-		</section>
-
-		<!--  Properties -->
-		<section name="jcr:properties">
-			<a name="properties" />
-			<p>Iterates through the properties of the given node.</p>
-			<subsection name="Attributes">
-				<ul>
-					<li>
-						<b>session</b>
-						[optional]
-						<br />
-						Name of the scoped variable where the jcr
-						session is stored.
-					</li>
-					<li>
-						<b>node [required]</b>
-						<br />
-						JSTL expression referencing a node instance or
-						full path
-						<br />
-						e.g. "${mynode}" or "mynode"
-					</li>
-					<li>
-						<b>sortID</b>
-						[optional]
-						<br />
-						<a href="customization.html#ItemComparator">
-							ItemComparator
-						</a>
-						ID.
-						<br />
-						See
-						<a href="customization.html#BeanFactory">
-							BeanFactory
-						</a>
-						.
-					</li>
-					<li>
-						<b>sortExp</b>
-						[optional]
-						<br />
-						Expression used by the ItemComparator to
-						evaluate properties.
-					</li>
-					<li>
-						<b>ascending</b>
-						[optional]
-						<br />
-						Sort order.
-					</li>
-					<li>
-						<b>filterID</b>
-						[optional]
-						<br />
-						<a href="customization.html#ItemFilter">
-							ItemFilter
-						</a>
-						ID. See
-						<a href="customization.html#BeanFactory">
-							BeanFactory
-						</a>
-						.
-					</li>
-					<li>
-						<b>filterExp</b>
-						[optional]
-						<br />
-						Expression used by the ItemFilter to evaluate
-						nodes. The evaluation must return a Boolean
-						instance.
-					</li>
-				</ul>
-			</subsection>
-			<subsection name="Examples">
-				<p>
-					Using jstl core taglib to show the property's path.
-					<br />
-					&lt;jcr:session&gt;
-					<br />
-					&lt;jcr:properties node="/" var="property"&gt;
-					<br />
-					&lt;c:out value="${property.path}"/&gt;
-					<br />
-					&lt;/jcr:properties&gt;
-					<br />
-					&lt;/jcr:session&gt;
-				</p>
-			</subsection>
-		</section>
-
-		<!--  Set -->
-		<section name="jcr:set">
-			<a name="set" />
-			<p>
-				Stores the given node or property in a page context
-				scoped variable.
-			</p>
-			<subsection name="Attributes">
-				<ul>
-					<li>
-						<b>session</b>
-						[optional]
-						<br />
-						Name of the scoped variable where the jcr
-						session is stored.
-					</li>
-					<li>
-						<b>item [required]</b>
-						<br />
-						Expression referencing an Item instance or full
-						path
-						<br />
-						e.g. "${mynode}" or "mynode"
-					</li>
-					<li>
-						<b>property</b>
-						[optional]
-						<br />
-						Property name. (Valid only when item is a Node)
-					</li>
-					<li>
-						<b>var</b>
-						[optional]
-						<br />
-						Page context variable where the jcr Item weill
-						be stored.
-					</li>
-					<li>
-						<b>scope</b>
-						[optional] default is Page context
-						<br />
-						Scope of the variable to store the current
-						working directory.
-					</li>					
-				</ul>
-			</subsection>
-			<subsection name="Examples">
-				<p>
-					Displaying the path to a node.
-					<br />
-					&lt;jcr:session&gt;
-					<br />
-					&lt;jcr:set node="pahtToMyNode/myNode" var="myNode"
-					/&gt;
-					<br />
-					&lt;c:out value="${myNode.path}"/&gt;
-					<br />
-					&lt;/jcr:session&gt;
-				</p>
-			</subsection>
-		</section>
-
-		<!-- Out -->
-		<section name="jcr:out">
-			<a name="out" />
-			<p>
-				Displays Node and property values through the given
-				template engine and template.
-				<br />
-				See
-				<a href="configuration.html#TemplateEngine">
-					configuration
-				</a>
-				.
-			</p>
-			<subsection name="Attributes">
-				<ul>
-					<li>
-						<b>session</b>
-						[optional]
-						<br />
-						Name of the scoped variable where the jcr
-						session is stored.
-					</li>
-					<li>
-						<b>item [required]</b>
-						<br />
-						JSTL expression referencing an Item instance or
-						full path
-						<br />
-						e.g. "${mynode}" or "mynode"
-					</li>
-					<li>
-						<b>property</b>
-						[optional]
-						<br />
-						Property name.
-					</li>
-					<li>
-						<b>templateEngine</b>
-						[optional]
-						<br />
-						<a href="customization.html#TemplateEngine">
-							TemplateEngine
-						</a>
-						ID. See
-						<a href="customization.html#BeanFactory">
-							BeanFactory
-						</a>
-						.
-					</li>
-					<li>
-						<b>template</b>
-						[optional]
-						<br />
-						Template name.
-					</li>
-				</ul>
-			</subsection>
-			<subsection name="Examples">
-				<p>
-					Displaying a node with the default template engine.
-					<br />
-					&lt;jcr:session&gt;
-					<br />
-					&lt;jcr:out node="/" /&gt;
-					<br />
-					<br />
-					Displaying a property with the default template
-					engine.
-					<br />
-					&lt;jcr:out node="/" property="jcr:primaryType"
-					/&gt;
-					<br />
-					&lt;/jcr:session&gt;
-				</p>
-			</subsection>
-		</section>
-
-		<!-- Count -->
-		<section name="jcr:count">
-			<a name="count" />
-			<p>Counts the nodes returned by the given Traverser.</p>
-			<subsection name="Attributes">
-				<ul>
-					<li>
-						<b>session</b>
-						[optional]
-						<br />
-						Name of the scoped variable where the jcr
-						session is stored.
-					</li>
-					<li>
-						<b>node [required]</b>
-						<br />
-						JSTL expression referencing a node instance or
-						full path
-						<br />
-						e.g. "${mynode}" or "mynode"
-					</li>
-					<li>
-						<b>traverserID</b>
-						[optional]
-						<br />
-						<a href="customization.html#Traverser">
-							Traverser
-						</a>
-						ID. See
-						<a href="customization.html#BeanFactory">
-							BeanFactory
-						</a>
-						.
-					</li>
-					<li>
-						<b>traverserParam</b>
-						[optional]
-						<br />
-						Parameter that affects Traverser behaviour. See
-						<a href="customization.html#Traverser">
-							customization
-						</a>
-						.
-					</li>
-					<li>
-						<b>traverserDepth</b>
-						[optional]
-						<br />
-						Traverse depth
-					</li>
-					<li>
-						<b>filterID</b>
-						[optional]
-						<br />
-						<a href="customization.html#ItemFilter">
-							ItemFilter
-						</a>
-						ID. See
-						<a href="customization.html#BeanFactory">
-							BeanFactory
-						</a>
-						.
-					</li>
-					<li>
-						<b>filterExp</b>
-						[optional]
-						<br />
-						Expression used by the ItemFilter to evaluate
-						nodes. The evaluation must return a Boolean
-						instance.
-					</li>
-				</ul>
-			</subsection>
-			<subsection name="Examples">
-				<p>
-					Displaying the number of children for the root node
-					for the default traverser.
-					<br />
-					&lt;jcr:session&gt;
-					<br />
-					&lt;jcr:count node="/" traverserDepth="1"&gt;
-					<br />
-					&lt;/jcr:session&gt;
-				</p>
-			</subsection>
-		</section>
-
-		<!-- Size -->
-		<section name="jcr:size">
-			<a name="size" />
-			<p>
-				Estimates the cumulative size of the nodes returned by
-				the given Traverser and displays the value.
-			</p>
-			<subsection name="Attributes">
-				<ul>
-					<li>
-						<b>session</b>
-						[optional]
-						<br />
-						Name of the scoped variable where the jcr
-						session is stored.
-					</li>
-					<li>
-						<b>node [required]</b>
-						<br />
-						JSTL expression referencing a node instance or
-						full path
-						<br />
-						e.g. "${mynode}" or "mynode"
-					</li>
-					<li>
-						<b>traverserID</b>
-						[optional]
-						<br />
-						<a href="customization.html#Traverser">
-							Traverser
-						</a>
-						ID. See
-						<a href="customization.html#BeanFactory">
-							BeanFactory
-						</a>
-						.
-					</li>
-					<li>
-						<b>traverserParam</b>
-						[optional]
-						<br />
-						Parameter that affects Traverser behaviour. See
-						<a href="customization.html#Traverser">
-							customization
-						</a>
-						.
-					</li>
-					<li>
-						<b>traverserDepth</b>
-						[optional]
-						<br />
-						Traverse depth
-					</li>
-					<li>
-						<b>filterID</b>
-						[optional]
-						<br />
-						<a href="customization.html#ItemFilter">
-							ItemFilter
-						</a>
-						ID. See
-						<a href="customization.html#BeanFactory">
-							BeanFactory
-						</a>
-						.
-					</li>
-					<li>
-						<b>filterExp</b>
-						[optional]
-						<br />
-						Expression used by the ItemFilter to evaluate
-						nodes. The evaluation must return a Boolean
-						instance.
-					</li>
-					<li>
-						<b>calculatorID</b>
-						[optional]
-						<br />
-						<a
-							href="customization.html#StorageCalculator">
-							StorageCalculator
-						</a>
-						ID. See
-						<a href="customization.html#BeanFactory">
-							BeanFactory
-						</a>
-						.
-					</li>
-					<li>
-						<b>unit</b>
-						[optional]
-						<br />
-						Size unit ( bytes | kb | mb | gb )
-					</li>
-				</ul>
-			</subsection>
-			<subsection name="Examples">
-				<p>
-					Displaying the size of a node.
-					<br />
-					&lt;jcr:session&gt;
-					<br />
-					&lt;jcr:size node="/" traverserDepth="0" /&gt; bytes
-					<br />
-					<br />
-					Displaying the size of the node plus the children
-					nodes.
-					<br />
-					&lt;jcr:size node="/" traverserDepth="1" /&gt; bytes
-					<br />
-					&lt;/jcr:session&gt;
-				</p>
-			</subsection>
-		</section>
-
-		<!--  Versions -->
-		<section name="jcr:versions">
-			<a name="versions" />
-			<p>Iterates through the versions of the given node.</p>
-			<subsection name="Attributes">
-				<ul>
-					<li>
-						<b>session</b>
-						[optional]
-						<br />
-						Name of the scoped variable where the jcr
-						session is stored.
-					</li>
-					<li>
-						<b>node [required]</b>
-						<br />
-						JSTL expression referencing a node instance or
-						full path
-						<br />
-						e.g. "${mynode}" or "mynode"
-					</li>
-					<li>
-						<b>traverserID</b>
-						[optional]
-						<br />
-						<a href="customization.html#Traverser">
-							Traverser
-						</a>
-						ID. See
-						<a href="customization.html#BeanFactory">
-							BeanFactory
-						</a>
-						.
-					</li>
-					<li>
-						<b>traverserParam</b>
-						[optional]
-						<br />
-						Parameter that affects Traverser behaviour. See
-						<a href="customization.html#Traverser">
-							customization
-						</a>
-						.
-					</li>
-					<li>
-						<b>traverserDepth</b>
-						[optional]
-						<br />
-						Traverse depth
-					</li>
-					<li>
-						<b>sortID</b>
-						[optional]
-						<br />
-						<a href="customization.html#ItemComparator">
-							ItemComparator
-						</a>
-						ID.
-						<br />
-						See
-						<a href="customization.html#BeanFactory">
-							BeanFactory
-						</a>
-						.
-					</li>
-					<li>
-						<b>sortExp</b>
-						[optional]
-						<br />
-						Expression used by the ItemComparator to
-						evaluate nodes.
-					</li>
-					<li>
-						<b>ascending</b>
-						[optional]
-						<br />
-						Sort order
-					</li>
-					<li>
-						<b>filterID</b>
-						[optional]
-						<br />
-						<a href="customization.html#ItemFilter">
-							ItemFilter
-						</a>
-						ID. See
-						<a href="customization.html#BeanFactory">
-							BeanFactory
-						</a>
-						.
-					</li>
-					<li>
-						<b>filterExp</b>
-						[optional]
-						<br />
-						Expression used by the ItemFilter to evaluate
-						nodes. The evaluation must return a Boolean
-						instance.
-					</li>
-				</ul>
-			</subsection>
-			<subsection name="Examples">
-				<p>
-					Using jstl core taglib to show the node's path.
-					<br />
-					&lt;jcr:session&gt;
-					<br />
-					&lt;jcr:versions node="/" var="version"&gt;
-					<br />
-					&lt;c:out value="${version.created}"/&gt;
-					<br />
-					&lt;/jcr:versions&gt;
-					<br />
-					&lt;/jcr:session&gt;
-				</p>
-			</subsection>
-		</section>
-
-		<!-- Query -->
-		<section name="jcr:query">
-			<p>Iterates through the query result nodes.</p>
-			<subsection name="Attributes">
-				<ul>
-					<li>
-						<b>session</b>
-						[optional]
-						<br />
-						Name of the scoped variable where the jcr
-						session is stored.
-					</li>
-					<li>
-						<b>stmt [required]</b>
-						<br />
-						Query statement
-					</li>
-					<li>
-						<b>lang</b>
-						[optional] (default XPATH)
-						<br />
-						Language
-					</li>
-					<li>
-						<b>var</b>
-						[optional]
-						<br />
-						Page context variable where the jcr Node will be
-						stored.
-					</li>
-				</ul>
-			</subsection>
-			<subsection name="Examples">
-				<p>
-					<br />
-					&lt;jcr:session&gt;
-					<br />
-					&lt;jcr:query stmt="//*" var="node" lang="xpath"&gt;
-					<br />
-					Node: &gt;c:out value="${node.path}"/&gt; &lt;br&gt;
-					<br />
-					&lt;/jcr:query&gt;
-					<br />
-					&lt;/jcr:session&gt;
-				</p>
-			</subsection>
-		</section>
-
-		<!-- IfPresent -->
-		<section name="jcr:ifPresent">
-			<p>
-				Conditional tag that evaluates the existence of the
-				given node.
-			</p>
-			<subsection name="Attributes">
-				<ul>
-					<li>
-						<b>session</b>
-						[optional]
-						<br />
-						Name of the scoped variable where the jcr
-						session is stored.
-					</li>
-					<li>
-						<b>item [required]</b>
-						<br />
-						Item reference or path
-					</li>
-					<li>
-						<b>property</b>
-						[optional]
-						<br />
-						Property name.
-					</li>
-					<li>
-						<b>value</b>
-						<br />
-						[optional] default is true
-						<br />
-						values: [true | false]
-						<br />
-						expected evaluation result
-					</li>
-				</ul>
-			</subsection>
-			<subsection name="Examples">
-				<p>
-					<br />
-					&lt;jcr:session&gt;
-					<br />
-					&lt;jcr:ifPresent node="/pahtToMyNode/myNode" /&gt;
-					<br />
-					... do some stuff
-					<br />
-					&lt;/jcr:ifPresent&gt;
-					<br />
-					&lt;/jcr:session&gt;
-				</p>
-			</subsection>
-		</section>
-
-
-	</body>
-</document>
\ No newline at end of file
diff --git a/contrib/nt-ns-util/applications/test/cnd-reader-test-input.cnd b/contrib/nt-ns-util/applications/test/cnd-reader-test-input.cnd
deleted file mode 100644
index 6236d05..0000000
--- a/contrib/nt-ns-util/applications/test/cnd-reader-test-input.cnd
+++ /dev/null
@@ -1,5 +0,0 @@
-<ex = "http://apache.org/incubator/jackrabbit/example">

-[ex:NodeType] > ex:ParentNodeType1, ex:ParentNodeType2

-  orderable mixin

-  - ex:property (long) = '1', '2' primary mandatory autocreated protected multiple version < '[1,10]'

-  + ex:node (ex:RequiredNodeType1, ex:RequiredNodeType2) = ex:RequiredNodeType1 mandatory autocreated protected multiple version
\ No newline at end of file
diff --git a/contrib/nt-ns-util/applications/test/log4j.properties b/contrib/nt-ns-util/applications/test/log4j.properties
deleted file mode 100644
index 570d2eb..0000000
--- a/contrib/nt-ns-util/applications/test/log4j.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-# Set root logger level to DEBUG and its only appender to A1.
-log4j.rootLogger=INFO, file
-#log4j.rootLogger=DEBUG, stdout, file
-#log4j.rootLogger=ERROR, stdout, file
-
-log4j.logger.org.apache.jackrabbit.test=DEBUG
-log4j.logger.org.apache.jackrabbit.core.state.bdb=DEBUG
-
-# 'stdout' is set to be a ConsoleAppender.
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-
-# 'stdout' uses PatternLayout
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%d{dd.MM.yyyy HH:mm:ss} *%-5p* [%t] %c{1}: %m (%F, line %L)\n
-
-# 'file' is set to be a FileAppender.
-log4j.appender.file=org.apache.log4j.FileAppender
-log4j.appender.file.File=jcr.log
-
-# 'file' uses PatternLayout.
-log4j.appender.file.layout=org.apache.log4j.PatternLayout
-log4j.appender.file.layout.ConversionPattern=%d{dd.MM.yyyy HH:mm:ss} *%-5p* [%t] %c{1}: %m (%F, line %L)\n
diff --git a/contrib/nt-ns-util/applications/test/xsd-converter-model-output.cnd b/contrib/nt-ns-util/applications/test/xsd-converter-model-output.cnd
deleted file mode 100644
index 84e8945..0000000
--- a/contrib/nt-ns-util/applications/test/xsd-converter-model-output.cnd
+++ /dev/null
@@ -1,45 +0,0 @@
-[bookType]
-  - id
-  - available (Boolean)
-  - isbn mandatory
-  + title (titleType) = titleType mandatory
-  + authors (authorsType) = authorsType mandatory
-  + characters (charactersType) = charactersType mandatory

-

-[authorType]
-  - id
-  - name mandatory
-  - born (Date) mandatory
-  - dead (Date)

-

-[xs:anyType]
-  orderable
-  - * (undefined)
-  + *
-  + jcr:xmltext (jcr:Xmltext) = jcr:Xmltext multiple

-

-[authorsType]
-  orderable
-  + author (authorType) = authorType multiple

-

-[characterType]
-  - id
-  - name mandatory
-  - born (Date) mandatory
-  - qualification mandatory

-

-[jcr:Xmltext]
-  - jcr:xmlcharacters

-

-[titleType]
-  - lang
-  - jcr:xmlContent

-

-[libraryType]
-  orderable
-  + book (bookType) = bookType mandatory multiple

-

-[charactersType]
-  orderable
-  + character (characterType) = characterType multiple

-

diff --git a/contrib/nt-ns-util/applications/test/xsd-converter-test-input.xsd b/contrib/nt-ns-util/applications/test/xsd-converter-test-input.xsd
deleted file mode 100644
index 2f59097..0000000
--- a/contrib/nt-ns-util/applications/test/xsd-converter-test-input.xsd
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0"?> 
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
-  <xs:element name="name" type="xs:token"/>
-  <xs:element name="qualification" type="xs:token"/>
-  <xs:element name="born" type="xs:date"/>
-  <xs:element name="dead" type="xs:date"/>
-  <xs:element name="isbn" type="xs:NMTOKEN"/>
-  <xs:attribute name="id" type="xs:ID"/>
-  <xs:attribute name="available" type="xs:boolean"/>
-  <xs:attribute name="lang" type="xs:language"/>
-  <xs:element name="title">
-    <xs:complexType>
-      <xs:simpleContent>
-        <xs:extension base="xs:token">
-          <xs:attribute ref="lang"/>
-        </xs:extension>
-      </xs:simpleContent>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="library">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element ref="book" maxOccurs="unbounded"/>
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="authors">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element ref="author" minOccurs="0" maxOccurs="unbounded"/>
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="author">
-    <xs:complexType>
-      <xs:all>
-        <xs:element ref="name"/>
-        <xs:element ref="born"/>
-        <xs:element ref="dead" minOccurs="0"/>
-      </xs:all>
-      <xs:attribute ref="id"/>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="book">
-    <xs:complexType>
-      <xs:all>
-        <xs:element ref="isbn"/>
-        <xs:element ref="title"/>
-        <xs:element ref="authors"/>
-        <xs:element ref="characters"/>
-      </xs:all>
-      <xs:attribute ref="id"/>
-      <xs:attribute ref="available"/>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="characters">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element ref="character" minOccurs="0" maxOccurs="unbounded"/>
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="character">
-    <xs:complexType>
-      <xs:all>
-        <xs:element ref="name"/>
-        <xs:element ref="born"/>
-        <xs:element ref="qualification"/>
-      </xs:all>
-      <xs:attribute ref="id"/>
-    </xs:complexType>
-  </xs:element>
-</xs:schema>
\ No newline at end of file
diff --git a/contrib/nt-ns-util/maven.xml b/contrib/nt-ns-util/maven.xml
deleted file mode 100644
index 7d1090c..0000000
--- a/contrib/nt-ns-util/maven.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<!--
-   Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                       as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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
-    default="jar:jar"
-    xmlns:deploy="deploy"
-    xmlns:j="jelly:core"
-    xmlns:ant="jelly:ant"
-    xmlns:maven="jelly:maven">
-</project>
\ No newline at end of file
diff --git a/contrib/nt-ns-util/project.properties b/contrib/nt-ns-util/project.properties
deleted file mode 100644
index c5cc1a7..0000000
--- a/contrib/nt-ns-util/project.properties
+++ /dev/null
@@ -1,106 +0,0 @@
-#  Copyright 2003-2005 The Apache Software Foundation or its licensors,
-#                      as applicable
-#
-#  Licensed under the Apache License, Version 2.0 (the "License");
-#  you may not use this file except in compliance with the License.
-#  You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-#  distributed under the License is distributed on an "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#  See the License for the specific language governing permissions and
-#  limitations under the License.
-
-######################################################################
-# Apache Central Repository
-######################################################################
-maven.repo.central=www.apache.org
-maven.repo.central.directory=/www/www.apache.org/dist/java-repository
-maven.remote.group=apcvs
-maven.changelog.factory = org.apache.maven.svnlib.SvnChangeLogFactory
-
-######################################################################
-# JUnit Testing
-######################################################################
-maven.test.failure = false
-maven.junit.fork=true
-#maven.junit.sysproperties=org.xml.sax.driver java.security.auth.login.config
-maven.junit.sysproperties=org.xml.sax.driver
-org.xml.sax.driver=org.apache.xerces.parsers.SAXParser
-#java.security.auth.login.config=applications/test/jaas.config
-
-
-#If you wish to skip tests when doing builds, uncomment
-#maven.test.skip = true
-
-######################################################################
-# Checkstyle
-######################################################################
-maven.checkstyle.properties= checkstyle.xml
-maven.linkcheck.enable=false 
-
-######################################################################
-# JavaDoc
-#
-# javadoc urls can be added here, multiple urls are appended using a comma
-#
-# maven.javadoc.links = http://foo/bar/api,\
-#                       http://flim/flam/api/
-######################################################################
-maven.javadoc.links=http://java.sun.com/j2se/1.4.2/docs/api/,http://www.day.com/maven/jsr170/javadocs/jcr-0.16.4.1/
-maven.javadoc.author=false
-maven.javadoc.version=false
-
-######################################################################
-# Other opts
-######################################################################
-# uncomment the next line to work in offline mode (no jar download & no linkcheck)
-#maven.mode.online=
-
-maven.compile.debug=on
-maven.compile.deprecation=off
-maven.compile.optimize=off
-maven.compile.source=1.4
-maven.compile.target=1.4
-
-maven.jarResources.basedir=src/java
-maven.jar.excludes=**/package.html
-
-# Location of the generated query language parsers. Needed for
-# the Maven Eclipse plugin to automatically locate the generated
-# source files. Note that this value matches the hardcoded path
-# in the Maven JavaCC plugin. Therefore, do not change this value!
-maven.gen.src=${maven.build.dir}/generated-src/main
-
-# specifying additional remote repository for downloading dependencies 
-# not available at www.ibiblio.org/maven/
-maven.repo.remote = http://www.ibiblio.org/maven/,http://www.day.com/maven/
-
-######################################################################
-# Site L&F
-######################################################################
-# maven.xdoc.jsl=
-maven.xdoc.date=
-maven.xdoc.poweredby.image=maven-feather.png
-maven.xdoc.version=${pom.currentVersion}
-maven.xdoc.developmentProcessUrl=http://incubator.apache.org/projects/jackrabbit.html
-maven.changelog.range=60
-maven.changelog.factory=org.apache.maven.svnlib.SvnChangeLogFactory
-maven.multiproject.overviewPage.title=Jackrabbit components
-
-# ------------------------------------------------------------------------
-# M A V E N  J A R  O V E R R I D E
-# ------------------------------------------------------------------------
-#maven.jar.override = on
-#maven.jar.jcr = ${basedir}/lib/jcr.jar
-
-######################################################################
-# Site Deploy (into ../jackrabbit-site for checkout on incubator.apache.org)
-######################################################################
-maven.site.deploy.method=fs
-
-# IDE settings
-maven.eclipse.resources.addtoclasspath=true
-
diff --git a/contrib/nt-ns-util/project.xml b/contrib/nt-ns-util/project.xml
deleted file mode 100644
index 14461a2..0000000
--- a/contrib/nt-ns-util/project.xml
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project>
-    <pomVersion>3</pomVersion>
-    <groupId>org.apache.jackrabbit</groupId>
-    <artifactId>nt-ns-util</artifactId>
-    <name>JCR Node Type and Namespace Utilities</name>
-    <currentVersion>1.0-SNAPSHOT</currentVersion>
-    <organization>
-        <name>The Apache Software Foundation</name>
-        <url>http://incubator.apache.org/projects/jackrabbit.html</url>
-        <logo>http://incubator.apache.org/images/apache-incubator-logo.png</logo>
-    </organization>
-    <inceptionYear>2005</inceptionYear>
-    <package>org.apache.jackrabbit.core.nodetype.compact</package>
-    <package>org.apache.jackrabbit.util.nodetype</package>
-    <package>org.apache.jackrabbit.util.name</package>
-    <description>JCR Node Type and Namespace Utilities</description>
-    <dependencies>
-        <dependency>
-            <groupId>jsr170</groupId>
-            <artifactId>jcr</artifactId>
-            <version>1.0</version>
-            <url>http://jcp.org/en/jsr/detail?id=170</url>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.jackrabbit</groupId>
-            <artifactId>jackrabbit</artifactId>
-            <version>${pom.currentVersion}</version>
-        </dependency>
-        <dependency>
-            <groupId>xerces</groupId>
-            <artifactId>xercesImpl</artifactId>
-            <version>2.6.2</version>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>3.8.1</version>
-            <properties>
-                <scope>test</scope>
-            </properties>
-        </dependency>
-        <dependency>
-            <groupId>log4j</groupId>
-            <artifactId>log4j</artifactId>
-            <version>1.2.8</version>
-        </dependency>
-    </dependencies>
-    <build>
-        <sourceDirectory>src/main/java</sourceDirectory>
-        <unitTestSourceDirectory>src/test/java</unitTestSourceDirectory>
-        <unitTest>
-            <includes>
-                <include>**/*TestAll.java</include>
-            </includes>
-            <excludes>
-                <exclude>**/init/*</exclude>
-            </excludes>
-            <resources>
-                <resource>
-                    <directory>applications/test</directory>
-                    <includes>
-                        <include>*.properties</include>
-                        <include>*.xml</include>
-                        <include>*.cnd</include>
-                        <include>*.xsd</include>
-                    </includes>
-                </resource>
-                <resource>
-                    <directory>src/test/java</directory>
-                    <includes>
-                        <include>**/*.xml</include>
-                        <include>**/*.txt</include>
-                    </includes>
-                </resource>
-            </resources>
-        </unitTest>
-    </build>
-</project>
diff --git a/contrib/nt-ns-util/src/main/java/org/apache/jackrabbit/core/nodetype/compact/CompactNodeTypeDefReader.java b/contrib/nt-ns-util/src/main/java/org/apache/jackrabbit/core/nodetype/compact/CompactNodeTypeDefReader.java
deleted file mode 100644
index 87d20dc..0000000
--- a/contrib/nt-ns-util/src/main/java/org/apache/jackrabbit/core/nodetype/compact/CompactNodeTypeDefReader.java
+++ /dev/null
@@ -1,694 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.nodetype.compact;
-
-import org.apache.jackrabbit.core.nodetype.NodeTypeDef;
-import org.apache.jackrabbit.core.nodetype.PropDefImpl;
-import org.apache.jackrabbit.core.nodetype.NodeDefImpl;
-import org.apache.jackrabbit.core.nodetype.ItemDef;
-import org.apache.jackrabbit.core.nodetype.NodeDef;
-import org.apache.jackrabbit.core.nodetype.PropDef;
-import org.apache.jackrabbit.core.nodetype.ValueConstraint;
-import org.apache.jackrabbit.core.nodetype.InvalidConstraintException;
-import org.apache.jackrabbit.core.value.InternalValue;
-import org.apache.jackrabbit.name.QName;
-import org.apache.jackrabbit.name.NoPrefixDeclaredException;
-import org.apache.jackrabbit.name.IllegalNameException;
-import org.apache.jackrabbit.name.UnknownPrefixException;
-import org.apache.jackrabbit.util.name.NamespaceMapping;
-
-import javax.jcr.NamespaceException;
-import javax.jcr.PropertyType;
-import javax.jcr.RepositoryException;
-import javax.jcr.ValueFormatException;
-import javax.jcr.version.OnParentVersionAction;
-import java.io.Reader;
-import java.util.ArrayList;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.HashSet;
-import java.util.Arrays;
-
-/**
- * CompactNodeTypeDefReader. Parses node type definitions written in the compact
- * node type definition format and returns a list of NodeTypeDef objects that
- * can then be used to register node types.
- * <p/>
- * The BNF grammar of the compact node type definition:<br>
- * <pre>
- * cnd ::= {ns_mapping | node_type_def}
- *
- * ns_mapping ::= "&lt;" prefix "=" namespace "&gt;"
- *
- * prefix ::= string
- *
- * namespace ::= string
- *
- * node_type_def ::= node_type_name [super_types] [options] {property_def | node_def}
- *
- * node_type_name ::= "[" string "]"
- *
- * super_types ::= "&gt;" string_list
- *
- * options ::= orderable_opt | mixin_opt | orderable_opt mixin_opt | mixin_opt orderable_opt
- *
- * orderable_opt ::= "orderable" | "ord" | "o"
- *
- * mixin_opt ::= "mixin" | "mix" | "m"
- *
- * property_def ::= "-" property_name [property_type_decl] [default_values] [attributes] [value_constraints]
- *
- * property_name ::= string
- *
- * property_type_decl ::= "(" property_type ")"
- *
- * property_type ::= "STRING" | "String |"string" |
- *                   "BINARY" | "Binary" | "binary" |
- *                   "LONG" | "Long" | "long" |
- *                   "DOUBLE" | "Double" | "double" |
- *                   "BOOLEAN" | "Boolean" | "boolean" |
- *                   "DATE" | "Date" | "date" |
- *                   "NAME | "Name | "name |
- *                   "PATH" | "Path" | "path" |
- *                   "REFERENCE" | "Reference" | "reference" |
- *                   "UNDEFINED" | "Undefined" | "undefined" | "*"
- *
- *
- * default_values ::= "=" string_list
- *
- * value_constraints ::= "&lt;" string_list
- *
- * node_def ::= "+" node_name [required_types] [default_type] [attributes]
- *
- * node_name ::= string
- *
- * required_types ::= "(" string_list ")"
- *
- * default_type ::= "=" string
- *
- * attributes ::= "primary" | "pri" | "!" |
- *                "autocreated" | "aut" | "a" |
- *                "mandatory" | "man" | "m" |
- *                "protected" | "pro" | "p" |
- *                "multiple" | "mul" | "*" |
- *                "COPY" | "Copy" | "copy" |
- *                "VERSION" | "Version" | "version" |
- *                "INITIALIZE" | "Initialize" | "initialize" |
- *                "COMPUTE" | "Compute" | "compute" |
- *                "IGNORE" | "Ignore" | "ignore" |
- *                "ABORT" | "Abort" | "abort"
- *
- * string_list ::= string {"," string}
- *
- * string ::= quoted_string | unquoted_string
- *
- * quoted_string :: = "'" unquoted_string "'"
- *
- * unquoted_string ::= ...a string...
- * </pre>
- */
-public class CompactNodeTypeDefReader {
-
-    /**
-     * the list of parsed nodetype defs
-     */
-    private List nodeTypeDefs = new LinkedList();
-
-    /**
-     * the current namespace mapping
-     */
-    private NamespaceMapping nsMapping;
-
-    /**
-     * the underlying lexer
-     */
-    private Lexer lexer;
-
-    /**
-     * the current token
-     */
-    private String currentToken;
-
-    /**
-     * Creates a new CND reader.
-     *
-     * @param r
-     * @throws ParseException
-     */
-    public CompactNodeTypeDefReader(Reader r, String systemId) throws ParseException {
-        this(r, systemId, new NamespaceMapping());
-    }
-
-
-    /**
-     * Creates a new CND reader.
-     *
-     * @param r
-     * @throws ParseException
-     */
-    public CompactNodeTypeDefReader(Reader r, String systemId, NamespaceMapping mapping)
-            throws ParseException {
-        lexer = new Lexer(r, systemId);
-        this.nsMapping = mapping;
-        nextToken();
-        parse();
-    }
-
-    /**
-     * Returns the list of parsed nodetype definitions.
-     *
-     * @return a List of NodeTypeDef objects
-     */
-    public List getNodeTypeDefs() {
-        return nodeTypeDefs;
-    }
-
-    /**
-     * Returns the namespace mapping.
-     *
-     * @return a NamespaceMapping object.
-     */
-    public NamespaceMapping getNamespaceMapping() {
-        return nsMapping;
-    }
-
-    /**
-     * Parses the definition
-     *
-     * @throws ParseException
-     */
-    private void parse() throws ParseException {
-        while (!currentTokenEquals(Lexer.EOF)) {
-            if (doNameSpace()) {
-                continue;
-            }
-            NodeTypeDef ntd = new NodeTypeDef();
-            ntd.setOrderableChildNodes(false);
-            ntd.setMixin(false);
-            ntd.setPrimaryItemName(null);
-            doNodeTypeName(ntd);
-            doSuperClasses(ntd);
-            doOptions(ntd);
-            // add nt:base to superclasses if not mixin
-            if (!ntd.isMixin()) {
-                HashSet superTypes = new HashSet(Arrays.asList(ntd.getSupertypes()));
-                if (!superTypes.contains(QName.NT_BASE)) {
-                    superTypes.add(QName.NT_BASE);
-                    ntd.setSupertypes((QName[]) superTypes.toArray(new QName[superTypes.size()]));
-                }
-            }
-            doItemDefs(ntd);
-            nodeTypeDefs.add(ntd);
-        }
-    }
-
-    /**
-     * processes the namespace declaration
-     *
-     * @return
-     * @throws ParseException
-     */
-    private boolean doNameSpace() throws ParseException {
-        if (!currentTokenEquals('<')) {
-            return false;
-        }
-        nextToken();
-        String prefix = currentToken;
-        nextToken();
-        if (!currentTokenEquals('=')) {
-            lexer.fail("Missing = in namespace decl.");
-        }
-        nextToken();
-        String uri = currentToken;
-        nextToken();
-        if (!currentTokenEquals('>')) {
-            lexer.fail("Missing > in namespace decl.");
-        }
-        try {
-            nsMapping.setMapping(prefix, uri);
-        } catch (NamespaceException e) {
-            // ignore
-        }
-        nextToken();
-        return true;
-    }
-
-    /**
-     * processes the nodetype name
-     *
-     * @param ntd
-     * @throws ParseException
-     */
-    private void doNodeTypeName(NodeTypeDef ntd) throws ParseException {
-        if (!currentTokenEquals(Lexer.BEGIN_NODE_TYPE_NAME)) {
-            lexer.fail("Missing '" + Lexer.BEGIN_NODE_TYPE_NAME + "' delimiter for beginning of node type name");
-        }
-        nextToken();
-        ntd.setName(toQName(currentToken));
-
-        nextToken();
-        if (!currentTokenEquals(Lexer.END_NODE_TYPE_NAME)) {
-            lexer.fail("Missing '" + Lexer.END_NODE_TYPE_NAME + "' delimiter for end of node type name");
-        }
-        nextToken();
-    }
-
-    /**
-     * processes the superclasses
-     *
-     * @param ntd
-     * @throws ParseException
-     */
-    private void doSuperClasses(NodeTypeDef ntd) throws ParseException {
-        List supertypes = new ArrayList();
-        if (!currentTokenEquals(Lexer.EXTENDS)) {
-            return;
-        }
-        do {
-            nextToken();
-            supertypes.add(toQName(currentToken));
-            nextToken();
-        } while (currentTokenEquals(Lexer.LIST_DELIMITER));
-        ntd.setSupertypes((QName[]) supertypes.toArray(new QName[0]));
-    }
-
-    /**
-     * processes the options
-     *
-     * @param ntd
-     * @throws ParseException
-     */
-    private void doOptions(NodeTypeDef ntd) throws ParseException {
-        if (currentTokenEquals(Lexer.ORDERABLE)) {
-            ntd.setOrderableChildNodes(true);
-            nextToken();
-            if (currentTokenEquals(Lexer.MIXIN)) {
-                ntd.setMixin(true);
-                nextToken();
-            }
-        } else if (currentTokenEquals(Lexer.MIXIN)) {
-            ntd.setMixin(true);
-            nextToken();
-            if (currentTokenEquals(Lexer.ORDERABLE)) {
-                ntd.setMixin(true);
-                nextToken();
-            }
-        }
-    }
-
-    /**
-     * processes the item definitions
-     *
-     * @param ntd
-     * @throws ParseException
-     */
-    private void doItemDefs(NodeTypeDef ntd) throws ParseException {
-        List propertyDefinitions = new ArrayList();
-        List nodeDefinitions = new ArrayList();
-        while (currentTokenEquals(Lexer.PROPERTY_DEFINITION) || currentTokenEquals(Lexer.CHILD_NODE_DEFINITION)) {
-            if (currentTokenEquals(Lexer.PROPERTY_DEFINITION)) {
-                PropDefImpl pdi = new PropDefImpl();
-
-                pdi.setAutoCreated(false);
-                pdi.setDeclaringNodeType(ntd.getName());
-                pdi.setDefaultValues(null);
-                pdi.setMandatory(false);
-                pdi.setMultiple(false);
-                pdi.setOnParentVersion(OnParentVersionAction.COPY);
-                pdi.setProtected(false);
-                pdi.setRequiredType(PropertyType.STRING);
-                pdi.setValueConstraints(null);
-
-                nextToken();
-                doPropertyDefinition(pdi, ntd);
-                propertyDefinitions.add(pdi);
-
-            } else if (currentTokenEquals(Lexer.CHILD_NODE_DEFINITION)) {
-                NodeDefImpl ndi = new NodeDefImpl();
-
-                ndi.setAllowsSameNameSiblings(false);
-                ndi.setAutoCreated(false);
-                ndi.setDeclaringNodeType(ntd.getName());
-                ndi.setMandatory(false);
-                ndi.setOnParentVersion(OnParentVersionAction.COPY);
-                ndi.setProtected(false);
-                ndi.setDefaultPrimaryType(null);
-                ndi.setRequiredPrimaryTypes(new QName[]{QName.NT_BASE});
-
-                nextToken();
-                doChildNodeDefinition(ndi, ntd);
-                nodeDefinitions.add(ndi);
-            }
-        }
-
-        if (propertyDefinitions.size() > 0) {
-            ntd.setPropertyDefs((PropDef[]) propertyDefinitions.toArray(new PropDef[0]));
-        }
-
-        if (nodeDefinitions.size() > 0) {
-            ntd.setChildNodeDefs((NodeDef[]) nodeDefinitions.toArray(new NodeDef[0]));
-        }
-    }
-
-    /**
-     * processes the property definition
-     *
-     * @param pdi
-     * @param ntd
-     * @throws ParseException
-     */
-    private void doPropertyDefinition(PropDefImpl pdi, NodeTypeDef ntd)
-            throws ParseException {
-        if (currentToken.equals("*")) {
-            pdi.setName(ItemDef.ANY_NAME);
-        } else {
-            pdi.setName(toQName(currentToken));
-        }
-        nextToken();
-        doPropertyType(pdi);
-        doPropertyDefaultValue(pdi);
-        doPropertyAttributes(pdi, ntd);
-        doPropertyValueConstraints(pdi);
-    }
-
-    /**
-     * processes the property type
-     *
-     * @param pdi
-     * @throws ParseException
-     */
-    private void doPropertyType(PropDefImpl pdi) throws ParseException {
-        if (!currentTokenEquals(Lexer.BEGIN_TYPE)) {
-            return;
-        }
-        nextToken();
-        if (currentTokenEquals(Lexer.STRING)) {
-            pdi.setRequiredType(PropertyType.STRING);
-        } else if (currentTokenEquals(Lexer.BINARY)) {
-            pdi.setRequiredType(PropertyType.BINARY);
-        } else if (currentTokenEquals(Lexer.LONG)) {
-            pdi.setRequiredType(PropertyType.LONG);
-        } else if (currentTokenEquals(Lexer.DOUBLE)) {
-            pdi.setRequiredType(PropertyType.DOUBLE);
-        } else if (currentTokenEquals(Lexer.BOOLEAN)) {
-            pdi.setRequiredType(PropertyType.BOOLEAN);
-        } else if (currentTokenEquals(Lexer.DATE)) {
-            pdi.setRequiredType(PropertyType.DATE);
-        } else if (currentTokenEquals(Lexer.NAME)) {
-            pdi.setRequiredType(PropertyType.NAME);
-        } else if (currentTokenEquals(Lexer.PATH)) {
-            pdi.setRequiredType(PropertyType.PATH);
-        } else if (currentTokenEquals(Lexer.REFERENCE)) {
-            pdi.setRequiredType(PropertyType.REFERENCE);
-        } else if (currentTokenEquals(Lexer.UNDEFINED)) {
-            pdi.setRequiredType(PropertyType.UNDEFINED);
-        } else {
-            lexer.fail("Unkown property type '" + currentToken + "' specified");
-        }
-        nextToken();
-        if (!currentTokenEquals(Lexer.END_TYPE)) {
-            lexer.fail("Missing '" + Lexer.END_TYPE + "' delimiter for end of property type");
-        }
-        nextToken();
-    }
-
-    /**
-     * processes the property attributes
-     *
-     * @param pdi
-     * @param ntd
-     * @throws ParseException
-     */
-    private void doPropertyAttributes(PropDefImpl pdi, NodeTypeDef ntd) throws ParseException {
-        while (currentTokenEquals(Lexer.ATTRIBUTE)) {
-            if (currentTokenEquals(Lexer.PRIMARY)) {
-                if (ntd.getPrimaryItemName() != null) {
-                    String name = null;
-                    try {
-                        name = nsMapping.getJCRName(ntd.getName());
-                    } catch (NoPrefixDeclaredException e) {
-                        // Should never happen, checked earlier
-                    }
-                    lexer.fail("More than one primary item specified in node type '" + name + "'");
-                }
-                ntd.setPrimaryItemName(pdi.getName());
-            } else if (currentTokenEquals(Lexer.AUTOCREATED)) {
-                pdi.setAutoCreated(true);
-            } else if (currentTokenEquals(Lexer.MANDATORY)) {
-                pdi.setMandatory(true);
-            } else if (currentTokenEquals(Lexer.PROTECTED)) {
-                pdi.setProtected(true);
-            } else if (currentTokenEquals(Lexer.MULTIPLE)) {
-                pdi.setMultiple(true);
-            } else if (currentTokenEquals(Lexer.COPY)) {
-                pdi.setOnParentVersion(OnParentVersionAction.COPY);
-            } else if (currentTokenEquals(Lexer.VERSION)) {
-                pdi.setOnParentVersion(OnParentVersionAction.VERSION);
-            } else if (currentTokenEquals(Lexer.INITIALIZE)) {
-                pdi.setOnParentVersion(OnParentVersionAction.INITIALIZE);
-            } else if (currentTokenEquals(Lexer.COMPUTE)) {
-                pdi.setOnParentVersion(OnParentVersionAction.COMPUTE);
-            } else if (currentTokenEquals(Lexer.IGNORE)) {
-                pdi.setOnParentVersion(OnParentVersionAction.IGNORE);
-            } else if (currentTokenEquals(Lexer.ABORT)) {
-                pdi.setOnParentVersion(OnParentVersionAction.ABORT);
-            }
-            nextToken();
-        }
-    }
-
-    /**
-     * processes the property default values
-     *
-     * @param pdi
-     * @throws ParseException
-     */
-    private void doPropertyDefaultValue(PropDefImpl pdi) throws ParseException {
-        if (!currentTokenEquals(Lexer.DEFAULT)) {
-            return;
-        }
-        List defaultValues = new ArrayList();
-        do {
-            nextToken();
-            InternalValue value = null;
-            try {
-                value = InternalValue.create(currentToken, pdi.getRequiredType(), nsMapping);
-            } catch (ValueFormatException e) {
-                lexer.fail("'" + currentToken + "' is not a valid string representation of a value of type " + pdi.getRequiredType());
-            } catch (RepositoryException e) {
-                lexer.fail("An error occured during value conversion of '" + currentToken + "'");
-            }
-            defaultValues.add(value);
-            nextToken();
-        } while (currentTokenEquals(Lexer.LIST_DELIMITER));
-        pdi.setDefaultValues((InternalValue[]) defaultValues.toArray(new InternalValue[0]));
-    }
-
-    /**
-     * processes the property value constraints
-     *
-     * @param pdi
-     * @throws ParseException
-     */
-    private void doPropertyValueConstraints(PropDefImpl pdi) throws ParseException {
-        if (!currentTokenEquals(Lexer.CONSTRAINT)) {
-            return;
-        }
-        List constraints = new ArrayList();
-        do {
-            nextToken();
-            ValueConstraint constraint = null;
-            try {
-                constraint = ValueConstraint.create(pdi.getRequiredType(), currentToken, nsMapping);
-            } catch (InvalidConstraintException e) {
-                lexer.fail("'" + currentToken + "' is not a valid constraint expression for a value of type " + pdi.getRequiredType());
-            }
-            constraints.add(constraint);
-            nextToken();
-        } while (currentTokenEquals(Lexer.LIST_DELIMITER));
-        pdi.setValueConstraints((ValueConstraint[]) constraints.toArray(new ValueConstraint[0]));
-    }
-
-    /**
-     * processes the childnode definition
-     *
-     * @param ndi
-     * @param ntd
-     * @throws ParseException
-     */
-    private void doChildNodeDefinition(NodeDefImpl ndi, NodeTypeDef ntd)
-            throws ParseException {
-        if (currentTokenEquals('*')) {
-            ndi.setName(ItemDef.ANY_NAME);
-        } else {
-            ndi.setName(toQName(currentToken));
-        }
-        nextToken();
-        doChildNodeRequiredTypes(ndi);
-        doChildNodeDefaultType(ndi);
-        doChildNodeAttributes(ndi, ntd);
-    }
-
-    /**
-     * processes the childnode required types
-     *
-     * @param ndi
-     * @throws ParseException
-     */
-    private void doChildNodeRequiredTypes(NodeDefImpl ndi) throws ParseException {
-        if (!currentTokenEquals(Lexer.BEGIN_TYPE)) {
-            return;
-        }
-        List types = new ArrayList();
-        do {
-            nextToken();
-            types.add(toQName(currentToken));
-            nextToken();
-        } while (currentTokenEquals(Lexer.LIST_DELIMITER));
-        ndi.setRequiredPrimaryTypes((QName[]) types.toArray(new QName[0]));
-        nextToken();
-    }
-
-    /**
-     * processes the childnode default types
-     *
-     * @param ndi
-     * @throws ParseException
-     */
-    private void doChildNodeDefaultType(NodeDefImpl ndi) throws ParseException {
-        if (!currentTokenEquals(Lexer.DEFAULT)) {
-            return;
-        }
-        nextToken();
-        ndi.setDefaultPrimaryType(toQName(currentToken));
-        nextToken();
-    }
-
-    /**
-     * processes the childnode attributes
-     *
-     * @param ndi
-     * @param ntd
-     * @throws ParseException
-     */
-    private void doChildNodeAttributes(NodeDefImpl ndi, NodeTypeDef ntd) throws ParseException {
-        while (currentTokenEquals(Lexer.ATTRIBUTE)) {
-            if (currentTokenEquals(Lexer.PRIMARY)) {
-                if (ntd.getPrimaryItemName() != null) {
-                    String name = null;
-                    try {
-                        name = nsMapping.getJCRName(ntd.getName());
-                    } catch (NoPrefixDeclaredException e) {
-                        // Should never happen, checked earlier
-                    }
-                    lexer.fail("More than one primary item specified in node type '" + name + "'");
-                }
-                ntd.setPrimaryItemName(ndi.getName());
-            } else if (currentTokenEquals(Lexer.AUTOCREATED)) {
-                ndi.setAutoCreated(true);
-            } else if (currentTokenEquals(Lexer.MANDATORY)) {
-                ndi.setMandatory(true);
-            } else if (currentTokenEquals(Lexer.PROTECTED)) {
-                ndi.setProtected(true);
-            } else if (currentTokenEquals(Lexer.MULTIPLE)) {
-                ndi.setAllowsSameNameSiblings(true);
-            } else if (currentTokenEquals(Lexer.COPY)) {
-                ndi.setOnParentVersion(OnParentVersionAction.COPY);
-            } else if (currentTokenEquals(Lexer.VERSION)) {
-                ndi.setOnParentVersion(OnParentVersionAction.VERSION);
-            } else if (currentTokenEquals(Lexer.INITIALIZE)) {
-                ndi.setOnParentVersion(OnParentVersionAction.INITIALIZE);
-            } else if (currentTokenEquals(Lexer.COMPUTE)) {
-                ndi.setOnParentVersion(OnParentVersionAction.COMPUTE);
-            } else if (currentTokenEquals(Lexer.IGNORE)) {
-                ndi.setOnParentVersion(OnParentVersionAction.IGNORE);
-            } else if (currentTokenEquals(Lexer.ABORT)) {
-                ndi.setOnParentVersion(OnParentVersionAction.ABORT);
-            }
-            nextToken();
-        }
-    }
-
-    /**
-     * Converts the given string into a qualified name using the current
-     * namespace mapping.
-     *
-     * @param stringName
-     * @return the qualified name
-     * @throws ParseException if the conversion fails
-     */
-    private QName toQName(String stringName) throws ParseException {
-        try {
-            return QName.fromJCRName(stringName, nsMapping);
-        } catch (IllegalNameException e) {
-            lexer.fail("Error while parsing '" + stringName + "'", e);
-            return null;
-        } catch (UnknownPrefixException e) {
-            lexer.fail("Error while parsing '" + stringName + "'", e);
-            return null;
-        }
-    }
-
-    /**
-     * Gets the next token from the underlying lexer.
-     *
-     * @see Lexer#getNextToken()
-     * @throws ParseException if the lexer fails to get the next token.
-     */
-    private void nextToken() throws ParseException {
-        currentToken = lexer.getNextToken();
-    }
-
-    /**
-     * Checks if the {@link #currentToken} is semantically equal to the given
-     * argument.
-     *
-     * @param s the tokens to compare with
-     * @return <code>true</code> if equals; <code>false</code> otherwise.
-     */
-    private boolean currentTokenEquals(String[] s) {
-        for (int i = 0; i < s.length; i++) {
-            if (currentToken.equals(s[i])) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Checks if the {@link #currentToken} is semantically equal to the given
-     * argument.
-     *
-     * @param c the tokens to compare with
-     * @return <code>true</code> if equals; <code>false</code> otherwise.
-     */
-    private boolean currentTokenEquals(char c) {
-        return currentToken.length() == 1 && currentToken.charAt(0) == c;
-    }
-
-    /**
-     * Checks if the {@link #currentToken} is semantically equal to the given
-     * argument.
-     *
-     * @param s the tokens to compare with
-     * @return <code>true</code> if equals; <code>false</code> otherwise.
-     */
-    private boolean currentTokenEquals(String s) {
-        return currentToken.equals(s);
-    }
-
-}
\ No newline at end of file
diff --git a/contrib/nt-ns-util/src/main/java/org/apache/jackrabbit/core/nodetype/compact/CompactNodeTypeDefWriter.java b/contrib/nt-ns-util/src/main/java/org/apache/jackrabbit/core/nodetype/compact/CompactNodeTypeDefWriter.java
deleted file mode 100644
index e4a7ce8..0000000
--- a/contrib/nt-ns-util/src/main/java/org/apache/jackrabbit/core/nodetype/compact/CompactNodeTypeDefWriter.java
+++ /dev/null
@@ -1,389 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.nodetype.compact;
-
-import org.apache.jackrabbit.core.nodetype.NodeTypeDef;
-import org.apache.jackrabbit.core.nodetype.PropDef;
-import org.apache.jackrabbit.core.nodetype.NodeDef;
-import org.apache.jackrabbit.core.nodetype.ValueConstraint;
-import org.apache.jackrabbit.core.value.InternalValue;
-import org.apache.jackrabbit.name.NamespaceResolver;
-import org.apache.jackrabbit.name.QName;
-
-import javax.jcr.NamespaceException;
-import javax.jcr.PropertyType;
-import javax.jcr.RepositoryException;
-import javax.jcr.version.OnParentVersionAction;
-import java.io.Writer;
-import java.io.IOException;
-import java.util.*;
-
-/**
- * Prints node type defs in a compact notation
- * Print Format:
- * <ex = "http://apache.org/jackrabbit/example">
- * [ex:NodeType] > ex:ParentType1, ex:ParentType2
- * orderable mixin
- *   - ex:property (STRING) = 'default1', 'default2'
- *     primary mandatory autocreated protected multiple VERSION
- *     < 'constraint1', 'constraint2'
- *   + ex:node (ex:reqType1, ex:reqType2) = ex:defaultType
- *     mandatory autocreated protected multiple VERSION
- */
-public class CompactNodeTypeDefWriter {
-
-    /**
-     * the indention string
-     */
-    private final static String INDENT = "  ";
-
-    /**
-     * The list of NodeTypeDefs to write
-     */
-    private final List nodeTypeDefList;
-
-    /**
-     * the current namespace resolver
-     */
-    private final NamespaceResolver resolver;
-
-    /**
-     * the underlying writer
-     */
-    private final Writer out;
-
-    /**
-     * The namespaces to be written out.
-     */
-    private final Map namespaceMap = new HashMap();
-
-    /**
-     *
-     * @param l
-     * @param r
-     * @param w
-     */
-    public CompactNodeTypeDefWriter(List l, NamespaceResolver r, Writer w) throws NamespaceException {
-        nodeTypeDefList = l;
-        out = w;
-        resolver = r;
-        buildNamespaceMap();
-    }
-
-    /**
-     *
-     * @throws IOException
-     */
-    public void write() throws IOException, NamespaceException {
-        for (Iterator i = namespaceMap.entrySet().iterator(); i.hasNext();){
-            Map.Entry e = (Map.Entry)i.next();
-            String prefix = (String)e.getKey();
-            String uri = (String)e.getValue();
-            out.write("<");
-            out.write(prefix);
-            out.write(" = \"");
-            out.write(uri);
-            out.write("\">\n");
-        }
-        for (Iterator i = nodeTypeDefList.iterator(); i.hasNext();){
-            NodeTypeDef ntd = (NodeTypeDef)i.next();
-            writeName(ntd);
-            writeSupertypes(ntd);
-            writeOptions(ntd);
-            writePropDefs(ntd);
-            writeChildNodeDefs(ntd);
-        }
-    }
-
-    /**
-     * closes this writer but not the underlying stream
-     *
-     * @throws IOException
-     */
-    public void close() throws IOException {
-        out.flush();
-    }
-
-    /**
-     * buildNamespaceMap
-     */
-    private void buildNamespaceMap() throws NamespaceException {
-        for (Iterator i = nodeTypeDefList.iterator(); i.hasNext();){
-            NodeTypeDef ntd = (NodeTypeDef)i.next();
-            addNamespace(ntd.getName());
-            addNamespace(ntd.getSupertypes());
-            PropDef[] pda = ntd.getPropertyDefs();
-            for (int j = 0; j < pda.length; j++){
-                PropDef pd = pda[j];
-                addNamespace(pd.getName());
-            }
-
-            NodeDef[] nda = ntd.getChildNodeDefs();
-            for (int j = 0; j < nda.length; j++){
-                NodeDef nd = nda[j];
-                addNamespace(nd.getName());
-                addNamespace(nd.getRequiredPrimaryTypes());
-                addNamespace(nd.getDefaultPrimaryType());
-            }
-        }
-    }
-
-    private void addNamespace(QName qn) throws NamespaceException {
-        String uri = qn.getNamespaceURI();
-        String prefix = resolver.getPrefix(uri);
-        namespaceMap.put(prefix, uri);
-    }
-
-    private void addNamespace(QName[] qna) throws NamespaceException {
-        for(int i = 0; i < qna.length; i++){
-            QName qn = qna[i];
-            addNamespace(qn);
-        }
-    }
-
-    /**
-     * writeName
-     */
-    private void writeName(NodeTypeDef ntd) throws IOException, NamespaceException {
-        out.write("[");
-        out.write(resolve(ntd.getName()));
-        out.write("]");
-    }
-
-    /**
-     * writeSupertypes
-     */
-    private void writeSupertypes(NodeTypeDef ntd) throws IOException, NamespaceException {
-        QName[] sta = ntd.getSupertypes();
-        if (sta == null) return;
-        String delim=" > ";
-        for (int i=0; i<sta.length; i++) {
-            if (!sta[i].equals(QName.NT_BASE)) {
-                out.write(delim);
-                out.write(resolve(sta[i]));
-                delim = ", ";
-            }
-        }
-    }
-
-    /**
-     * writeOptions
-     */
-    private void writeOptions(NodeTypeDef ntd) throws IOException {
-        if (ntd.hasOrderableChildNodes()) {
-            out.write("\n" + INDENT);
-            out.write("orderable");
-            if (ntd.isMixin()) {
-                out.write(" mixin");
-            }
-        } else if (ntd.isMixin()) {
-            out.write("\n" + INDENT);
-            out.write("mixin");
-        }
-    }
-
-    /**
-     * writePropDefs
-     */
-    private void writePropDefs(NodeTypeDef ntd) throws IOException, NamespaceException {
-        PropDef[] pda = ntd.getPropertyDefs();
-        for (int i = 0; i < pda.length; i++) {
-            PropDef pd = pda[i];
-            writePropDef(ntd, pd);
-        }
-    }
-
-    /**
-     * writeNodeDefs
-     */
-    private void writeChildNodeDefs(NodeTypeDef ntd) throws IOException, NamespaceException {
-        NodeDef[] nda = ntd.getChildNodeDefs();
-        for (int i = 0; i < nda.length; i++) {
-            NodeDef nd = nda[i];
-            writeNodeDef(ntd, nd);
-        }
-    }
-
-    /**
-     * writePropDef
-     * @param pd
-     */
-    private void writePropDef(NodeTypeDef ntd, PropDef pd) throws IOException, NamespaceException {
-        out.write("\n" + INDENT + "- ");
-        writeItemDefName(pd.getName());
-        out.write(" (");
-        out.write(PropertyType.nameFromValue(pd.getRequiredType()).toLowerCase());
-        out.write(")");
-        writeDefaultValues(pd.getDefaultValues());
-        out.write(ntd.getPrimaryItemName() != null && ntd.getPrimaryItemName().equals(pd.getName()) ? " primary" : "");
-        if (pd.isMandatory()) {
-            out.write(" mandatory");
-        }
-        if (pd.isAutoCreated()) {
-            out.write(" autocreated");
-        }
-        if (pd.isProtected()) {
-            out.write(" protected");
-        }
-        if (pd.isMultiple()) {
-            out.write(" multiple");
-        }
-        if (pd.getOnParentVersion() != OnParentVersionAction.COPY) {
-            out.write(" ");
-            out.write(OnParentVersionAction.nameFromValue(pd.getOnParentVersion()).toLowerCase());
-        }
-        writeValueConstraints(pd.getValueConstraints());
-    }
-
-    /**
-     * writeDefaultValues
-     * @param dva
-     */
-    private void writeDefaultValues(InternalValue[] dva) throws IOException {
-        if (dva == null || dva.length == 0) return;
-        String delim=" = '";
-        for (int i = 0; i < dva.length; i++) {
-            out.write(delim);
-            try {
-                out.write(escape(dva[i].toJCRValue(resolver).getString()));
-            } catch (RepositoryException e) {
-                out.write(escape(dva[i].toString()));
-            }
-            out.write("'");
-            delim=", '";
-        }
-    }
-
-    /**
-     * writeValueConstraints
-     * @param vca
-     */
-    private void writeValueConstraints(ValueConstraint[] vca) throws IOException {
-        if (vca == null || vca.length == 0) return;
-        String vc = vca[0].getDefinition(resolver);
-        out.write(" < '");
-        out.write(escape(vc));
-        out.write("'");
-        for (int i = 1; i < vca.length; i++) {
-            vc = vca[i].getDefinition(resolver);
-            out.write(", '");
-            out.write(escape(vc));
-            out.write("'");
-        }
-    }
-
-    /**
-     * writeNodeDef
-     * @param nd
-     */
-    private void writeNodeDef(NodeTypeDef ntd, NodeDef nd) throws IOException, NamespaceException {
-        out.write("\n" + INDENT + "+ ");
-        writeItemDefName(nd.getName());
-        writeRequiredTypes(nd.getRequiredPrimaryTypes());
-        writeDefaultType(nd.getDefaultPrimaryType());
-        out.write(ntd.getPrimaryItemName() != null && ntd.getPrimaryItemName().equals(nd.getName()) ? " primary" : "");
-        if (nd.isMandatory()) {
-            out.write(" mandatory");
-        }
-        if (nd.isAutoCreated()) {
-            out.write(" autocreated");
-        }
-        if (nd.isProtected()) {
-            out.write(" protected");
-        }
-        if (nd.allowsSameNameSiblings()) {
-            out.write(" multiple");
-        }
-        if (nd.getOnParentVersion() != OnParentVersionAction.COPY) {
-            out.write(" ");
-            out.write(OnParentVersionAction.nameFromValue(nd.getOnParentVersion()).toLowerCase());
-        }
-    }
-
-    private void writeItemDefName(QName name) throws IOException, NamespaceException {
-        String s = resolve(name);
-        // check for '-' and '+'
-        if (s.indexOf('-') >= 0 || s.indexOf('+') >= 0) {
-            out.write('\'');
-            out.write(s);
-            out.write('\'');
-        } else {
-            out.write(s);
-        }
-    }
-    /**
-     * putRequiredTypes
-     * @param reqTypes
-     */
-    private void writeRequiredTypes(QName[] reqTypes) throws IOException, NamespaceException {
-        if (reqTypes != null && reqTypes.length > 0) {
-            String delim = " (";
-            for (int i = 0; i < reqTypes.length; i++) {
-                out.write(delim);
-                out.write(resolve(reqTypes[i]));
-                delim=", ";
-            }
-            out.write(")");
-        }
-    }
-
-    /**
-     * putDefaultType
-     * @param defType
-     */
-    private void writeDefaultType(QName defType) throws IOException, NamespaceException {
-        if (defType != null && !defType.getLocalName().equals("*")) {
-            out.write(" = ");
-            out.write(resolve(defType));
-        }
-    }
-
-    /**
-     * resolve
-     * @param qname
-     * @return the resolved name
-     */
-    private String resolve(QName qname) throws NamespaceException {
-        if (qname == null) {
-            return "";
-        }
-        String prefix = resolver.getPrefix(qname.getNamespaceURI());
-        if (prefix != null && !prefix.equals(QName.NS_EMPTY_PREFIX)) {
-            prefix += ":";
-        }
-        return prefix + qname.getLocalName();
-    }
-
-    /**
-     * escape
-     * @param s
-     * @return the escaped string
-     */
-    private String escape(String s) {
-        StringBuffer sb = new StringBuffer(s);
-        for (int i = 0; i < sb.length(); i++) {
-            if (sb.charAt(i) == '\\') {
-                sb.insert(i, '\\');
-                i++;
-            } else if (sb.charAt(i) == '\'') {
-                sb.insert(i, '\'');
-                i++;
-            }
-        }
-        return sb.toString();
-    }
-}
diff --git a/contrib/nt-ns-util/src/main/java/org/apache/jackrabbit/core/nodetype/compact/Lexer.java b/contrib/nt-ns-util/src/main/java/org/apache/jackrabbit/core/nodetype/compact/Lexer.java
deleted file mode 100644
index d40ebdd..0000000
--- a/contrib/nt-ns-util/src/main/java/org/apache/jackrabbit/core/nodetype/compact/Lexer.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.nodetype.compact;
-
-import java.io.StreamTokenizer;
-import java.io.Reader;
-import java.io.IOException;
-
-/**
- * Lexer
- */
-public class Lexer {
-    public final static char SINGLE_QUOTE = '\'';
-    public final static char DOUBLE_QUOTE = '\"';
-    public final static char BEGIN_NODE_TYPE_NAME = '[';
-    public final static char END_NODE_TYPE_NAME = ']';
-    public final static char EXTENDS = '>';
-    public final static char LIST_DELIMITER = ',';
-    public final static char PROPERTY_DEFINITION = '-';
-    public final static char CHILD_NODE_DEFINITION = '+';
-    public final static char BEGIN_TYPE = '(';
-    public final static char END_TYPE = ')';
-    public final static char DEFAULT = '=';
-    public final static char CONSTRAINT = '<';
-
-    public final static String[] ORDERABLE = new String[] {"orderable", "ord", "o"};
-    public final static String[] MIXIN = new String[]{"mixin", "mix", "m"};
-
-    public final static String[] PRIMARY = new String[]{"primary", "pri", "!"};
-    public final static String[] AUTOCREATED = new String[]{"autocreated", "aut", "a"};
-    public final static String[] MANDATORY = new String[]{"mandatory", "man", "m"};
-    public final static String[] PROTECTED = new String[]{"protected", "pro", "p"};
-    public final static String[] MULTIPLE = new String[]{"multiple", "mul", "*"};
-
-    public final static String[] COPY = new String[]{"copy", "Copy", "COPY"};
-    public final static String[] VERSION = new String[]{"version", "Version", "VERSION"};
-    public final static String[] INITIALIZE = new String[]{"initialize", "Initialize", "INITIALIZE"};
-    public final static String[] COMPUTE = new String[]{"compute", "Compute", "COMPUTE"};
-    public final static String[] IGNORE = new String[]{"ignore", "Ignore", "IGNORE"};
-    public final static String[] ABORT = new String[]{"abort", "Abort", "ABORT"};
-
-    public final static String[] ATTRIBUTE = new String[]{"primary", "pri", "!",
-                                                          "autocreated", "aut", "a",
-                                                          "mandatory", "man", "m",
-                                                          "protected", "pro", "p",
-                                                          "multiple", "mul", "*",
-                                                          "copy", "Copy", "COPY",
-                                                          "version", "Version", "VERSION",
-                                                          "initialize", "Initialize", "INITIALIZE",
-                                                          "compute", "Compute", "COMPUTE",
-                                                          "ignore", "Ignore", "IGNORE",
-                                                          "abort", "Abort", "ABORT"};
-
-    public final static String[] STRING = {"string", "String", "STRING"};
-    public final static String[] BINARY = {"binary", "Binary", "BINARY"};
-    public final static String[] LONG = {"long", "Long", "LONG"};
-    public final static String[] DOUBLE = {"double", "Double", "DOUBLE"};
-    public final static String[] BOOLEAN = {"boolean", "Boolean", "BOOLEAN"};
-    public final static String[] DATE = {"date", "Date", "DATE"};
-    public final static String[] NAME = {"name", "Name", "NAME"};
-    public final static String[] PATH = {"path", "Path", "PATH"};
-    public final static String[] REFERENCE = {"reference", "Reference", "REFERENCE"};
-
-    public final static String[] UNDEFINED = new String[]{"undefined", "Undefined", "UNDEFINED", "*"};
-
-    public final static String EOF = "eof";
-
-    private final StreamTokenizer st;
-
-    private final String systemId;
-
-    /**
-     * Constructor
-     * @param r
-     */
-    public Lexer(Reader r, String systemId){
-        this.systemId = systemId;
-        st = new StreamTokenizer(r);
-
-        st.eolIsSignificant(false);
-
-        st.lowerCaseMode(false);
-
-        st.slashSlashComments(true);
-        st.slashStarComments(true);
-
-        st.wordChars('a','z');
-        st.wordChars('A','Z');
-        st.wordChars(':',':');
-
-        st.quoteChar(SINGLE_QUOTE);
-        st.quoteChar(DOUBLE_QUOTE);
-
-        st.ordinaryChar(BEGIN_NODE_TYPE_NAME);
-        st.ordinaryChar(END_NODE_TYPE_NAME);
-        st.ordinaryChar(EXTENDS);
-        st.ordinaryChar(LIST_DELIMITER);
-        st.ordinaryChar(PROPERTY_DEFINITION);
-        st.ordinaryChar(CHILD_NODE_DEFINITION);
-        st.ordinaryChar(BEGIN_TYPE);
-        st.ordinaryChar(END_TYPE);
-        st.ordinaryChar(DEFAULT);
-        st.ordinaryChar(CONSTRAINT);
-    }
-
-    /**
-     * getNextToken
-     *
-     * @return
-     * @throws ParseException
-     */
-    public String getNextToken() throws ParseException {
-        try {
-            int tokenType = st.nextToken();
-            if (tokenType == StreamTokenizer.TT_EOF){
-                return EOF;
-            } else if(tokenType == StreamTokenizer.TT_WORD || tokenType == SINGLE_QUOTE || tokenType == DOUBLE_QUOTE){
-                return st.sval;
-            } else {
-                return new String(new char[]{(char)tokenType});
-            }
-        } catch (IOException e){
-            fail("IOException while attempting to read input stream", e);
-            return null;
-        }
-    }
-
-    public void fail(String message) throws ParseException {
-        throw new ParseException(message, st.lineno(), -1, systemId);
-    }
-
-    public void fail(String message, Throwable e) throws ParseException {
-        throw new ParseException(message, e, st.lineno(), -1, systemId);
-    }
-
-    public void fail(Throwable e) throws ParseException {
-        throw new ParseException(e, st.lineno(), -1, systemId);
-    }
-}
\ No newline at end of file
diff --git a/contrib/nt-ns-util/src/main/java/org/apache/jackrabbit/core/nodetype/compact/ParseException.java b/contrib/nt-ns-util/src/main/java/org/apache/jackrabbit/core/nodetype/compact/ParseException.java
deleted file mode 100644
index f287aea..0000000
--- a/contrib/nt-ns-util/src/main/java/org/apache/jackrabbit/core/nodetype/compact/ParseException.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.nodetype.compact;
-
-/**
- * ParseException
- */
-public class ParseException extends Exception {
-
-    /**
-     * the line number where the error occurred
-     */
-    private final int lineNumber;
-
-    /**
-     * the column number where the error occurred
-     */
-    private final int colNumber;
-
-    /**
-     * the systemid of the source that produced the error
-     */
-    private final String systemId;
-
-
-    /**
-     * Constructs a new instance of this class with <code>null</code> as its
-     * detail message.
-     */
-    public ParseException(int lineNumber, int colNumber, String systemId) {
-        super();
-        this.lineNumber = lineNumber;
-        this.colNumber = colNumber;
-        this.systemId = systemId;
-    }
-
-    /**
-     * Constructs a new instance of this class with the specified detail
-     * message.
-     *
-     * @param message the detail message. The detail message is saved for
-     *                later retrieval by the {@link #getMessage()} method.
-     */
-    public ParseException(String message, int lineNumber, int colNumber, String systemId) {
-        super(message);
-        this.lineNumber = lineNumber;
-        this.colNumber = colNumber;
-        this.systemId = systemId;
-    }
-
-    /**
-     * Constructs a new instance of this class with the specified detail
-     * message and root cause.
-     *
-     * @param message   the detail message. The detail message is saved for
-     *                  later retrieval by the {@link #getMessage()} method.
-     * @param rootCause root failure cause
-     */
-    public ParseException(String message, Throwable rootCause, int lineNumber, int colNumber, String systemId) {
-        super(message, rootCause);
-        this.lineNumber = lineNumber;
-        this.colNumber = colNumber;
-        this.systemId = systemId;
-    }
-
-    /**
-     * Constructs a new instance of this class with the specified root cause.
-     *
-     * @param rootCause root failure cause
-     */
-    public ParseException(Throwable rootCause, int lineNumber, int colNumber, String systemId) {
-        super(rootCause);
-        this.lineNumber = lineNumber;
-        this.colNumber = colNumber;
-        this.systemId = systemId;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getMessage() {
-        StringBuffer b = new StringBuffer(super.getMessage());
-        String delim =" (";
-        if (systemId != null && !systemId.equals("")) {
-            b.append(delim);
-            b.append(systemId);
-            delim = ", ";
-        }
-        if (lineNumber>=0) {
-            b.append(delim);
-            b.append("line ");
-            b.append(lineNumber);
-            delim = ", ";
-        }
-        if (colNumber>=0) {
-            b.append(delim);
-            b.append("col ");
-            b.append(colNumber);
-            delim = ", ";
-        }
-        if (delim.equals(", ")) {
-            b.append(")");
-        }
-        return b.toString();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String toString() {
-        return super.toString();// + " (" + systemId + ", line " + lineNumber +", col " + colNumber +")";
-    }
-
-}
\ No newline at end of file
diff --git a/contrib/nt-ns-util/src/main/java/org/apache/jackrabbit/util/name/NamespaceAdder.java b/contrib/nt-ns-util/src/main/java/org/apache/jackrabbit/util/name/NamespaceAdder.java
deleted file mode 100644
index ae09acf..0000000
--- a/contrib/nt-ns-util/src/main/java/org/apache/jackrabbit/util/name/NamespaceAdder.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package org.apache.jackrabbit.util.name;
-
-import javax.jcr.NamespaceRegistry;
-import javax.jcr.NamespaceException;
-import javax.jcr.UnsupportedRepositoryOperationException;
-import javax.jcr.RepositoryException;
-import java.util.Map;
-import java.util.Iterator;
-
-public class NamespaceAdder {
-    NamespaceRegistry registry;
-
-    public NamespaceAdder(NamespaceRegistry nsr) {
-        registry = nsr;
-    }
-
-    public void addNamespaces(NamespaceMapping nsm)
-            throws NamespaceException, UnsupportedRepositoryOperationException, RepositoryException {
-        Map m = nsm.getPrefixToURIMapping();
-        for(Iterator i = m.values().iterator(); i.hasNext();){
-            Map.Entry e = (Map.Entry)i.next();
-            String prefix = (String)e.getKey();
-            String uri =(String)e.getKey();
-            registry.registerNamespace(prefix, uri);
-        }
-    }
-
-    public void addNamespace(String prefix, String uri)
-        throws NamespaceException, UnsupportedRepositoryOperationException, RepositoryException {
-        registry.registerNamespace(prefix, uri);
-    }
-}
diff --git a/contrib/nt-ns-util/src/main/java/org/apache/jackrabbit/util/name/NamespaceExtractor.java b/contrib/nt-ns-util/src/main/java/org/apache/jackrabbit/util/name/NamespaceExtractor.java
deleted file mode 100644
index 042edd8..0000000
--- a/contrib/nt-ns-util/src/main/java/org/apache/jackrabbit/util/name/NamespaceExtractor.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2002-2004 Day Management AG, Switzerland.
- *
- * Licensed under the Day RI License, Version 2.0 (the "License"),
- * as a reference implementation of the following specification:
- *
- *   Content Repository API for Java Technology, revision 0.13
- *        <http://www.jcp.org/en/jsr/detail?id=170>
- *
- * You may not use this file except in compliance with the License.
- * You may obtain a copy of the License files at
- *
- *     http://www.day.com/content/en/licenses/day-ri-license-2.0
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.util.name;
-
-import org.xml.sax.XMLReader;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-import org.xml.sax.ContentHandler;
-import org.xml.sax.helpers.XMLReaderFactory;
-import org.xml.sax.helpers.DefaultHandler;
-import org.apache.log4j.Logger;
-
-import javax.jcr.NamespaceException;
-import java.io.FileInputStream;
-import java.util.Map;
-import java.util.HashMap;
-
-/**
- * Extracts namespace mapping information from an XML file.
- * XML file is parsed and all startPrefixMapping events
- * are intercepted. Scoping of prefix mapping within the XML file
- * may result in multiple namespace using the same prefix. This
- * is handled by mangling the prefix when required.
- *
- * The resulting NamespaceMapping implements NamespaceResolver
- * and can be used by tools (such as o.a.j.tools.nodetype.CompactNodeTypeDefWriter)
- * to resolve namespaces.
- */
-public class NamespaceExtractor {
-    private static Logger log = Logger.getLogger(NamespaceExtractor.class);
-    private final NamespaceMapping mapping = new NamespaceMapping();
-    private final Map basePrefixes = new HashMap();
-    private String defaultBasePrefix;
-
-    /**
-     * Constructor
-     * @param fileName
-     * @param dpb
-     * @throws NamespaceException
-     */
-    public NamespaceExtractor(String fileName, String dpb) throws NamespaceException {
-        defaultBasePrefix = dpb;
-        try{
-            ContentHandler handler = new NamespaceHandler();
-            XMLReader parser = XMLReaderFactory.createXMLReader();
-            parser.setContentHandler(handler);
-            parser.parse(new InputSource(new FileInputStream(fileName)));
-        } catch(Exception e){
-            throw new NamespaceException();
-        }
-    }
-
-    /**
-     * getNamespaceMapping
-     * @return a NamespaceMapping
-     */
-    public NamespaceMapping getNamespaceMapping(){
-        return mapping;
-    }
-
-    /**
-     * SAX ContentHandler that reacts to namespace mappings in incoming XML.
-     */
-    private class NamespaceHandler extends DefaultHandler{
-        public void startPrefixMapping(String prefix, String uri) throws SAXException {
-            if (uri == null) uri = "";
-
-            //Replace the empty prefix with the defaultBasePrefix
-            if (prefix == null || prefix.equals("")){
-                prefix = defaultBasePrefix;
-            }
-
-            try{
-                // if prefix already used
-                if (mapping.hasPrefix(prefix)){
-                    int c;
-                    Integer co = (Integer) basePrefixes.get(prefix);
-                    if (co == null) {
-                        basePrefixes.put(prefix, new Integer(1));
-                        c = 1;
-                    } else {
-                        c = co.intValue() + 1;
-                        basePrefixes.put(prefix, new Integer(c));
-                    }
-                    prefix = prefix + "_" + c;
-                }
-                mapping.setMapping(prefix, uri);
-            } catch(NamespaceException e){
-                String msg = e.getMessage();
-                log.debug(msg);
-            }
-        }
-    }
-}
diff --git a/contrib/nt-ns-util/src/main/java/org/apache/jackrabbit/util/name/NamespaceMapping.java b/contrib/nt-ns-util/src/main/java/org/apache/jackrabbit/util/name/NamespaceMapping.java
deleted file mode 100644
index c51042b..0000000
--- a/contrib/nt-ns-util/src/main/java/org/apache/jackrabbit/util/name/NamespaceMapping.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.util.name;
-
-import org.apache.jackrabbit.name.NamespaceResolver;
-import org.apache.jackrabbit.name.AbstractNamespaceResolver;
-
-import javax.jcr.NamespaceException;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-
-/**
- * A Simple Namespace Mapping table. Mappings can be added
- * and then the object can be used as a NamespaceResolver. Additionally, it can
- * be based on a underlying NamespaceResolver
- */
-public class NamespaceMapping extends AbstractNamespaceResolver {
-
-    /** local uris */
-    private final Properties prefixToURI = new Properties();
-
-    /** local prefix */
-    private final Properties URIToPrefix = new Properties();
-
-    /** base */
-    private final NamespaceResolver base;
-
-    public NamespaceMapping() {
-        this.base = null;
-    }
-
-    /**
-     * Constructor
-     */
-    public NamespaceMapping(NamespaceResolver base) {
-        this.base = base;
-    }
-
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getPrefix(String uri) throws NamespaceException {
-        if (URIToPrefix.containsKey(uri)) {
-            return URIToPrefix.getProperty(uri);
-        } else if (base == null) {
-            throw new NamespaceException("No prefix for URI '" + uri + "' declared.");
-        } else {
-            return base.getPrefix(uri);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getURI(String prefix) throws NamespaceException {
-        if (prefixToURI.containsKey(prefix)) {
-            return prefixToURI.getProperty(prefix);
-        } else if (base == null) {
-            throw new NamespaceException("No URI for pefix '" + prefix + "' declared.");
-        } else {
-            return base.getURI(prefix);
-        }
-    }
-
-    /**
-     * Returns true if prefix is already mapped to some URI. Returns false otherwise.
-     */
-    public boolean hasPrefix(String prefix) {
-        return prefixToURI.containsKey(prefix);
-    }
-
-    /**
-     * Set a prefix == URI one-to-one mapping
-     *
-     * @param prefix
-     * @param uri
-     * @throws NamespaceException
-     */
-    public void setMapping(String prefix, String uri) throws NamespaceException{
-        if (prefix == null) {
-            throw new NamespaceException("Prefix must not be null");
-        }
-        if (uri == null) {
-            throw new NamespaceException("URI must not be null");
-        }
-        if (URIToPrefix.containsKey(uri)) {
-            // remove mapping
-            prefixToURI.remove(URIToPrefix.remove(uri));
-        }
-        if (prefixToURI.containsKey(prefix)) {
-            // remove mapping
-            URIToPrefix.remove(prefixToURI.remove(prefix));
-        }
-        prefixToURI.put(prefix, uri);
-        URIToPrefix.put(uri, prefix);
-    }
-
-    /**
-     * Return a Map of prefix to URI mappings currently registered.
-     * The returned Map is a copy of the internal Map.
-     * @return Map
-     */
-    public Map getPrefixToURIMapping(){
-        return new HashMap(prefixToURI);
-    }
-
-    /**
-     * Return a Map of URI to prefix mappings currently registered.
-     * The returned Map is a copy of the internal Map.
-     * @return Map
-     */
-    public Map getURIToPrefixMapping(){
-        return new HashMap(URIToPrefix);
-    }
-
-     /**
-     * Override equals()
-      *
-     * @param obj
-     * @return boolean
-     */
-    public boolean equals(Object obj){
-        if (this == obj) {
-            return true;
-        }
-        if (obj instanceof NamespaceMapping) {
-            NamespaceMapping other = (NamespaceMapping) obj;
-            return this.getPrefixToURIMapping().equals(other.getPrefixToURIMapping())
-                   && this.getURIToPrefixMapping().equals(other.getURIToPrefixMapping());
-        }
-        return false;
-    }
-
-    /**
-     * Override toString()
-     *
-     * @return String
-     */
-    public String toString(){
-        String s= "";
-        Set mapping = prefixToURI.entrySet();
-        for(Iterator i = mapping.iterator(); i.hasNext();){
-            Map.Entry entry = (Map.Entry)i.next();
-            String prefix = (String)entry.getKey();
-            String uri = (String)entry.getValue();
-            s += "'" + prefix + "' == '" + uri + "'\n";
-        }
-        return s;
-    }
-}
diff --git a/contrib/nt-ns-util/src/main/java/org/apache/jackrabbit/util/nodetype/SchemaConversionException.java b/contrib/nt-ns-util/src/main/java/org/apache/jackrabbit/util/nodetype/SchemaConversionException.java
deleted file mode 100644
index f194625..0000000
--- a/contrib/nt-ns-util/src/main/java/org/apache/jackrabbit/util/nodetype/SchemaConversionException.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * $Id:$
- *
- * Copyright 2002-2004 Day Management AG, Switzerland.
- *
- * Licensed under the Day RI License, Version 2.0 (the "License"),
- * as a reference implementation of the following specification:
- *
- *   Content Repository API for Java Technology, revision 0.13
- *        <http://www.jcp.org/en/jsr/detail?id=170>
- *
- * You may not use this file except in compliance with the License.
- * You may obtain a copy of the License files at
- *
- *     http://www.day.com/content/en/licenses/day-ri-license-2.0
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.util.nodetype;
-
-/**
- * SchemaConversionException
- */
-public class SchemaConversionException extends Exception {
-
-    /**
-     * Constructs a new instance of this class with <code>null</code> as its
-     * detail message.
-     */
-    public SchemaConversionException() {
-        super();
-    }
-
-    /**
-     * Constructs a new instance of this class with the specified detail
-     * message.
-     *
-     * @param message the detail message. The detail message is saved for
-     *                later retrieval by the {@link #getMessage()} method.
-     */
-    public SchemaConversionException(String message) {
-        super(message);
-    }
-
-    /**
-     * Constructs a new instance of this class with the specified detail
-     * message and root cause.
-     *
-     * @param message   the detail message. The detail message is saved for
-     *                  later retrieval by the {@link #getMessage()} method.
-     * @param rootCause root failure cause
-     */
-    public SchemaConversionException(String message, Throwable rootCause) {
-        super(message, rootCause);
-    }
-
-    /**
-     * Constructs a new instance of this class with the specified root cause.
-     *
-     * @param rootCause root failure cause
-     */
-    public SchemaConversionException(Throwable rootCause) {
-        super(rootCause);
-    }
-}
diff --git a/contrib/nt-ns-util/src/main/java/org/apache/jackrabbit/util/nodetype/SchemaConverter.java b/contrib/nt-ns-util/src/main/java/org/apache/jackrabbit/util/nodetype/SchemaConverter.java
deleted file mode 100644
index 887edc2..0000000
--- a/contrib/nt-ns-util/src/main/java/org/apache/jackrabbit/util/nodetype/SchemaConverter.java
+++ /dev/null
@@ -1,593 +0,0 @@
-package org.apache.jackrabbit.util.nodetype;
-
-import org.apache.jackrabbit.core.nodetype.NodeDef;
-import org.apache.jackrabbit.core.nodetype.NodeDefImpl;
-import org.apache.jackrabbit.core.nodetype.NodeTypeDef;
-import org.apache.jackrabbit.core.nodetype.PropDef;
-import org.apache.jackrabbit.core.nodetype.PropDefImpl;
-import org.apache.jackrabbit.core.nodetype.ValueConstraint;
-import org.apache.jackrabbit.core.value.InternalValue;
-import org.apache.jackrabbit.name.QName;
-import org.apache.xerces.impl.xs.XMLSchemaLoader;
-import org.apache.xerces.xs.XSAttributeDeclaration;
-import org.apache.xerces.xs.XSAttributeUse;
-import org.apache.xerces.xs.XSComplexTypeDefinition;
-import org.apache.xerces.xs.XSConstants;
-import org.apache.xerces.xs.XSElementDeclaration;
-import org.apache.xerces.xs.XSModel;
-import org.apache.xerces.xs.XSModelGroup;
-import org.apache.xerces.xs.XSNamedMap;
-import org.apache.xerces.xs.XSObjectList;
-import org.apache.xerces.xs.XSParticle;
-import org.apache.xerces.xs.XSSimpleTypeDefinition;
-import org.apache.xerces.xs.XSTerm;
-import org.apache.xerces.xs.XSTypeDefinition;
-import org.apache.xerces.xs.XSWildcard;
-import javax.jcr.PropertyType;
-import javax.jcr.version.OnParentVersionAction;
-import java.io.File;
-import java.util.*;
-
-/**
- * SchemaConverter
- * Converts an XML Schema into a set of node type defintions (NodeTypeDef objects)
- * which can then be registered in a repository.
- */
-public class SchemaConverter {
-    private static final QName XML_TEXT_NODETYPE_NAME = new QName(QName.NS_JCR_URI, "Xmltext");
-    private static final QName XML_CONTENT_PROPERTY_NAME = new QName(QName.NS_JCR_URI, "xmlContent");
-
-    private final HashMap nodeTypeDefs = new HashMap();
-    private final HashMap nodeTypeBaseNames = new HashMap();
-
-    /**
-     * Constructor
-     */
-    public SchemaConverter(String fileName) throws SchemaConversionException {
-        File file = new File(fileName);
-        convertSchema(file);
-    }
-
-    /**
-     * Constructor
-     */
-    public SchemaConverter(File file) throws SchemaConversionException {
-        convertSchema(file);
-    }
-
-    /**
-     * getNodeTypeDefs
-     */
-    public List getNodeTypeDefs() {
-        return new ArrayList(nodeTypeDefs.values());
-    }
-
-    /**
-     * convertSchema
-     */
-    private void convertSchema(File file) throws SchemaConversionException {
-        XMLSchemaLoader loader = new XMLSchemaLoader();
-        String uri = file.toURI().toString();
-        XSModel xsModel = loader.loadURI(uri);
-
-        // Convert top level complex type definitions to node types
-        XSNamedMap map = xsModel.getComponents(XSConstants.TYPE_DEFINITION);
-        for (int i = 0; i < map.getLength(); i++) {
-            XSTypeDefinition tDef = (XSTypeDefinition) map.item(i);
-            checkAndConvert(tDef, null, null);
-        }
-        // Convert local (anonymous) complex type defs found in top level element declarations
-        map = xsModel.getComponents(XSConstants.ELEMENT_DECLARATION);
-        for (int i = 0; i < map.getLength(); i++) {
-            XSElementDeclaration eDec = (XSElementDeclaration) map.item(i);
-            XSTypeDefinition tDef = eDec.getTypeDefinition();
-            checkAndConvert(tDef, eDec.getNamespace(), eDec.getName());
-        }
-    }
-
-    /**
-     * checkAndConvert
-     */
-    private void checkAndConvert(XSTypeDefinition tDef, String namespace, String nameHint) throws SchemaConversionException {
-        if (tDef.getTypeCategory() == XSTypeDefinition.COMPLEX_TYPE) {
-            XSComplexTypeDefinition ctDef = (XSComplexTypeDefinition) tDef;
-            if (ctDef.getContentType() != XSComplexTypeDefinition.CONTENTTYPE_SIMPLE
-                    || ctDef.getAttributeUses().getLength() > 0
-                    || ctDef.getAttributeWildcard() != null) {
-                convertComplexTypeDef(ctDef, namespace, nameHint);
-            }
-        }
-    }
-
-    /**
-     * convertComplexTypeDef
-     */
-    private QName convertComplexTypeDef(XSComplexTypeDefinition ctDef, String namespace, String nameHint) throws SchemaConversionException {
-        NodeTypeDef ntd;
-
-        // Check if this ComplexTypeDef has already been converted
-        // if so, return the name of the corresponding NodeTypeDef
-        if (nodeTypeDefs.containsKey(ctDef)) {
-            ntd = (NodeTypeDef) nodeTypeDefs.get(ctDef);
-            return ntd.getName();
-        }
-
-        // Otherwise create a new NodeTypeDef and add it to the map
-        // keyed by the CTDef from which it was converted
-        NodeTypeDef ntDef = new NodeTypeDef();
-        nodeTypeDefs.put(ctDef, ntDef);
-
-        // Make name for the node type, inventing names for anonymous CTDefs
-        // and avoiding repetitions.
-        QName ntName;
-        if (ctDef.getAnonymous()) {
-            if (nameHint == null) {
-                throw new SchemaConversionException("Anonymous complex type definition encountered without name hint");
-            }
-            namespace = noNull(namespace);
-            QName baseName = new QName(namespace, nameHint + "Type");
-            Integer count = (Integer) nodeTypeBaseNames.get(baseName);
-            if (count == null) {
-                nodeTypeBaseNames.put(baseName, new Integer(0));
-                ntName = baseName;
-            } else {
-                int newCount = count.intValue() + 1;
-                ntName = new QName(namespace, nameHint + "Type_" + Integer.toString(newCount));
-                nodeTypeBaseNames.put(baseName, new Integer(newCount));
-            }
-        } else {
-            ntName = new QName(noNull(ctDef.getNamespace()), ctDef.getName());
-        }
-
-        // set the name of the node type
-        ntDef.setName(ntName);
-
-        // Fill in the rest of the node type def
-        buildNodeTypeDef(ntDef, ctDef);
-        return ntName;
-    }
-
-    /**
-     * buildNodeTypeDef
-     */
-    private void buildNodeTypeDef(NodeTypeDef nodeTypeDef, XSComplexTypeDefinition ctdef) throws SchemaConversionException {
-        List propDefList = new ArrayList();
-        List nodeDefList = new ArrayList();
-
-        // Set supertype of node type. Currently all node types created direct subtypes of nt:base
-        nodeTypeDef.setSupertypes(new QName[]{QName.NT_BASE});
-
-        // Set mixin status. Currently all node types are set to mixin=false
-        nodeTypeDef.setMixin(false);
-
-        // The orderable status is false unless it is reset during deeper traversal of
-        // this complex type definition. See method particleToDefs below
-        boolean orderable = false;
-
-        // Set Primary Item. Currently we set this to null: no primary item
-        nodeTypeDef.setPrimaryItemName(null);
-
-        // Convert attribute uses (<xs:attribute>) to property definitions
-        XSObjectList list = ctdef.getAttributeUses();
-        for (int i = 0; i < list.getLength(); i++) {
-            XSAttributeUse attribUse = (XSAttributeUse) list.item(i);
-            PropDef propDef = attributeUseToPropDef(attribUse);
-            propDefList.add(propDef);
-        }
-
-        // Convert attribute wildcard (<xs:anyattribute>)to residual property
-        XSWildcard wildcard = ctdef.getAttributeWildcard();
-        if (wildcard != null) {
-            PropDef propDef = wildcardPropDef();
-            propDefList.add(propDef);
-        }
-
-        // If the content model of this complex type is simple, then we create a
-        // PropDef corresponding to the XML text node defined by this content model.
-        if (ctdef.getContentType() == XSComplexTypeDefinition.CONTENTTYPE_SIMPLE) {
-            XSSimpleTypeDefinition stdef = ctdef.getSimpleType();
-            //set to non-mandatory, single-value property called "jcr:xmlcharacters"
-            PropDef propDef = simpleTypeToPropDef(stdef, XML_CONTENT_PROPERTY_NAME, false, false);
-            propDefList.add(propDef);
-
-            // If the content model of this complex type is element or mixed then we must convert the
-            // contained XSParticle into a set of node and/or property defs
-        } else if (ctdef.getContentType() == XSComplexTypeDefinition.CONTENTTYPE_ELEMENT ||
-                ctdef.getContentType() == XSComplexTypeDefinition.CONTENTTYPE_MIXED) {
-            XSParticle p = ctdef.getParticle();
-
-            // particleToDefs takes the two lists and adds to them as necessary. It also returns
-            // an orderable indicator based on the top level compositor used within the complex typedef
-            // (if there is one).
-            orderable = particleToDefs(p, propDefList, nodeDefList);
-        } else if (ctdef.getContentType() == XSComplexTypeDefinition.CONTENTTYPE_EMPTY) {
-            // Xerces ignores type definitions with empty content
-            // so a type with empty content should never be encountered.
-        } else {
-            throw new SchemaConversionException("Unrecognized content type");
-        }
-
-        // If the content model of this complex type is mixed, then we need to also add
-        // an SNS node def with name jcr:xmltext to hold the multiple text nodes
-        // that may be interspersed. We also ensure that the node type has an orderable setting
-        // of true in this case. A node type for jcr:xmltext, called jcr:Xmltext,
-        // is also added to the node type set.
-        if (ctdef.getContentType() == XSComplexTypeDefinition.CONTENTTYPE_MIXED) {
-            orderable = true;
-            nodeDefList.add(createXMLTextNodeDef());
-            addXMLTextNodeType();
-        }
-
-        // Set the orderable status of the node type def
-        // this may have been modified by deeper traversal
-        // through particleDefs.
-        nodeTypeDef.setOrderableChildNodes(orderable);
-
-        // Set the declaring node type in each of the accumulated property and node defs
-        QName nodeTypeName = nodeTypeDef.getName();
-        for (Iterator i = propDefList.listIterator(); i.hasNext();) {
-            PropDefImpl propDef = (PropDefImpl) i.next();
-            propDef.setDeclaringNodeType(nodeTypeName);
-        }
-        for (Iterator i = nodeDefList.listIterator(); i.hasNext();) {
-            NodeDefImpl nodeDef = (NodeDefImpl) i.next();
-            nodeDef.setDeclaringNodeType(nodeTypeName);
-        }
-
-        //Add the collected propDefs to the node type def
-        nodeTypeDef.setPropertyDefs((PropDef[]) propDefList.toArray(new PropDef[propDefList.size()]));
-
-        //Add the collected nodeDefs to the node type def
-        nodeTypeDef.setChildNodeDefs((NodeDef[]) nodeDefList.toArray(new NodeDef[nodeDefList.size()]));
-    }
-
-    /**
-     * particleToDefs
-     */
-    private boolean particleToDefs(XSParticle particle, List propDefList, List nodeDefList) throws SchemaConversionException {
-        boolean orderable = false;
-
-        XSTerm term = particle.getTerm();
-
-        // If the maxoccurs setting of this particle is zero then this
-        // particle does not contribute any node or property definition and
-        // we do nothing and return.
-        if (particle.getMaxOccurs() == 0) {
-            return orderable;
-        }
-
-        // Determine the mandatory setting of the node or property
-        // corresponding to this particle (if this particle does not
-        // correspond to node or property this information is ignored).
-        boolean mandatory = false;
-        if (particle.getMinOccurs() > 0) {
-            mandatory = true;
-        }
-
-        // Determine the same-name siblings setting of the node, or
-        // the multiple setting of the property, corresponding to this
-        // particle (if this particle does not correspond to
-        // node or property this information is ignored).
-        boolean multiple = false;
-        if (particle.getMaxOccurs() > 1 || particle.getMaxOccursUnbounded()) {
-            multiple = true;
-        }
-
-        // If this particle is an element declaration (an <xs:element>)
-        // then it is converted into either a node or property def.
-        if (term.getType() == XSConstants.ELEMENT_DECLARATION) {
-            XSElementDeclaration eDec = (XSElementDeclaration) term;
-
-            // Name for property or node def taken from the name of the element
-            QName name = new QName(noNull(eDec.getNamespace()), eDec.getName());
-
-            // Get the type definition for this element declaration
-            XSTypeDefinition tDef = eDec.getTypeDefinition();
-
-            // If this element declaration is of simple type
-            // then it is converted into a property def
-            if (tDef.getTypeCategory() == XSTypeDefinition.SIMPLE_TYPE) {
-                XSSimpleTypeDefinition stDef = (XSSimpleTypeDefinition) tDef;
-                PropDef propDef = simpleTypeToPropDef(stDef, name, mandatory, multiple);
-                propDefList.add(propDef);
-
-                // If this element declaration is of complex type then
-                // it is converted into either node or property def
-            } else if (tDef.getTypeCategory() == XSTypeDefinition.COMPLEX_TYPE) {
-                XSComplexTypeDefinition ctDef = (XSComplexTypeDefinition) tDef;
-
-                // If the complex type definition contains a simple content model
-                // and does not contain any attribute uses or attribute wildcards
-                // then the enclosing element is converted to a property def
-                if (ctDef.getContentType() == XSComplexTypeDefinition.CONTENTTYPE_SIMPLE &&
-                        ctDef.getAttributeUses().getLength() == 0 && ctDef.getAttributeWildcard() == null) {
-                    XSSimpleTypeDefinition std = ctDef.getSimpleType();
-                    PropDef pd = simpleTypeToPropDef(std, name, mandatory, multiple);
-                    propDefList.add(pd);
-
-                    // If the complex type definition contains a complex content model
-                    // or a simple content model with attribute uses or an attribute wildcard
-                    // then the enclosing element is converted into a node def
-                } else {
-                    NodeDef nd = complexTypeToNodeDef(ctDef, name, mandatory, multiple);
-                    nodeDefList.add(nd);
-                }
-            }
-
-            // If this particle is a wildcard (an <xs:any> )then it
-            // is converted into a node def.
-        } else if (term.getType() == XSConstants.WILDCARD) {
-            nodeDefList.add(wildcardNodeDef());
-
-            // If this particle is a model group (one of
-            // <xs:sequence>, <xs:choice> or <xs:all>) then
-            // it subparticles must be processed.
-        } else if (term.getType() == XSConstants.MODEL_GROUP) {
-            XSModelGroup mg = (XSModelGroup) term;
-
-            // If the top level compositor is <xs:sequence> we convert this to
-            // mean that the node type corresponding to the complex type def will have
-            // an orderable setting of true.
-            if (mg.getCompositor() == XSModelGroup.COMPOSITOR_SEQUENCE) {
-                orderable = true;
-            }
-
-            // We ignore any further nested compositors
-            // by ignoring the return value of nested particleToDefs calls.
-            XSObjectList list = mg.getParticles();
-            for (int i = 0; i < list.getLength(); i++) {
-                XSParticle pp = (XSParticle) list.item(i);
-                particleToDefs(pp, propDefList, nodeDefList);
-            }
-        }
-        return orderable;
-    }
-
-    /**
-     * attributeUseToPropDef
-     */
-    private PropDef attributeUseToPropDef(XSAttributeUse au) {
-
-        // The required setting of this attribute use becomes the
-        // the mandatory setting of the property definition:
-        // <xs:attribute ref="..." use="required | optional | prohibited">
-        // note that if use is prohibited the attribute use itself is absent from the XSModel so
-        // we would never get here anyway
-        boolean mandatory = au.getRequired();
-
-        // Get the contained attribute declaration
-        XSAttributeDeclaration ad = au.getAttrDeclaration();
-
-        // The name of the Attribute Declaration becomes the name of the PropDef
-        QName name = new QName(noNull(ad.getNamespace()), ad.getName());
-
-        // Since this is an attribute declaration we assume it converts to
-        // a single value property (we ignore the XML Schema List Type)
-        boolean multiple = false;
-
-        // Get the simple type def for this attribute
-        XSSimpleTypeDefinition std = ad.getTypeDefinition();
-
-        // convert it to a propdef
-        return simpleTypeToPropDef(std, name, mandatory, multiple);
-    }
-
-    /**
-     * simpleTypeToPropDef
-     */
-    private PropDef simpleTypeToPropDef(XSSimpleTypeDefinition std, QName propertyName, boolean mandatory, boolean multiple) {
-
-        // Create PropDef and set attributes passed in
-        PropDefImpl propDef = new PropDefImpl();
-        propDef.setName(propertyName);
-        propDef.setMandatory(mandatory);
-        propDef.setMultiple(multiple);
-
-        // Set the property type from the built-in kind
-        short kind = std.getBuiltInKind();
-        int propertyType = convertBuiltInKindToPropertyType(kind);
-        propDef.setRequiredType(propertyType);
-
-        //todo:determine value constraints from schema
-        propDef.setValueConstraints(new ValueConstraint[]{});
-
-        //todo:determine default value from schema
-        propDef.setDefaultValues(new InternalValue[]{});
-
-        // Set the attributes not translated from schema
-        propDef.setAutoCreated(false);
-        propDef.setOnParentVersion(OnParentVersionAction.COPY);
-        propDef.setProtected(false);
-
-        return propDef;
-    }
-
-    /**
-     * complexTypeToNodeDef
-     */
-    private NodeDef complexTypeToNodeDef(XSComplexTypeDefinition ctDef, QName nodeName, boolean mandatory, boolean multiple) throws SchemaConversionException {
-
-        // Create NodeDef and set attributes passed in
-        NodeDefImpl nodeDef = new NodeDefImpl();
-        nodeDef.setName(nodeName);
-        nodeDef.setMandatory(mandatory);
-        nodeDef.setAllowsSameNameSiblings(multiple);
-
-        // Create nodeType for this node def (will only be created if needed)
-        QName nodeTypeName = convertComplexTypeDef(ctDef, nodeName.getNamespaceURI(), nodeName.getLocalName());
-        nodeDef.setDefaultPrimaryType(nodeTypeName);
-        nodeDef.setRequiredPrimaryTypes(new QName[]{nodeTypeName});
-
-        // Set attributes not determined by schema
-        nodeDef.setAutoCreated(false);
-        nodeDef.setOnParentVersion(OnParentVersionAction.COPY);
-        nodeDef.setProtected(false);
-        return nodeDef;
-    }
-
-    /**
-     * attributeWildcardToPropDef
-     */
-    private PropDef wildcardPropDef() {
-        PropDefImpl propDef = new PropDefImpl();
-        propDef.setName(PropDef.ANY_NAME);
-        propDef.setMandatory(false);
-        propDef.setMultiple(false);
-        propDef.setRequiredType(PropertyType.UNDEFINED);
-        propDef.setValueConstraints(new ValueConstraint[]{});
-        propDef.setDefaultValues(new InternalValue[]{});
-        propDef.setAutoCreated(false);
-        propDef.setOnParentVersion(OnParentVersionAction.COPY);
-        propDef.setProtected(false);
-        return propDef;
-    }
-
-    /**
-     * wildcardToNodeDef
-     */
-    private NodeDef wildcardNodeDef() {
-        NodeDefImpl nodeDef = new NodeDefImpl();
-        nodeDef.setName(NodeDef.ANY_NAME);
-        nodeDef.setMandatory(false);
-        nodeDef.setAllowsSameNameSiblings(false);
-        nodeDef.setDefaultPrimaryType(NodeDef.ANY_NAME);
-        nodeDef.setRequiredPrimaryTypes(new QName[]{});
-        nodeDef.setAutoCreated(false);
-        nodeDef.setOnParentVersion(OnParentVersionAction.COPY);
-        nodeDef.setProtected(false);
-        return nodeDef;
-    }
-
-    /**
-     * createXMLtextNodeDef
-     */
-    private NodeDef createXMLTextNodeDef() {
-        NodeDefImpl nodeDef = new NodeDefImpl();
-        nodeDef.setName(QName.JCR_XMLTEXT);
-        nodeDef.setMandatory(false);
-        nodeDef.setAllowsSameNameSiblings(true);
-        nodeDef.setDefaultPrimaryType(XML_TEXT_NODETYPE_NAME);
-        nodeDef.setRequiredPrimaryTypes(new QName[]{XML_TEXT_NODETYPE_NAME});
-        nodeDef.setAutoCreated(false);
-        nodeDef.setOnParentVersion(OnParentVersionAction.COPY);
-        nodeDef.setProtected(false);
-        return nodeDef;
-    }
-
-    /**
-     * addXMLTextNodeType
-     */
-    private void addXMLTextNodeType() {
-        // If the XML text node type already exists, do nothing
-        if (nodeTypeDefs.containsKey(XML_TEXT_NODETYPE_NAME)) return;
-
-        // Otherwise create a new node type def and set its attributes
-        NodeTypeDef ntd = new NodeTypeDef();
-        ntd.setName(XML_TEXT_NODETYPE_NAME);
-        ntd.setSupertypes(new QName[]{QName.NT_BASE});
-        ntd.setPrimaryItemName(null);
-        ntd.setMixin(false);
-        ntd.setOrderableChildNodes(false);
-        ntd.setChildNodeDefs(new NodeDef[]{});
-
-        // The XML text node type defines a single property called jcr:xmlcharacters
-        // Create the property def for this property
-        PropDefImpl pd = new PropDefImpl();
-        pd.setName(QName.JCR_XMLCHARACTERS);
-        pd.setDeclaringNodeType(XML_TEXT_NODETYPE_NAME);
-        pd.setAutoCreated(false);
-        pd.setDefaultValues(new InternalValue[]{});
-        pd.setMandatory(false);
-        pd.setMultiple(false);
-        pd.setOnParentVersion(OnParentVersionAction.COPY);
-        pd.setProtected(false);
-        pd.setRequiredType(PropertyType.STRING);
-        pd.setValueConstraints(new ValueConstraint[]{});
-
-        // Add the jcr:xmlcharacters properyt def to the node type def
-        ntd.setPropertyDefs(new PropDef[]{pd});
-
-        // Add the node type def to the set of node type defs
-        nodeTypeDefs.put(ntd.getName(), ntd);
-    }
-
-    /**
-     * convertBuiltInKindToPropertyType
-     */
-    private int convertBuiltInKindToPropertyType(short kind) {
-        int propertyType;
-        switch (kind) {
-            case XSConstants.ANYSIMPLETYPE_DT:
-            case XSConstants.STRING_DT:
-            case XSConstants.ID_DT:
-            case XSConstants.ENTITY_DT:
-            case XSConstants.NOTATION_DT:
-            case XSConstants.NORMALIZEDSTRING_DT:
-            case XSConstants.TOKEN_DT:
-            case XSConstants.LANGUAGE_DT:
-            case XSConstants.NMTOKEN_DT:
-                propertyType = PropertyType.STRING;
-                break;
-            case XSConstants.BOOLEAN_DT:
-                propertyType = PropertyType.BOOLEAN;
-                break;
-            case XSConstants.DECIMAL_DT:
-            case XSConstants.FLOAT_DT:
-            case XSConstants.DOUBLE_DT:
-                propertyType = PropertyType.DOUBLE;
-                break;
-            case XSConstants.DURATION_DT:
-            case XSConstants.DATETIME_DT:
-            case XSConstants.TIME_DT:
-            case XSConstants.DATE_DT:
-            case XSConstants.GYEARMONTH_DT:
-            case XSConstants.GYEAR_DT:
-            case XSConstants.GMONTHDAY_DT:
-            case XSConstants.GDAY_DT:
-            case XSConstants.GMONTH_DT:
-                propertyType = PropertyType.DATE;
-                break;
-            case XSConstants.HEXBINARY_DT:
-            case XSConstants.BASE64BINARY_DT:
-            case XSConstants.ANYURI_DT:
-                propertyType = PropertyType.BINARY;
-                break;
-            case XSConstants.QNAME_DT:
-            case XSConstants.NAME_DT:
-            case XSConstants.NCNAME_DT:
-                propertyType = PropertyType.NAME;
-                break;
-            case XSConstants.IDREF_DT:
-                propertyType = PropertyType.REFERENCE;
-                break;
-            case XSConstants.INTEGER_DT:
-            case XSConstants.NONPOSITIVEINTEGER_DT:
-            case XSConstants.NEGATIVEINTEGER_DT:
-            case XSConstants.LONG_DT:
-            case XSConstants.INT_DT:
-            case XSConstants.SHORT_DT:
-            case XSConstants.BYTE_DT:
-            case XSConstants.NONNEGATIVEINTEGER_DT:
-            case XSConstants.UNSIGNEDLONG_DT:
-            case XSConstants.UNSIGNEDINT_DT:
-            case XSConstants.UNSIGNEDSHORT_DT:
-            case XSConstants.UNSIGNEDBYTE_DT:
-            case XSConstants.POSITIVEINTEGER_DT:
-                propertyType = PropertyType.LONG;
-                break;
-            case XSConstants.LISTOFUNION_DT:
-            case XSConstants.LIST_DT:
-            case XSConstants.UNAVAILABLE_DT:
-                propertyType = PropertyType.STRING;
-                break;
-            default:
-                propertyType = PropertyType.STRING;
-                break;
-        }
-        return propertyType;
-    }
-
-    private String noNull(String s) {
-        return s != null ? s : "";
-    }
-}
\ No newline at end of file
diff --git a/contrib/nt-ns-util/src/test/java/org/apache/jackrabbit/core/nodetype/compact/CompactNodeTypeDefTest.java b/contrib/nt-ns-util/src/test/java/org/apache/jackrabbit/core/nodetype/compact/CompactNodeTypeDefTest.java
deleted file mode 100644
index 0ed8a46..0000000
--- a/contrib/nt-ns-util/src/test/java/org/apache/jackrabbit/core/nodetype/compact/CompactNodeTypeDefTest.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * $Id:$
- *
- * Copyright 2002-2004 Day Management AG, Switzerland.
- *
- * Licensed under the Day RI License, Version 2.0 (the "License"),
- * as a reference implementation of the following specification:
- *
- *   Content Repository API for Java Technology, revision 0.13
- *        <http://www.jcp.org/en/jsr/detail?id=170>
- *
- * You may not use this file except in compliance with the License.
- * You may obtain a copy of the License files at
- *
- *     http://www.day.com/content/en/licenses/day-ri-license-2.0
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.nodetype.compact;
-
-import org.apache.jackrabbit.core.nodetype.NodeTypeDef;
-import org.apache.jackrabbit.core.nodetype.PropDefImpl;
-import org.apache.jackrabbit.core.nodetype.ValueConstraint;
-import org.apache.jackrabbit.core.nodetype.NodeDefImpl;
-import org.apache.jackrabbit.core.nodetype.PropDef;
-import org.apache.jackrabbit.core.nodetype.NodeDef;
-import org.apache.jackrabbit.core.nodetype.NodeTypeDefDiff;
-import org.apache.jackrabbit.core.value.InternalValue;
-import org.apache.jackrabbit.name.QName;
-import org.apache.jackrabbit.util.name.NamespaceMapping;
-import javax.jcr.PropertyType;
-import javax.jcr.version.OnParentVersionAction;
-import java.util.List;
-import java.io.FileReader;
-import java.io.StringWriter;
-import java.io.StringReader;
-import junit.framework.TestCase;
-
-public class CompactNodeTypeDefTest extends TestCase {
-    private static final String TEST_FILE = "applications/test/cnd-reader-test-input.cnd";
-    private static final String NS_PREFIX = "ex";
-    private static final String NS_URI = "http://apache.org/incubator/jackrabbit/example";
-
-    private static final QName NODE_TYPE_NAME = new QName(NS_URI, "NodeType");
-    private static final QName PARENT_NODE_TYPE_1 = new QName(NS_URI, "ParentNodeType1");
-    private static final QName PARENT_NODE_TYPE_2 = new QName(NS_URI, "ParentNodeType2");
-    private static final QName[] SUPERTYPES = new QName[]{PARENT_NODE_TYPE_1, PARENT_NODE_TYPE_2};
-
-    private static final QName PROPERTY_NAME = new QName(NS_URI, "property");
-    private static final long DEFAULT_VALUE_1 = 1;
-    private static final long DEFAULT_VALUE_2 = 2;
-    private static final String VALUE_CONSTRAINT = "[1,10]";
-
-    private static final QName CHILD_NODE_NAME = new QName(NS_URI, "node");
-    private static final QName REQUIRED_NODE_TYPE_1 = new QName(NS_URI, "RequiredNodeType1");
-    private static final QName REQUIRED_NODE_TYPE_2 = new QName(NS_URI, "RequiredNodeType2");
-    private static final QName[] REQUIRED_NODE_TYPES = new QName[]{REQUIRED_NODE_TYPE_1, REQUIRED_NODE_TYPE_2};
-
-    private NodeTypeDef modelNodeTypeDef;
-
-    protected void setUp() throws Exception {
-        NamespaceMapping namespaceMapping = new NamespaceMapping();
-        namespaceMapping.setMapping(NS_PREFIX, NS_URI);
-        InternalValue dv1 = InternalValue.create(DEFAULT_VALUE_1);
-        InternalValue dv2 = InternalValue.create(DEFAULT_VALUE_2);
-        ValueConstraint vc = ValueConstraint.create(PropertyType.LONG, VALUE_CONSTRAINT, namespaceMapping);
-        InternalValue[] defaultValues = new InternalValue[]{dv1, dv2};
-        ValueConstraint[] valueConstraints = new ValueConstraint[]{vc};
-
-        PropDefImpl pd = new PropDefImpl();
-        pd.setName(PROPERTY_NAME);
-        pd.setRequiredType(PropertyType.LONG);
-        pd.setMandatory(true);
-        pd.setAutoCreated(true);
-        pd.setProtected(true);
-        pd.setMultiple(true);
-        pd.setOnParentVersion(OnParentVersionAction.VERSION);
-        pd.setDefaultValues(defaultValues);
-        pd.setValueConstraints(valueConstraints);
-        pd.setDeclaringNodeType(NODE_TYPE_NAME);
-
-        NodeDefImpl nd = new NodeDefImpl();
-        nd.setName(CHILD_NODE_NAME);
-        nd.setRequiredPrimaryTypes(REQUIRED_NODE_TYPES);
-        nd.setDefaultPrimaryType(REQUIRED_NODE_TYPE_1);
-        nd.setMandatory(true);
-        nd.setAutoCreated(true);
-        nd.setProtected(true);
-        nd.setAllowsSameNameSiblings(true);
-        nd.setOnParentVersion(OnParentVersionAction.VERSION);
-        nd.setDeclaringNodeType(NODE_TYPE_NAME);
-
-        modelNodeTypeDef = new NodeTypeDef();
-        modelNodeTypeDef.setName(NODE_TYPE_NAME);
-        modelNodeTypeDef.setSupertypes(SUPERTYPES);
-        modelNodeTypeDef.setOrderableChildNodes(true);
-        modelNodeTypeDef.setMixin(true);
-        modelNodeTypeDef.setPrimaryItemName(PROPERTY_NAME);
-        modelNodeTypeDef.setPropertyDefs(new PropDef[]{pd});
-        modelNodeTypeDef.setChildNodeDefs(new NodeDef[]{nd});
-    }
-
-    public void testCompactNodeTypeDef() throws Exception {
-
-        // Read in node type def from test file
-        CompactNodeTypeDefReader cndReader = new CompactNodeTypeDefReader(new FileReader(TEST_FILE), TEST_FILE);
-        List ntdList = cndReader.getNodeTypeDefs();
-        NamespaceMapping nsm = cndReader.getNamespaceMapping();
-        NodeTypeDef ntd = (NodeTypeDef)ntdList.get(0);
-
-        // Test CND Reader by comparing imported NTD with model NTD.
-        NodeTypeDefDiff diff = NodeTypeDefDiff.create(modelNodeTypeDef, ntd);
-        if (diff.isModified()){
-            fail("Imported node type definition is not identical to model definition");
-        }
-
-        // Put imported node type def back into CND form with CND writer
-        StringWriter sw = new StringWriter();
-        CompactNodeTypeDefWriter cndWriter = new CompactNodeTypeDefWriter(ntdList, nsm, sw);
-        cndWriter.write();
-        cndWriter.close();
-
-        // Rerun the reader on the product of the writer
-        cndReader = new CompactNodeTypeDefReader(new StringReader(sw.toString()), TEST_FILE);
-        ntdList = cndReader.getNodeTypeDefs();
-        ntd = (NodeTypeDef)ntdList.get(0);
-
-        diff = NodeTypeDefDiff.create(modelNodeTypeDef, ntd);
-        if (diff.isModified()){
-            fail("Exported node type definition was not successfully read back in");
-        }
-    }
-}
diff --git a/contrib/nt-ns-util/src/test/java/org/apache/jackrabbit/core/nodetype/compact/TestAll.java b/contrib/nt-ns-util/src/test/java/org/apache/jackrabbit/core/nodetype/compact/TestAll.java
deleted file mode 100644
index ad645dd..0000000
--- a/contrib/nt-ns-util/src/test/java/org/apache/jackrabbit/core/nodetype/compact/TestAll.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * $Id:$
- *
- * Copyright 2002-2004 Day Management AG, Switzerland.
- *
- * Licensed under the Day RI License, Version 2.0 (the "License"),
- * as a reference implementation of the following specification:
- *
- *   Content Repository API for Java Technology, revision 0.13
- *        <http://www.jcp.org/en/jsr/detail?id=170>
- *
- * You may not use this file except in compliance with the License.
- * You may obtain a copy of the License files at
- *
- *     http://www.day.com/content/en/licenses/day-ri-license-2.0
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.nodetype.compact;
-
-import junit.framework.TestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * Test suite that includes all test cases for compact node type tools.
- */
-public class TestAll extends TestCase {
-
-    /**
-     * Returns a <code>Test</code> suite that executes all tests inside this
-     * package.
-     *
-     * @return a <code>Test</code> suite that executes all tests inside this
-     *         package.
-     */
-    public static Test suite() {
-        TestSuite suite = new TestSuite("Compact Node Type Tools Tests");
-        suite.addTestSuite(org.apache.jackrabbit.core.nodetype.compact.CompactNodeTypeDefTest.class);
-        return suite;
-    }
-}
\ No newline at end of file
diff --git a/contrib/nt-ns-util/src/test/java/org/apache/jackrabbit/util/nodetype/SchemaConverterTest.java b/contrib/nt-ns-util/src/test/java/org/apache/jackrabbit/util/nodetype/SchemaConverterTest.java
deleted file mode 100644
index 510a125..0000000
--- a/contrib/nt-ns-util/src/test/java/org/apache/jackrabbit/util/nodetype/SchemaConverterTest.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * $Id:$
- *
- * Copyright 2002-2004 Day Management AG, Switzerland.
- *
- * Licensed under the Day RI License, Version 2.0 (the "License"),
- * as a reference implementation of the following specification:
- *
- *   Content Repository API for Java Technology, revision 0.13
- *        <http://www.jcp.org/en/jsr/detail?id=170>
- *
- * You may not use this file except in compliance with the License.
- * You may obtain a copy of the License files at
- *
- *     http://www.day.com/content/en/licenses/day-ri-license-2.0
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.util.nodetype;
-
-
-import org.apache.jackrabbit.core.nodetype.compact.CompactNodeTypeDefReader;
-import org.apache.jackrabbit.util.name.NamespaceMapping;
-import org.apache.jackrabbit.util.name.NamespaceExtractor;
-import org.apache.jackrabbit.core.nodetype.NodeTypeDef;
-import org.apache.jackrabbit.name.NamespaceResolver;
-import org.apache.log4j.Logger;
-
-import java.util.*;
-import java.io.*;
-
-import junit.framework.TestCase;
-
-import javax.jcr.NamespaceException;
-
-/**
- * Tests the SchemaConverter
- *
- * Usage:
- * java SchemaConverterTest infile outfile defaultprefix
- *
- * infile - XML schema file to be converted
- * outfile - file to which a pretty print of the resulting namespace mappings and node type definitions is put.
- * defaultprefix - The prefix used in cases where the XML schema file specifies a default namespace
- */
-public class SchemaConverterTest extends TestCase {
-
-    private static Logger log = Logger.getLogger(SchemaConverterTest.class);
-    private static final String TEST_INPUT_FILE = "applications/test/xsd-converter-test-input.xsd";
-    private static final String MODEL_RESULT_FILE = "applications/test/xsd-converter-model-output.cnd";
-    private static final String DEFAULT_PREFIX = "test";
-
-    public void testSchemaConverter() {
-        try {
-            NamespaceExtractor nse = new NamespaceExtractor(TEST_INPUT_FILE, DEFAULT_PREFIX);
-            NamespaceMapping nsm = nse.getNamespaceMapping();
-
-            SchemaConverter nts = new SchemaConverter(TEST_INPUT_FILE);
-            List testList = nts.getNodeTypeDefs();
-
-            CompactNodeTypeDefReader ntr = new CompactNodeTypeDefReader(new FileReader(MODEL_RESULT_FILE), MODEL_RESULT_FILE, nsm);
-            List modelList = ntr.getNodeTypeDefs();
-
-            TreeMap orderedTestList = new TreeMap();
-            TreeMap orderedModelList = new TreeMap();
-
-            fillTreeMap(orderedTestList, testList, nsm);
-            fillTreeMap(orderedModelList, modelList, nsm);
-
-            Iterator testIterator = orderedTestList.values().iterator();
-            Iterator modelIterator = orderedModelList.values().iterator();
-
-            while(testIterator.hasNext() && modelIterator.hasNext()){
-                NodeTypeDef testDef = (NodeTypeDef)testIterator.next();
-                NodeTypeDef modelDef = (NodeTypeDef)modelIterator.next();
-                if (!testDef.equals(modelDef)){
-                    fail("test result differs from model result");
-                    break;
-                }
-            }
-        } catch (Exception e) {
-            String msg = e.getMessage();
-            log.debug(msg);
-        }
-    }
-
-    private void fillTreeMap(TreeMap tm, List l, NamespaceResolver nsr) throws NamespaceException {
-        for(Iterator i = l.iterator(); i.hasNext();){
-            NodeTypeDef ntd = (NodeTypeDef)i.next();
-            String prefix = nsr.getPrefix(ntd.getName().getNamespaceURI());
-            String localName = ntd.getName().getLocalName();
-            tm.put(prefix + ":" + localName, ntd);
-        }
-    }
-}
\ No newline at end of file
diff --git a/contrib/nt-ns-util/src/test/java/org/apache/jackrabbit/util/nodetype/TestAll.java b/contrib/nt-ns-util/src/test/java/org/apache/jackrabbit/util/nodetype/TestAll.java
deleted file mode 100644
index 60b4fad..0000000
--- a/contrib/nt-ns-util/src/test/java/org/apache/jackrabbit/util/nodetype/TestAll.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * $Id:$
- *
- * Copyright 2002-2004 Day Management AG, Switzerland.
- *
- * Licensed under the Day RI License, Version 2.0 (the "License"),
- * as a reference implementation of the following specification:
- *
- *   Content Repository API for Java Technology, revision 0.13
- *        <http://www.jcp.org/en/jsr/detail?id=170>
- *
- * You may not use this file except in compliance with the License.
- * You may obtain a copy of the License files at
- *
- *     http://www.day.com/content/en/licenses/day-ri-license-2.0
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.util.nodetype;
-
-import junit.framework.TestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * Test suite that includes all test cases for node type utilities.
- */
-public class TestAll extends TestCase {
-
-    /**
-     * Returns a <code>Test</code> suite that executes all tests inside this
-     * package.
-     *
-     * @return a <code>Test</code> suite that executes all tests inside this
-     *         package.
-     */
-    public static Test suite() {
-        TestSuite suite = new TestSuite("Node Type Utilities Tests");
-        suite.addTestSuite(org.apache.jackrabbit.util.nodetype.SchemaConverterTest.class);
-        return suite;
-    }
-}
\ No newline at end of file
diff --git a/contrib/orm-persistence/HEADER.txt b/contrib/orm-persistence/HEADER.txt
deleted file mode 100644
index 1c669de..0000000
--- a/contrib/orm-persistence/HEADER.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
\ No newline at end of file
diff --git a/contrib/orm-persistence/LICENSE.txt b/contrib/orm-persistence/LICENSE.txt
deleted file mode 100644
index d645695..0000000
--- a/contrib/orm-persistence/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/contrib/orm-persistence/README.txt b/contrib/orm-persistence/README.txt
deleted file mode 100644
index 04b663d..0000000
--- a/contrib/orm-persistence/README.txt
+++ /dev/null
@@ -1,114 +0,0 @@
-ORM persistence managers for Jackrabbit README
-----------------------------------------------
-
-License (see also LICENSE.txt)
-------------------------------
-
-Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                    as applicable.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-Introduction
-------------
-
-This sub-project of Jackrabbit providers two ORM-based persistence manager
-implementation. 
-- OJB (http://db.apache.org/ojb) -based persistence manager
-- Hibernate (http://www.hibernate.org) -based persistence manager
-
-This also means that Jackrabbit can now store all content in a database.
-
-Requirements
-------------
-
-This project assumes that you have already successfully compiled and 
-installed the parent project Jackrabbit into your maven repository. If 
-this is not the case, go back to the root project and launch : 
-  maven jar:install
-  
-For running the full tests, you will require a rather large amount of 
-free memory, as the default setup with HSQLDB requires a lot of memory
-when handling large BLOB files.
-
-Existing limitations 
---------------------
-
-- Values (including multi-values) are stored in a single database column 
-  in this implementation, limiting the length of values to the length
-  defines in the SQL schema and the mapping files (there is no hard-coded
-  limitation in the Java implementation though).
-    
-Running
--------
-
-By default the package comes configured to run against an embedded HSQLDB
-database. In order for the tests and the benchmark to run, you must first
-run :
-
-  maven clean
-  
-The above resets the database, and clean the whole environment to run the
-tests and/or the benchmark. You can then launch 
-
-  maven start.test.server
-  
-This launches the database in server mode (full embedded mode was not 
-possible to implement because it doesn't finalize properly). Note that 
-your shell is now blocked while running the database (CTRL+C to stop it)
-and you will need a second shell to run the tests/benchmarks
-
-From a second shell, you can now run
-
-  maven
-  
-This will run the tests. Please note that the tests may take a while 
-to run (1 minute on a P4 3.0Ghz).
-
-If you just want to build the project without the tests : 
-
-  maven -Dmaven.test.skip=true
-  
-Recycling HSQLDB
-----------------
-
-If you want to restart a test session, here is the quick procedure to do so:
-
-1. In the shell that launched the database, press CTRL+C
-2. In the other shell, type : maven clean (this resets the database to an 
-   empty schema by copying a file, so don't do it while HSQLDB is running !)
-3. Relaunch the database in it's shell by typing : maven start.test.server
-That's it !
-
-Using MySQL
------------
-
-The ORM persistence managers have also been tested against a MySQL database. 
-In order to configure the persistence managers to use MySQL instead of HSQLDB
-you need to change the following files, depending on whether you want to use
-the OJB or Hibernate implementation : 
-
-For OJB : applications/test/ojb/repository_database.xml
-For Hibernate : applications/test/hibernate.properties
-
-This project also contains a database initialization script that contains the
-DB schema :
-
-  create_db_mysql.sql
-  
-Also available is a batch script for Windows, that initializes a MySQL database
-called "jackrabbit", and recycles it if it already exists : 
-
-  reset_db_mysql.bat
-
-Enjoy !   
\ No newline at end of file
diff --git a/contrib/orm-persistence/applications/test/OJB.properties b/contrib/orm-persistence/applications/test/OJB.properties
deleted file mode 100644
index 8dd5098..0000000
--- a/contrib/orm-persistence/applications/test/OJB.properties
+++ /dev/null
@@ -1,453 +0,0 @@
-#<!--
-#/* Copyright 2002-2004 The Apache Software Foundation
-# *
-# * Licensed under the Apache License, Version 2.0 (the "License");
-# * you may not use this file except in compliance with the License.
-# * You may obtain a copy of the License at
-# *
-# *     http://www.apache.org/licenses/LICENSE-2.0
-# *
-# * Unless required by applicable law or agreed to in writing, software
-# * distributed under the License is distributed on an "AS IS" BASIS,
-# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# * See the License for the specific language governing permissions and
-# * limitations under the License.
-# */
-#-->
-# OJB.properties -- configuration of the OJB runtime environment
-# Version: 1.0
-# (c) 2001, 2002, 2003 Apache Software Foundation
-# Author: Thomas Mahler and many others
-# @version $Id: OJB.properties,v 1.75 2004/06/27 23:36:23 arminw Exp $
-#
-#----------------------------------------------------------------------------------------
-# repository file settings
-#----------------------------------------------------------------------------------------
-# The repositoryFile entry tells OJB to use this file as as its standard mapping
-# repository. The file is looked up from the classpath.
-#
-repositoryFile=ojb/repository.xml
-#
-# If the useSerializedRepository entry is set to true, OJB tries to load a
-# serialized version of the repository for performance reasons.
-# if set to false, OJB always loads the xml file.
-# Setting this flag to true will accelerate the startup sequence of OJB.
-# If set to true changes to the repository.xml file will only be detected
-# after maually deleting the repository.xml.serialized file.
-useSerializedRepository=false
-#
-# If Repository serialization is used the entry serializedRepositoryPath defines the
-# directory where the Repository is written to and read from.
-# this entry is used only when the useSerializedRepository flag is set to true
-#
-serializedRepositoryPath=.
-#
-#----------------------------------------------------------------------------------------
-# PersistenceBrokerFactory / PersistenceBroker
-#----------------------------------------------------------------------------------------
-# The PersistenceBrokerFactoryClass entry decides which concrete
-# PersistenceBrokerFactory implemention is to be used.
-PersistenceBrokerFactoryClass=org.apache.ojb.broker.core.PersistenceBrokerFactoryDefaultImpl
-# If in managed environment *only* the PB-api was used it's recommended to use this factory
-# to enable the PersistenceBroker instances to participate in the JTA transaction. This makes
-# e.g. PBStateListener work properly in managed environments.
-#PersistenceBrokerFactoryClass=org.apache.ojb.broker.core.PersistenceBrokerFactorySyncImpl
-#
-#
-# The PersistenceBrokerClass entry decides which concrete PersistenceBroker
-# implementation is to be served by the PersistenceBrokerFactory.
-# This is the singlevm implementation:
-PersistenceBrokerClass=org.apache.ojb.broker.core.PersistenceBrokerImpl
-#
-# This is an implementation that uses Prevayler (prevayler.sf.net) as the persistent storage.
-# Using this implementation OJB works as a simple OODBMS
-#PersistenceBrokerClass=org.apache.ojb.broker.prevayler.PBPrevaylerImpl
-#
-#----------------------------------------------------------------------------------------
-# PersistenceBroker pool
-#----------------------------------------------------------------------------------------
-# PersistenceBroker pool configuration
-# This pool uses the jakarta-commons-pool api.
-# There you can find things described in detail.
-#
-# maximum number of brokers that can be borrowed from the
-# pool at one time. When non-positive, there is no limit.
-maxActive=100
-#
-# controls the maximum number of brokers that can sit idle in the
-# pool (per key) at any time. When non-positive, there is no limit
-maxIdle=-1
-#
-# max time block to get broker instance from pool, after that exception is thrown.
-# When non-positive, block till last judgement
-maxWait=2000
-#
-# indicates how long the eviction thread should sleep before "runs" of examining
-# idle objects. When non-positive, no eviction thread will be launched.
-timeBetweenEvictionRunsMillis=-1
-#
-# specifies the minimum amount of time that an broker may sit idle
-# in the pool before it is eligable for eviction due to idle time.
-# When non-positive, no object will be dropped from the pool due
-# to idle time alone (depends on timeBetweenEvictionRunsMillis > 0)
-minEvictableIdleTimeMillis=1000000
-#
-# specifies the behaviour of the pool when broker capacity is
-# exhausted (see maxActive above)
-# 0 - fail
-# 1 - block
-# 2 - grow
-whenExhaustedAction=0
-#
-#
-#----------------------------------------------------------------------------------------
-# ConnectionFactory / Default ConnectionPool
-#----------------------------------------------------------------------------------------
-# The ConnectionFactoryClass entry determines which kind of ConnectionFactory
-# is to be used within org.apache.ojb as connection factory.
-# A ConnectionFactory is responsible for creating
-# JDBC Connections. Current version ships four implementations:
-#
-# 1. ConnectionFactoryNotPooledImpl
-#    No pooling, no playing around.
-#    Every connection request returns a new connection,
-#    every connection release close the connection.
-# 2. ConnectionFactoryPooledImpl
-#    This implementation supports connection pooling.
-# 3. ConnectionFactoryDBCPImpl
-#    Using the jakarta-DBCP api for connection management, support
-#    connection- and prepared statement-pooling, abandoned connection handling.
-# 4. ConnectionFactoryManagedImpl
-#    Connection factory for use within managed environments - e.g. JBoss.
-#    Every obtained DataSource was wrapped within OJB (and ignore
-#    e.g. con.commit() calls within OJB).
-#    Use this implementation e.g if you use Datasources from an application server.
-#
-# Use the OJB performance tests to decide, which implementation is best for you.
-# The proper way of obtaining a connection is configured in
-# JDBCConnectionDescriptor entries in the repository.xml file.
-# If want a more fine grained control of each connection pool used by OJB,
-# take a look at the repository.dtd, there was a possibility to override
-# this default connection factory entry in each JDBCConnectionDescriptor.
-#
-ConnectionFactoryClass=org.apache.ojb.broker.accesslayer.ConnectionFactoryPooledImpl
-#ConnectionFactoryClass=org.apache.ojb.broker.accesslayer.ConnectionFactoryNotPooledImpl
-#ConnectionFactoryClass=org.apache.ojb.broker.accesslayer.ConnectionFactoryManagedImpl
-#ConnectionFactoryClass=org.apache.ojb.broker.accesslayer.ConnectionFactoryDBCPImpl
-#
-#
-#----------------------------------------------------------------------------------------
-# ConnectionManager
-#----------------------------------------------------------------------------------------
-# The ConnectionManagerClass entry defines the ConnectionManager implemementation to be used
-ConnectionManagerClass=org.apache.ojb.broker.accesslayer.ConnectionManagerImpl
-#
-#
-#----------------------------------------------------------------------------------------
-# SqlGenerator
-#----------------------------------------------------------------------------------------
-# The SqlGeneratorClass entry defines the SqlGenerator implemementation to be used
-SqlGeneratorClass=org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl
-#
-#
-#----------------------------------------------------------------------------------------
-# IndirectionHandler
-#----------------------------------------------------------------------------------------
-# The IndirectionHandlerClass entry defines the class to be used by OJB's proxies to
-# handle method invocations
-#
-IndirectionHandlerClass=org.apache.ojb.broker.core.proxy.IndirectionHandlerDefaultImpl
-#
-#----------------------------------------------------------------------------------------
-# ListProxy
-#----------------------------------------------------------------------------------------
-# The ListProxyClass entry defines the proxy class to be used for collections that
-# implement the java.util.List interface.
-#
-ListProxyClass=org.apache.ojb.broker.core.proxy.ListProxyDefaultImpl
-#
-#----------------------------------------------------------------------------------------
-# SetProxy
-#----------------------------------------------------------------------------------------
-# The SetProxyClass entry defines the proxy class to be used for collections that
-# implement the java.util.Set interface.
-#
-SetProxyClass=org.apache.ojb.broker.core.proxy.SetProxyDefaultImpl
-#
-#----------------------------------------------------------------------------------------
-# CollectionProxy
-#----------------------------------------------------------------------------------------
-# The CollectionProxyClass entry defines the proxy class to be used for collections that
-# do not implement java.util.List or java.util.Set.
-#
-CollectionProxyClass=org.apache.ojb.broker.core.proxy.CollectionProxyDefaultImpl
-#
-#----------------------------------------------------------------------------------------
-# StatementManager
-#----------------------------------------------------------------------------------------
-# The StatementManagerClass entry defines the StatementManager implemementation to be used
-StatementManagerClass=org.apache.ojb.broker.accesslayer.StatementManager
-#
-#
-#----------------------------------------------------------------------------------------
-# StatementsForClass
-#----------------------------------------------------------------------------------------
-# The StatementsForClassClass entry defines the StatementsForClass implemementation to be used
-# to implement cached statements.
-StatementsForClassClass=org.apache.ojb.broker.accesslayer.StatementsForClassImpl
-#
-#
-#----------------------------------------------------------------------------------------
-# JdbcAccess
-#----------------------------------------------------------------------------------------
-# The JdbcAccessClass entry defines the JdbcAccess implemementation to be used
-JdbcAccessClass=org.apache.ojb.broker.accesslayer.JdbcAccessImpl
-#
-#
-#----------------------------------------------------------------------------------------
-# RowReader
-#----------------------------------------------------------------------------------------
-# Set the standard RowReader implementation. It is also possible to specify the
-# RowReader on class-descriptor level.
-RowReaderDefaultClass=org.apache.ojb.broker.accesslayer.RowReaderDefaultImpl
-#
-#----------------------------------------------------------------------------------------
-# Object cache
-#----------------------------------------------------------------------------------------
-# The ObjectCacheClass entry tells OJB which concrete ObjectCache
-# implementation is to be used as standard cache.
-# Its also possible to override this entry adding object-cache elements
-# on jdbc-connection-descriptor level and
-# per class-descriptor in repository file. More info see documentation.
-#
-ObjectCacheClass=org.apache.ojb.broker.cache.ObjectCacheDefaultImpl
-#ObjectCacheClass=org.apache.ojb.broker.cache.ObjectCacheEmptyImpl
-#ObjectCacheClass=org.apache.ojb.broker.cache.ObjectCachePerBrokerImpl
-#ObjectCacheClass=org.apache.ojb.broker.cache.ObjectCacheJCSPerClassImpl
-#ObjectCacheClass=org.apache.ojb.broker.cache.ObjectCachePerClassImpl
-#
-#
-# This property is only relevant if the per class-descriptor object-cache
-# declaration was used in conjunction with metadata runtime changes.
-# If set 'flase' the class name of the object is used
-# to find a per class ObjectCache implementation.
-# If set 'true' the ObjectCacheDescriptor instance is used as key to
-# find a per class ObjectCache, this enables to use different ObjectCache
-# instances for the same class.
-descriptorBasedCaches=false
-#
-#
-# Use CacheFilters to do filter operations before caching methods were
-# called. Build your own filter class by implementing org.apache.ojb.cache.CacheFilter.
-# It is possible to use a arbitrary number of CacheFilters, but this slows
-# down the performance of the cache, thus handle with care.
-#
-# - org.apache.ojb.broker.cache.CacheFilterClassImpl
-# allows filtering of classes
-# - org.apache.ojb.broker.cache.CacheFilterPackageImpl
-# allows filtering of packages
-# More info see Javadoc of the according classes.
-# Set a comma separated list of CacheFilter.
-#ObjectCacheFilter=org.apache.ojb.broker.cache.CacheFilterClassImpl,org.apache.ojb.broker.cache.CacheFilterPackageImpl
-#
-#----------------------------------------------------------------------------------------
-# Locking
-#----------------------------------------------------------------------------------------
-# The LockManagerClass entry tells OJB which concrete LockManager
-# implementation is to be used.
-LockManagerClass=org.apache.ojb.odmg.locking.LockManagerDefaultImpl
-#
-# The LockMapClass entry tells OJB which concrete LockMap
-# implementation is to be used.
-# If OJB is running on multiple concurrent clients it is recommended
-# to use the RemoteLockMapImpl. It guarantees to provide
-# Lockmanagement across multiple JVMs.
-# This Implemenation relies on a Servlet based Lockserver. To use it you have to
-# deploy the ojb-lockserver.war into a Servlet engine.
-# and you have to set the Property LockServletUrl to point to this servlet.
-# (see LockServletUrl section below).
-# If OJB is running in a single JVM (e.g. in a desktop app, or in a servlet
-# engine) it is save to use the InMemoryLockMapImpl. Using it will result
-# in a large performance gain.
-#LockMapClass=org.apache.ojb.odmg.locking.RemoteLockMapImpl
-LockMapClass=org.apache.ojb.odmg.locking.InMemoryLockMapImpl
-#
-# The LockTimeout entry defines the maximum time in milliseconds
-# that a lock may be hold. Defaults to 60000 = 1 minute
-LockTimeout=60000
-#
-# The ImplicitLocking entry defines if implicit lock acquisition is
-# to be used. If set to true OJB implicitely locks objects to ODMG
-# transactions after performing OQL queries.
-# If implicit locking is used locking objects is recursive, that is
-# associated objects are also locked.
-# If ImplicitLocking is set to false, no locks are obtained in OQL
-# queries and there is also no recursive locking.
-ImplicitLocking=true
-#ImplicitLocking=false
-#
-#
-# The LockServletUrl entry points to the Lockserver servlet.
-# This Servlet is addressed by all distributed JVMs if the RemoteLockMapImpl
-# is used.
-LockServletUrl=http://127.0.0.1:8080/ojb-lockserver
-#
-#
-# The LockAssociations entry defines the behaviour for the OJB
-# implicit locking feature. If set to WRITE (default) acquiring a write-
-# lock on a given object x implies write locks on all objects associated
-# to x. If set to READ implicit read-locks are acquired.
-# Acquiring a read-lock on x thus allways results in implicit read-locks
-# on all associated objects.
-#LockAssociations=READ
-LockAssociations=WRITE
-#
-#
-#----------------------------------------------------------------------------------------
-# OQL / SQL settings
-#----------------------------------------------------------------------------------------
-# The OqlCollectionClass entry defines the collection type returned
-# from OQL queries. By default this value is set to DListImpl.
-# This will be good for most situations as DList allows maximum flexibility
-# in a ODMG environment. See also section 'ODMG settings'.
-# Using DLists for large resultsets may be bad for application performance.
-# For these scenarios you can use ArrayLists or Vectors.
-# Important note: the collections class to be used MUST implement the
-# interface org.apache.ojb.broker.ManageableCollection.
-#
-OqlCollectionClass=org.apache.ojb.odmg.collections.DListImpl_2
-# OqlCollectionClass=org.apache.ojb.broker.util.collections.ManageableArrayList
-# OqlCollectionClass=org.apache.ojb.broker.util.ManageableVector
-#
-# The SqlInLimit entry limits the number of values in IN-sql statement,
-# -1 for no limits. This hint is used in Criteria.
-SqlInLimit=200
-#
-#
-#----------------------------------------------------------------------------------------
-# ODMG settings
-#----------------------------------------------------------------------------------------
-# Specify the used base class for ODMG API
-# - ImplementationDefaultImpl is the default class
-# - ImplementationJTAImpl is for use in managed environments like J2EE conform
-# Application Server
-#
-ImplementationClass=org.apache.ojb.odmg.ImplementationImpl
-#ImplementationClass=org.apache.ojb.odmg.ImplementationJTAImpl
-#
-#
-# Specify the used tx handling.
-# - LocalTxManager use if you want the transaction to be associated by a thread
-# - JTATxManager use if you want the transaction to be associated via the Transaction
-# manager that is in your application server.
-#
-OJBTxManagerClass=org.apache.ojb.odmg.LocalTxManager
-#OJBTxManagerClass=org.apache.ojb.odmg.JTATxManager
-#
-#
-# Used ODMG collection implementation classes
-# (e.g. when do a Implementation#newDlist() call)
-#
-# org.odmg.DList implementation class
-DListClass=org.apache.ojb.odmg.collections.DListImpl_2
-#DListClass=org.apache.ojb.odmg.collections.DListImpl
-#
-# org.odmg.DArray implementation class
-DArrayClass=org.apache.ojb.odmg.collections.DListImpl_2
-#DArrayClass=org.apache.ojb.odmg.collections.DListImpl
-#
-# org.odmg.DMap implementation class
-DMapClass=org.apache.ojb.odmg.collections.DMapImpl
-#
-# org.odmg.DBag implementation class
-DBagClass=org.apache.ojb.odmg.collections.DBagImpl
-#
-# org.odmg.DSet implementation class
-DSetClass=org.apache.ojb.odmg.collections.DSetImpl
-#
-#
-#----------------------------------------------------------------------------------------
-# Meta data / mapping settings
-#----------------------------------------------------------------------------------------
-# The PersistentFieldClass property defines the implementation class
-# for PersistentField attributes used in the OJB MetaData layer.
-# By default the best performing attribute/refection based implementation
-# is selected (PersistentFieldDirectAccessImpl).
-#
-# - PersistentFieldDirectAccessImpl
-#   is a high-speed version of the access strategies.
-#   It does not cooperate with an AccessController,
-#   but accesses the fields directly. Persistent
-#   attributes don't need getters and setters
-#   and don't have to be declared public or protected
-# - PersistentFieldPrivilegedImpl
-#   Same as above, but does cooperate with AccessController and do not
-#   suppress the java language access check (but is slow compared with direct access).
-# - PersistentFieldIntrospectorImpl
-#   uses JavaBeans compliant calls only to access persistent attributes.
-#   No Reflection is needed. But for each attribute xxx there must be
-#   public getXxx() and setXxx() methods.
-# - PersistentFieldDynaBeanAccessImpl
-#   implementation used to access a property from a
-#   org.apache.commons.beanutils.DynaBean.
-# - PersistentFieldAutoProxyImpl
-#   for each field determines upon first access how to access this particular field
-#   (directly, as a bean, as a dyna bean) and then uses that strategy
-#
-#PersistentFieldClass=org.apache.ojb.broker.metadata.fieldaccess.PersistentFieldDirectAccessImpl
-#PersistentFieldClass=org.apache.ojb.broker.metadata.fieldaccess.PersistentFieldPrivilegedImpl
-#PersistentFieldClass=org.apache.ojb.broker.metadata.fieldaccess.PersistentFieldIntrospectorImpl
-#PersistentFieldClass=org.apache.ojb.broker.metadata.fieldaccess.PersistentFieldDynaBeanAccessImpl
-#PersistentFieldClass=org.apache.ojb.broker.metadata.fieldaccess.PersistentFieldAutoProxyImpl
-#
-# Here are the new upcoming PersistentField implementations. These classes will replace the
-# 'old' ones on next release. They pass the test-suite, but should be tested by community too.
-# The new implementations are about 50 times faster in handling nested fields.
-PersistentFieldClass=org.apache.ojb.broker.metadata.fieldaccess.PersistentFieldDirectAccessImplNew
-#PersistentFieldClass=org.apache.ojb.broker.metadata.fieldaccess.PersistentFieldPrivilegedImplNew
-#PersistentFieldClass=org.apache.ojb.broker.metadata.fieldaccess.PersistentFieldIntrospectorImplNew
-#PersistentFieldClass=org.apache.ojb.broker.metadata.fieldaccess.PersistentFieldAutoProxyImpl
-#PersistentFieldClass=org.apache.ojb.broker.metadata.fieldaccess.PersistentFieldDynaBeanImplNew
-#(DynaBean implementation does not support nested fields)
-#
-#----------------------------------------------------------------------------------------
-# Component Intercepting for Profiling and Tracing
-#----------------------------------------------------------------------------------------
-# By enabling an InterceptorClass all OJB components will use
-# this Interceptor. Interceptors allow advanced tracing and Profiling
-# of all component method calls.
-# This is currently an experimental feature useful only for OJB kernel developers.
-#
-#InterceptorClass=org.apache.ojb.broker.util.interceptor.TracingInterceptor
-#
-#----------------------------------------------------------------------------------------
-# Transaction Management and assocation
-#----------------------------------------------------------------------------------------
-# (optional, only used when OJB runs within managed environments)
-# To praticipate in JTA transaction OJB needs access to the underlying transaction manager.
-# The TransactionManager is acquired in different ways dependent on the application server.
-# The JTATransactionManagerClass property allows you to specify the class that implements
-# the proper behaviour for finding the transaction manager. Only use when OJBTxManagerClass
-# is set to a factory that uses the application server transaction manager
-# (org.apache.ojb.odmg.JTATxManager)
-#
-# JBoss Transaction Manager Factory
-JTATransactionManagerClass=org.apache.ojb.broker.transaction.tm.JBossTransactionManagerFactory
-# Weblogic Transaction Manager Factory
-#JTATransactionManagerClass=org.apache.ojb.broker.transaction.tm.WeblogicTransactionManagerFactory
-# WebSphere transaction manager factory
-#JTATransactionManagerClass=org.apache.ojb.broker.transaction.tm.WebSphereTransactionManagerFactory
-# Orion transaction manager factory
-#JTATransactionManagerClass=org.apache.ojb.broker.transaction.tm.OrionTransactionManagerFactory
-# SunOne transaction manager factory
-#JTATransactionManagerClass=org.apache.ojb.broker.transaction.tm.SunOneTransactionManagerFactory
-# JOnAs transaction manager factory
-#JTATransactionManagerClass=org.apache.ojb.broker.transaction.tm.JOnASTransactionManagerFactory
-#
-#
-#----------------------------------------------------------------------------------------
-# Logging settings are now in their own file, OJB-logging.properties
-#----------------------------------------------------------------------------------------
-#----------------------------------------------------------------------------------------
-# End of OJB.properties file
-#----------------------------------------------------------------------------------------
diff --git a/contrib/orm-persistence/applications/test/ehcache.xml b/contrib/orm-persistence/applications/test/ehcache.xml
deleted file mode 100644
index ede2591..0000000
--- a/contrib/orm-persistence/applications/test/ehcache.xml
+++ /dev/null
@@ -1,121 +0,0 @@
-<!--
-   Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                       as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-  -->
-<ehcache>
-
-    <!-- Sets the path to the directory where cache .data files are created.
-
-         If the path is a Java System Property it is replaced by
-         its value in the running VM.
-
-         The following properties are translated:
-         user.home - User's home directory
-         user.dir - User's current working directory
-         java.io.tmpdir - Default temp file path -->
-    <diskStore path="java.io.tmpdir"/>
-
-
-    <!--Default Cache configuration. These will applied to caches programmatically created through
-        the CacheManager.
-
-        The following attributes are required for defaultCache:
-
-        maxInMemory       - Sets the maximum number of objects that will be created in memory
-        eternal           - Sets whether elements are eternal. If eternal,  timeouts are ignored and the element
-                            is never expired.
-        timeToIdleSeconds - Sets the time to idle for an element before it expires.
-                            i.e. The maximum amount of time between accesses before an element expires
-                            Is only used if the element is not eternal.
-                            Optional attribute. A value of 0 means that an Element can idle for infinity
-        timeToLiveSeconds - Sets the time to live for an element before it expires.
-                            i.e. The maximum time between creation time and when an element expires.
-                            Is only used if the element is not eternal.
-                            Optional attribute. A value of 0 means that and Element can live for infinity
-        overflowToDisk    - Sets whether elements can overflow to disk when the in-memory cache
-                            has reached the maxInMemory limit.
-
-        -->
-    <defaultCache
-        maxElementsInMemory="10000"
-        eternal="false"
-        timeToIdleSeconds="120"
-        timeToLiveSeconds="120"
-        overflowToDisk="true"
-        />
-
-    <!--Predefined caches.  Add your cache configuration settings here.
-        If you do not have a configuration for your cache a WARNING will be issued when the
-        CacheManager starts
-
-        The following attributes are required for defaultCache:
-
-        name              - Sets the name of the cache. This is used to identify the cache. It must be unique.
-        maxInMemory       - Sets the maximum number of objects that will be created in memory
-        eternal           - Sets whether elements are eternal. If eternal,  timeouts are ignored and the element
-                            is never expired.
-        timeToIdleSeconds - Sets the time to idle for an element before it expires.
-                            i.e. The maximum amount of time between accesses before an element expires
-                            Is only used if the element is not eternal.
-                            Optional attribute. A value of 0 means that an Element can idle for infinity
-        timeToLiveSeconds - Sets the time to live for an element before it expires.
-                            i.e. The maximum time between creation time and when an element expires.
-                            Is only used if the element is not eternal.
-                            Optional attribute. A value of 0 means that an Element can live for infinity
-        overflowToDisk    - Sets whether elements can overflow to disk when the in-memory cache
-                            has reached the maxInMemory limit.
-
-        -->
-
-    <!-- Sample cache named sampleCache1
-        This cache contains a maximum in memory of 10000 elements, and will expire
-        an element if it is idle for more than 5 minutes and lives for more than
-        10 minutes.
-
-        If there are more than 10000 elements it will overflow to the
-        disk cache, which in this configuration will go to wherever java.io.tmp is
-        defined on your system. On a standard Linux system this will be /tmp"
-        -->
-    <cache name="my.package.Class"
-        maxElementsInMemory="10000"
-        eternal="false"
-        timeToIdleSeconds="300"
-        timeToLiveSeconds="600"
-        overflowToDisk="true"
-        />
-
-    <!-- Sample cache named sampleCache2
-        This cache contains 1000 elements. Elements will always be held in memory.
-        They are not expired. -->
-    <cache name="my.package.Class.collection"
-        maxElementsInMemory="1000"
-        eternal="true"
-        overflowToDisk="false"
-        /> -->
-
-    <!-- Place configuration for your caches following -->
-
-    <cache name="net.sf.hibernate.cache.StandardQueryCache"
-        maxElementsInMemory="5"
-        eternal="false"
-        timeToLiveSeconds="120"
-        overflowToDisk="true"/>
-        
-    <cache name="net.sf.hibernate.cache.UpdateTimestampsCache"
-        maxElementsInMemory="5000"
-        eternal="true"
-        overflowToDisk="true"/>        
-        
-</ehcache>
diff --git a/contrib/orm-persistence/applications/test/hibernate.cfg.xml b/contrib/orm-persistence/applications/test/hibernate.cfg.xml
deleted file mode 100644
index c68bc7a..0000000
--- a/contrib/orm-persistence/applications/test/hibernate.cfg.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version='1.0' encoding='utf-8'?>
-<!--
-   Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                       as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-  -->
-<!DOCTYPE hibernate-configuration
-    PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
-    "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
-
-<hibernate-configuration>
-
-    <session-factory>
-
-        <property name="show_sql">false</property>
-
-        <!-- Mapping files -->
-        <mapping resource="hibernate/jackrabbit.hbm.xml"/>
-
-    </session-factory>
-
-</hibernate-configuration>
diff --git a/contrib/orm-persistence/applications/test/hibernate.properties b/contrib/orm-persistence/applications/test/hibernate.properties
deleted file mode 100644
index 5794e81..0000000
--- a/contrib/orm-persistence/applications/test/hibernate.properties
+++ /dev/null
@@ -1,418 +0,0 @@
-#  Copyright 2003-2005 The Apache Software Foundation or its licensors,
-#                      as applicable
-#
-#  Licensed under the Apache License, Version 2.0 (the "License");
-#  you may not use this file except in compliance with the License.
-#  You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-#  distributed under the License is distributed on an "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#  See the License for the specific language governing permissions and
-#  limitations under the License.
-
-######################
-### Query Language ###
-######################
-
-## define query language constants / function names
-
-hibernate.query.substitutions true 1, false 0, yes 'Y', no 'N'
-
-
-
-#################
-### Platforms ###
-#################
-
-## JNDI Datasource
-
-#hibernate.connection.datasource jdbc/test
-#hibernate.connection.username db2
-#hibernate.connection.password db2
-
-
-## HypersonicSQL
-
-hibernate.dialect net.sf.hibernate.dialect.HSQLDialect
-hibernate.connection.driver_class org.hsqldb.jdbcDriver
-hibernate.connection.username sa
-hibernate.connection.password
-hibernate.connection.url jdbc:hsqldb:hsql://localhost
-#hibernate.connection.url jdbc:hsqldb:test
-#hibernate.connection.url jdbc:hsqldb:.
-
-
-## PostgreSQL
-
-#hibernate.dialect net.sf.hibernate.dialect.PostgreSQLDialect
-#hibernate.connection.driver_class org.postgresql.Driver
-#hibernate.connection.url jdbc:postgresql:template1
-#hibernate.connection.username pg
-#hibernate.connection.password
-#hibernate.query.substitutions yes 'Y', no 'N'
-
-
-## DB2
-
-#hibernate.dialect net.sf.hibernate.dialect.DB2Dialect
-#hibernate.connection.driver_class COM.ibm.db2.jdbc.app.DB2Driver
-#hibernate.connection.url jdbc:db2:test
-#hibernate.connection.username db2
-#hibernate.connection.password db2
-
-
-## DB2/400 
-
-#hibernate.dialect net.sf.hibernate.dialect.DB2400Dialect
-#hibernate.connection.username user
-#hibernate.connection.password password 
-
-## Native driver
-#hibernate.connection.driver_class COM.ibm.db2.jdbc.app.DB2Driver
-#hibernate.connection.url jdbc:db2://systemname
-
-## Toolbox driver
-#hibernate.connection.driver_class com.ibm.as400.access.AS400JDBCDriver
-#hibernate.connection.url jdbc:as400://systemname
-
-
-## MySQL
-
-#hibernate.dialect net.sf.hibernate.dialect.MySQLDialect
-#hibernate.connection.driver_class org.gjt.mm.mysql.Driver
-#hibernate.connection.driver_class com.mysql.jdbc.Driver
-#hibernate.connection.url jdbc:mysql:///jackrabbit
-#hibernate.connection.username root
-#hibernate.connection.password 
-
-
-## Oracle
-
-#hibernate.dialect net.sf.hibernate.dialect.Oracle9Dialect
-#hibernate.dialect net.sf.hibernate.dialect.OracleDialect
-#hibernate.connection.driver_class oracle.jdbc.driver.OracleDriver
-#hibernate.connection.username ora
-#hibernate.connection.password ora
-#hibernate.connection.url jdbc:oracle:thin:@localhost:1521:test
-
-
-## Sybase
-
-#hibernate.dialect net.sf.hibernate.dialect.SybaseDialect
-#hibernate.connection.driver_class com.sybase.jdbc2.jdbc.SybDriver
-#hibernate.connection.username sa
-#hibernate.connection.password sasasa
-#hibernate.connection.url jdbc:sybase:Tds:co3061835-a:5000/tempdb
-
-
-## Mckoi SQL
-
-#hibernate.dialect net.sf.hibernate.dialect.MckoiDialect
-#hibernate.connection.driver_class com.mckoi.JDBCDriver
-#hibernate.connection.url jdbc:mckoi:///
-#hibernate.connection.url jdbc:mckoi:local://C:/mckoi1.00/db.conf
-#hibernate.connection.username admin
-#hibernate.connection.password nimda
-
-
-## SAP DB
-
-#hibernate.dialect net.sf.hibernate.dialect.SAPDBDialect
-#hibernate.connection.driver_class com.sap.dbtech.jdbc.DriverSapDB
-#hibernate.connection.url jdbc:sapdb://localhost/TST
-#hibernate.connection.username TEST
-#hibernate.connection.password TEST
-#hibernate.query.substitutions yes 'Y', no 'N'
-
-
-## MS SQL Server
-
-#hibernate.dialect net.sf.hibernate.dialect.SQLServerDialect
-#hibernate.connection.username sa
-#hibernate.connection.password sa
-
-## JSQL Driver
-#hibernate.connection.driver_class com.jnetdirect.jsql.JSQLDriver
-#hibernate.connection.url jdbc:JSQLConnect://1E1/test
-
-## JTURBO Driver
-#hibernate.connection.driver_class com.newatlanta.jturbo.driver.Driver
-#hibernate.connection.url jdbc:JTurbo://1E1:1433/test
-
-## WebLogic Driver
-#hibernate.connection.driver_class weblogic.jdbc.mssqlserver4.Driver
-#hibernate.connection.url jdbc:weblogic:mssqlserver4:1E1:1433
-
-## Microsoft Driver (not recommended!)
-#hibernate.connection.driver_class com.microsoft.jdbc.sqlserver.SQLServerDriver
-#hibernate.connection.url jdbc:microsoft:sqlserver://1E1;DatabaseName=test;SelectMethod=cursor
-
-## jTDS (since version 0.9)
-#hibernate.connection.driver_class net.sourceforge.jtds.jdbc.Driver
-#hibernate.connection.url jdbc:jtds:sqlserver://1E1/test
-
-## Interbase
-
-#hibernate.dialect net.sf.hibernate.dialect.InterbaseDialect
-#hibernate.connection.username sysdba
-#hibernate.connection.password masterkey
-
-## DO NOT specify hibernate.connection.sqlDialect
-
-## InterClient
-
-#hibernate.connection.driver_class interbase.interclient.Driver
-#hibernate.connection.url jdbc:interbase://localhost:3060/C:/firebird/test.gdb
-
-## Pure Java
-
-#hibernate.connection.driver_class org.firebirdsql.jdbc.FBDriver
-#hibernate.connection.url jdbc:firebirdsql:localhost/3050:/firebird/test.gdb
-
-
-## Pointbase
-
-#hibernate.dialect net.sf.hibernate.dialect.PointbaseDialect
-#hibernate.connection.driver_class com.pointbase.jdbc.jdbcUniversalDriver
-#hibernate.connection.url jdbc:pointbase:embedded:sample
-#hibernate.connection.username PBPUBLIC
-#hibernate.connection.password PBPUBLIC
-
-
-
-#################################
-### Hibernate Connection Pool ###
-#################################
-
-hibernate.connection.pool_size 10
-
-
-
-###########################
-### C3P0 Connection Pool###
-###########################
-
-#hibernate.c3p0.max_size 2
-#hibernate.c3p0.min_size 2
-#hibernate.c3p0.timeout 5000
-#hibernate.c3p0.max_statements 100
-#hibernate.c3p0.idle_test_period 3000
-#hibernate.c3p0.acquire_increment 2
-##hibernate.c3p0.validate false
-
-
-
-###################################
-### Apache DBCP Connection Pool ###
-###################################
-
-## connection pool
-
-hibernate.dbcp.maxActive 100
-hibernate.dbcp.whenExhaustedAction 1
-hibernate.dbcp.maxWait 120000
-hibernate.dbcp.maxIdle 10
-
-## prepared statement cache
-
-hibernate.dbcp.ps.maxActive 100
-hibernate.dbcp.ps.whenExhaustedAction 1
-hibernate.dbcp.ps.maxWait 120000
-hibernate.dbcp.ps.maxIdle 10
-
-## optional query to validate pooled connections:
-
-#hibernate.dbcp.validationQuery select 1 from dual
-#hibernate.dbcp.testOnBorrow true
-#hibernate.dbcp.testOnReturn false
-
-
-
-##############################
-### Proxool Connection Pool###
-##############################
-
-## Properties for external configuration of Proxool
-
-hibernate.proxool.pool_alias pool1
-
-## Only need one of the following
-
-#hibernate.proxool.existing_pool true
-#hibernate.proxool.xml proxool.xml
-#hibernate.proxool.properties proxool.properties
-
-
-
-#################################
-### Plugin ConnectionProvider ###
-#################################
-
-## use a custom ConnectionProvider (if not set, Hibernate will choose a built-in ConnectionProvider using hueristics)
-
-#hibernate.connection.provider_class net.sf.hibernate.connection.DriverManagerConnectionProvider
-#hibernate.connection.provider_class net.sf.hibernate.connection.DatasourceConnectionProvider
-#hibernate.connection.provider_class net.sf.hibernate.connection.C3P0ConnectionProvider
-hibernate.connection.provider_class net.sf.hibernate.connection.DBCPConnectionProvider
-#hibernate.connection.provider_class net.sf.hibernate.connection.ProxoolConnectionProvider
-
-
-
-#######################
-### Transaction API ###
-#######################
-
-## the Transaction API abstracts application code from the underlying JTA or JDBC transactions
-
-#hibernate.transaction.factory_class net.sf.hibernate.transaction.JTATransactionFactory
-hibernate.transaction.factory_class net.sf.hibernate.transaction.JDBCTransactionFactory
-
-
-## to use JTATransactionFactory, Hibernate must be able to locate the UserTransaction in JNDI
-## default is java:comp/UserTransaction
-## you do NOT need this setting if you specify hibernate.transaction.manager_lookup_class
-
-#jta.UserTransaction jta/usertransaction
-#jta.UserTransaction javax.transaction.UserTransaction
-#jta.UserTransaction UserTransaction
-
-
-## to use JCS caching with JTA, Hibernate must be able to obtain the JTA TransactionManager
-
-#hibernate.transaction.manager_lookup_class net.sf.hibernate.transaction.JBossTransactionManagerLookup
-#hibernate.transaction.manager_lookup_class net.sf.hibernate.transaction.WeblogicTransactionManagerLookup
-#hibernate.transaction.manager_lookup_class net.sf.hibernate.transaction.WebSphereTransactionManagerLookup
-#hibernate.transaction.manager_lookup_class net.sf.hibernate.transaction.OrionTransactionManagerLookup
-#hibernate.transaction.manager_lookup_class net.sf.hibernate.transaction.ResinTransactionManagerLookup
-
-
-
-##############################
-### Miscellaneous Settings ###
-##############################
-
-## print all generated SQL to the console
-
-#hibernate.show_sql true
-
-
-## auto schema export
-
-#hibernate.hbm2ddl.auto create-drop
-#hibernate.hbm2ddl.auto create
-hibernate.hbm2ddl.auto update
-
-
-## specify a JDBC isolation level
-
-#hibernate.connection.isolation 4
-
-
-## set the JDBC fetch size
-
-hibernate.jdbc.fetch_size 25
-
-
-## set the maximum JDBC 2 batch size (a nonzero value enables batching)
-
-hibernate.jdbc.batch_size 20
-
-## use JDBC batching for versioned data
-
-hibernate.jdbc.batch_versioned_data true
-
-## enable use of JDBC 2 scrollable ResultSets (specifying a Dialect will cause Hibernate to use a sensible default)
-
-#hibernate.jdbc.use_scrollable_resultset true
-
-
-## use streams when writing binary types to / from JDBC
-
-hibernate.jdbc.use_streams_for_binary true
-
-
-## use JDBC 3 PreparedStatement.getGeneratedKeys to get the identifier of an inserted row
-
-#hibernate.jdbc.use_get_generated_keys true
-
-
-## specify a default schema for unqualified tablenames
-
-#hibernate.default_schema test
-
-
-## use a custom stylesheet for XML generation (if not specified, hibernate-default.xslt will be used)
-
-#hibernate.xml.output_stylesheet C:/Hibernate/net/sf/hibernate/hibernate-default.xslt
-
-
-## enable outerjoin fetching (specifying a Dialect will cause Hibernate to use sensible default)
-
-#hibernate.use_outer_join false
-
-
-## set the maximum depth of the outer join fetch tree
-
-hibernate.max_fetch_depth 1
-
-
-## enable CGLIB reflection optimizer (enabled by default)
-
-hibernate.cglib.use_reflection_optimizer true
-
-
-
-##########################
-### Second-level Cache ###
-##########################
-
-## optimize chache for minimal "puts" instead of minimal "gets" (good for clustered cache) 
-
-#hibernate.cache.use_minimal_puts true
-
-
-## set a prefix for cache region names
-
-hibernate.cache.region_prefix hibernate.test
-
-
-## enable the query cache
-
-hibernate.cache.use_query_cache true
-
-
-## choose a cache implementation
-
-hibernate.cache.provider_class net.sf.hibernate.cache.EhCacheProvider
-#hibernate.cache.provider_class net.sf.hibernate.cache.EmptyCacheProvider
-#hibernate.cache.provider_class net.sf.hibernate.cache.HashtableCacheProvider
-#hibernate.cache.provider_class net.sf.hibernate.cache.TreeCacheProvider
-#hibernate.cache.provider_class net.sf.hibernate.cache.OSCacheProvider
-#hibernate.cache.provider_class net.sf.hibernate.cache.JCSCacheProvider
-#hibernate.cache.provider_class net.sf.hibernate.cache.SwarmCacheProvider
-
-
-
-############
-### JNDI ###
-############
-
-## specify a JNDI name for the SessionFactory
-
-#hibernate.session_factory_name hibernate/session_factory
-
-
-## Hibernate uses JNDI to bind a name to a SessionFactory and to look up the JTA UserTransaction;
-## if hibernate.jndi.* are not specified, Hibernate will use the default InitialContext() which
-## is the best approach in an application server
-
-#file system
-#hibernate.jndi.class com.sun.jndi.fscontext.RefFSContextFactory
-#hibernate.jndi.url file:/
-
-#WebSphere
-#hibernate.jndi.class com.ibm.websphere.naming.WsnInitialContextFactory
-#hibernate.jndi.url iiop://localhost:900/
\ No newline at end of file
diff --git a/contrib/orm-persistence/applications/test/hibernate/jackrabbit.hbm.xml b/contrib/orm-persistence/applications/test/hibernate/jackrabbit.hbm.xml
deleted file mode 100644
index e45d270..0000000
--- a/contrib/orm-persistence/applications/test/hibernate/jackrabbit.hbm.xml
+++ /dev/null
@@ -1,148 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                       as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-  -->
-<!DOCTYPE hibernate-mapping
-    PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
-    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
-
-<hibernate-mapping>
-
-    <class name="org.apache.jackrabbit.core.state.orm.hibernate.HibernateNodeState" table="JCR_NODE">
-
-        <id name="uuid" type="string">
-            <column name="UUID" sql-type="varchar(36)" not-null="true"/>
-            <generator class="assigned" />
-        </id>
-
-        <property name="parentUUID" type="string">
-            <column name="PARENT_UUID" not-null="false"/>
-        </property>
-
-        <property name="nodeTypeName" type="string">
-            <column name="NODE_TYPE" not-null="false"/>
-        </property>
-
-        <property name="definitionId" type="string">
-            <column name="DEFINITION_ID" not-null="false"/>
-        </property>
-
-        <list name="listChildNodeEntries" table="JCR_CHILD_NODE">
-            <key column="PARENT_UUID"/>
-            <index column="CHILDREN_INDEX" />
-            <composite-element class="org.apache.jackrabbit.core.state.orm.ORMChildNodeEntry">
-              <property name="uuid" type="string" column="UUID"/>
-              <property name="name" type="string" column="NAME"/>
-              <property name="sameNameIndex" type="integer" column="SAMENAME_INDEX"/>
-            </composite-element>
-        </list>
-
-        <set name="setPropertyEntries" table="JCR_NODE_PROPERTY">
-            <key column="PARENT_UUID"/>
-            <composite-element class="org.apache.jackrabbit.core.state.orm.ORMPropertyEntry">
-              <property name="name" type="string" column="NAME"/>
-            </composite-element>
-        </set>
-
-        <set name="setMixinTypeNames" table="JCR_NODE_MIXIN_TYPE">
-            <key column="NODE_UUID"/>
-            <composite-element class="org.apache.jackrabbit.core.state.orm.ORMNodeMixinType">
-              <property name="mixinTypeName" type="string" column="MIXIN_TYPE"/>
-            </composite-element>
-        </set>
-
-        <set name="setParentUUIDs" table="JCR_NODE_PARENT">
-            <key column="NODE_UUID"/>
-            <composite-element class="org.apache.jackrabbit.core.state.orm.ORMNodeParent">
-              <property name="parentUUID" type="string" column="PARENT_UUID"/>
-            </composite-element>
-        </set>
-
-    </class>
-
-    <class name="org.apache.jackrabbit.core.state.orm.ORMPropertyState" table="JCR_PROPERTY">
-
-        <id name="itemId" type="string">
-            <column name="ITEM_ID" sql-type="varchar" not-null="true"/>
-            <generator class="assigned" />
-        </id>
-
-        <property name="name" type="string">
-            <column name="NAME" not-null="false"/>
-        </property>
-
-        <property name="parentUUID" type="string">
-            <column name="PARENT_UUID" not-null="false"/>
-        </property>
-
-        <property name="values" type="string">
-            <column name="VALUE" not-null="false"/>
-        </property>
-
-        <property name="type" type="integer" >
-            <column name="PROP_TYPE" not-null="false"/>
-        </property>
-
-        <property name="definitionId" type="string">
-            <column name="DEFINITION_ID" not-null="false"/>
-        </property>
-
-        <property name="multiValued" type="yes_no">
-            <column name="MULTI_VALUED" sql-type="char(1)" not-null="false" />
-        </property>
-
-    </class>
-
-    <class name="org.apache.jackrabbit.core.state.orm.ORMNodeReference" table="JCR_NODE_REF">
-
-        <composite-id>
-          <key-property name="targetId" type="string" column="TARGET_UUID"/>
-          <key-property name="propertyParentUUID" type="string" column="PROP_UUID"/>
-          <key-property name="propertyName" type="string" column="PROP_NAME"/>
-        </composite-id>
-
-    </class>
-
-    <class name="org.apache.jackrabbit.core.state.orm.ORMBlobValue" table="JCR_BLOB">
-
-        <id name="dbId" type="integer" unsaved-value="null">
-            <column name="BLOB_ID" not-null="true"/>
-            <generator class="native" />
-        </id>
-
-        <property name="parentUUID" type="string">
-            <column name="PARENT_UUID" not-null="false"/>
-        </property>
-
-        <property name="propertyName" type="string">
-            <column name="PROP_NAME" not-null="false"/>
-        </property>
-
-        <property name="index" type="integer">
-            <column name="VALUE_INDEX" not-null="false"/>
-        </property>
-
-        <property name="size" type="long">
-            <column name="BLOB_SIZE" not-null="false"/>
-        </property>
-
-        <property name="blobValue" type="binary">
-            <column name="BLOB_VALUE" not-null="false"/>
-        </property>
-
-    </class>
-
-</hibernate-mapping>
diff --git a/contrib/orm-persistence/applications/test/import.xml b/contrib/orm-persistence/applications/test/import.xml
deleted file mode 100644
index befdf01..0000000
--- a/contrib/orm-persistence/applications/test/import.xml
+++ /dev/null
@@ -1,732 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?> 
-<!--
-   Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                       as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-  -->
-      <office:document-styles xmlns:office="http://openoffice.org/2000/office" xmlns:style="http://openoffice.org/2000/style" xmlns:text="http://openoffice.org/2000/text" xmlns:table="http://openoffice.org/2000/table" xmlns:draw="http://openoffice.org/2000/drawing" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:number="http://openoffice.org/2000/datastyle" xmlns:svg="http://www.w3.org/2000/svg" xmlns:chart="http://openoffice.org/2000/chart" xmlns:dr3d="http://openoffice.org/2000/dr3d" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="http://openoffice.org/2000/form" xmlns:script="http://openoffice.org/2000/script" office:version="1.0"> 
-        <office:font-decls> 
-          <style:font-decl style:name="StarSymbol" fo:font-family="StarSymbol" style:font-charset="x-symbol"/> 
-          <style:font-decl style:name="Wingdings" fo:font-family="Wingdings" style:font-pitch="variable" style:font-charset="x-symbol"/> 
-          <style:font-decl style:name="Symbol" fo:font-family="Symbol" style:font-family-generic="roman" style:font-pitch="variable" style:font-charset="x-symbol"/> 
-          <style:font-decl style:name="Arial1" fo:font-family="Arial"/> 
-          <style:font-decl style:name="Arial Black" fo:font-family="&apos;Arial Black&apos;"/> 
-          <style:font-decl style:name="Tahoma1" fo:font-family="Tahoma"/> 
-          <style:font-decl style:name="Lucida Sans Unicode" fo:font-family="&apos;Lucida Sans Unicode&apos;" style:font-pitch="variable"/> 
-          <style:font-decl style:name="MS Mincho" fo:font-family="&apos;MS Mincho&apos;" style:font-pitch="variable"/> 
-          <style:font-decl style:name="Tahoma" fo:font-family="Tahoma" style:font-pitch="variable"/> 
-          <style:font-decl style:name="Times New Roman" fo:font-family="&apos;Times New Roman&apos;" style:font-family-generic="roman" style:font-pitch="variable"/> 
-          <style:font-decl style:name="Arial" fo:font-family="Arial" style:font-family-generic="swiss" style:font-pitch="variable"/> 
-        </office:font-decls> 
-        <office:styles> 
-          <style:default-style style:family="graphics"> 
-            <style:properties draw:start-line-spacing-horizontal="0.1114inch" draw:start-line-spacing-vertical="0.1114inch" draw:end-line-spacing-horizontal="0.1114inch" draw:end-line-spacing-vertical="0.1114inch" style:use-window-font-color="true" style:font-name="Times New Roman" fo:font-size="12pt" fo:language="en" fo:country="US" style:font-name-asian="Lucida Sans Unicode" style:font-size-asian="12pt" style:language-asian="none" style:country-asian="none" style:font-name-complex="Tahoma" style:font-size-complex="12pt" style:language-complex="none" style:country-complex="none" style:text-autospace="ideograph-alpha" style:line-break="strict" style:writing-mode="lr-tb"> 
-              <style:tab-stops/> 
-            </style:properties> 
-          </style:default-style> 
-          <style:default-style style:family="paragraph"> 
-            <style:properties style:use-window-font-color="true" style:font-name="Times New Roman" fo:font-size="12pt" fo:language="en" fo:country="US" style:font-name-asian="Lucida Sans Unicode" style:font-size-asian="12pt" style:language-asian="none" style:country-asian="none" style:font-name-complex="Tahoma" style:font-size-complex="12pt" style:language-complex="none" style:country-complex="none" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2" fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="0.4917inch" style:writing-mode="page"/> 
-          </style:default-style> 
-          <style:style style:name="Standard" style:family="paragraph" style:class="text"> 
-            <style:properties style:use-window-font-color="true" style:font-name="Times New Roman" fo:font-size="10pt" fo:language="fr" fo:country="FR" style:font-name-asian="Times New Roman" style:font-size-asian="10pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Times New Roman" style:font-size-complex="10pt" style:language-complex="ar" style:country-complex="SA" fo:orphans="2" fo:widows="2" style:writing-mode="lr-tb"/> 
-          </style:style> 
-          <style:style style:name="Text body" style:family="paragraph" style:parent-style-name="Standard" style:class="text"> 
-            <style:properties fo:margin-top="0inch" fo:margin-bottom="0.0835inch"/> 
-          </style:style> 
-          <style:style style:name="Heading" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text body" style:class="text"> 
-            <style:properties fo:margin-top="0.1665inch" fo:margin-bottom="0.0835inch" style:font-name="Arial" fo:font-size="14pt" style:font-name-asian="MS Mincho" style:font-size-asian="14pt" style:font-name-complex="Tahoma" style:font-size-complex="14pt" fo:keep-with-next="true"/> 
-          </style:style> 
-          <style:style style:name="Heading 1" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Standard" style:class="text"> 
-            <style:properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold" fo:keep-with-next="true"/> 
-          </style:style> 
-          <style:style style:name="Heading 2" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Standard" style:class="text"> 
-            <style:properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold" fo:text-align="center" style:justify-single-word="false" fo:keep-with-next="true"/> 
-          </style:style> 
-          <style:style style:name="Heading 3" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Standard" style:class="text"> 
-            <style:properties fo:font-size="14pt" fo:font-weight="bold" style:font-size-asian="14pt" style:font-weight-asian="bold" style:font-size-complex="14pt" style:font-weight-complex="bold" fo:text-align="center" style:justify-single-word="false" fo:keep-with-next="true"/> 
-          </style:style> 
-          <style:style style:name="List" style:family="paragraph" style:parent-style-name="Text body" style:class="list"> 
-            <style:properties style:font-name-complex="Tahoma1"/> 
-          </style:style> 
-          <style:style style:name="Header" style:family="paragraph" style:parent-style-name="Standard" style:class="extra"> 
-            <style:properties> 
-              <style:tab-stops> 
-                <style:tab-stop style:position="3.15inch" style:type="center"/> 
-                <style:tab-stop style:position="6.3inch" style:type="right"/> 
-              </style:tab-stops> 
-            </style:properties> 
-          </style:style> 
-          <style:style style:name="Footer" style:family="paragraph" style:parent-style-name="Standard" style:class="extra"> 
-            <style:properties> 
-              <style:tab-stops> 
-                <style:tab-stop style:position="3.15inch" style:type="center"/> 
-                <style:tab-stop style:position="6.3inch" style:type="right"/> 
-              </style:tab-stops> 
-            </style:properties> 
-          </style:style> 
-          <style:style style:name="Table Contents" style:family="paragraph" style:parent-style-name="Text body" style:class="extra"> 
-            <style:properties text:number-lines="false" text:line-number="0"/> 
-          </style:style> 
-          <style:style style:name="Table Heading" style:family="paragraph" style:parent-style-name="Table Contents" style:class="extra"> 
-            <style:properties fo:font-style="italic" fo:font-weight="bold" style:font-style-asian="italic" style:font-weight-asian="bold" style:font-style-complex="italic" style:font-weight-complex="bold" fo:text-align="center" style:justify-single-word="false" text:number-lines="false" text:line-number="0"/> 
-          </style:style> 
-          <style:style style:name="Caption" style:family="paragraph" style:parent-style-name="Standard" style:class="extra"> 
-            <style:properties fo:margin-top="0.0835inch" fo:margin-bottom="0.0835inch" fo:font-size="10pt" fo:font-style="italic" style:font-size-asian="10pt" style:font-style-asian="italic" style:font-name-complex="Tahoma1" style:font-size-complex="10pt" style:font-style-complex="italic" text:number-lines="false" text:line-number="0"/> 
-          </style:style> 
-          <style:style style:name="Frame contents" style:family="paragraph" style:parent-style-name="Text body" style:class="extra"/> 
-          <style:style style:name="Index" style:family="paragraph" style:parent-style-name="Standard" style:class="index"> 
-            <style:properties style:font-name-complex="Tahoma1" text:number-lines="false" text:line-number="0"/> 
-          </style:style> 
-          <style:style style:name="Title" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Subtitle" style:class="chapter"> 
-            <style:properties fo:font-size="14pt" fo:font-weight="bold" style:font-size-asian="14pt" style:font-weight-asian="bold" style:font-size-complex="14pt" style:font-weight-complex="bold" fo:text-align="center" style:justify-single-word="false"/> 
-          </style:style> 
-          <style:style style:name="Subtitle" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text body" style:class="chapter"> 
-            <style:properties fo:font-size="14pt" fo:font-style="italic" style:font-size-asian="14pt" style:font-style-asian="italic" style:font-size-complex="14pt" style:font-style-complex="italic" fo:text-align="center" style:justify-single-word="false"/> 
-          </style:style> 
-          <style:style style:name="WW8Num1z0" style:family="text"> 
-            <style:properties style:font-name="Times New Roman"/> 
-          </style:style> 
-          <style:style style:name="WW8Num2z0" style:family="text"> 
-            <style:properties style:font-name="Times New Roman"/> 
-          </style:style> 
-          <style:style style:name="WW8Num5z0" style:family="text"> 
-            <style:properties style:font-name="Times New Roman"/> 
-          </style:style> 
-          <style:style style:name="WW8Num6z0" style:family="text"> 
-            <style:properties style:font-name="Times New Roman"/> 
-          </style:style> 
-          <style:style style:name="WW8Num7z0" style:family="text"> 
-            <style:properties style:font-name="Symbol"/> 
-          </style:style> 
-          <style:style style:name="WW8Num8z0" style:family="text"> 
-            <style:properties style:font-name="Times New Roman"/> 
-          </style:style> 
-          <style:style style:name="WW8Num9z0" style:family="text"> 
-            <style:properties style:font-name="Times New Roman"/> 
-          </style:style> 
-          <style:style style:name="WW8Num10z0" style:family="text"> 
-            <style:properties style:font-name="Times New Roman"/> 
-          </style:style> 
-          <style:style style:name="WW8Num11z0" style:family="text"> 
-            <style:properties style:font-name="Times New Roman"/> 
-          </style:style> 
-          <style:style style:name="WW8Num12z0" style:family="text"> 
-            <style:properties style:font-name="Times New Roman"/> 
-          </style:style> 
-          <style:style style:name="WW8Num13z0" style:family="text"> 
-            <style:properties style:font-name="Times New Roman"/> 
-          </style:style> 
-          <style:style style:name="WW8Num14z0" style:family="text"> 
-            <style:properties style:font-name="Times New Roman"/> 
-          </style:style> 
-          <style:style style:name="WW8Num15z0" style:family="text"> 
-            <style:properties style:font-name="Times New Roman"/> 
-          </style:style> 
-          <style:style style:name="WW8Num16z0" style:family="text"> 
-            <style:properties style:font-name="Times New Roman"/> 
-          </style:style> 
-          <style:style style:name="WW-Default Paragraph Font" style:family="text"/> 
-          <style:style style:name="Frame" style:family="graphics"> 
-            <style:properties text:anchor-type="paragraph" svg:x="0inch" svg:y="0inch" style:wrap="parallel" style:number-wrapped-paragraphs="no-limit" style:wrap-contour="false" style:vertical-pos="top" style:vertical-rel="paragraph-content" style:horizontal-pos="center" style:horizontal-rel="paragraph-content"/> 
-          </style:style> 
-          <style:style style:name="Graphics" style:family="graphics"> 
-            <style:properties text:anchor-type="paragraph" svg:x="0inch" svg:y="0inch" style:wrap="none" style:vertical-pos="top" style:vertical-rel="paragraph" style:horizontal-pos="center" style:horizontal-rel="paragraph"/> 
-          </style:style> 
-          <style:style style:name="OLE" style:family="graphics"> 
-            <style:properties text:anchor-type="paragraph" svg:x="0inch" svg:y="0inch" style:wrap="none" style:vertical-pos="top" style:vertical-rel="paragraph" style:horizontal-pos="center" style:horizontal-rel="paragraph"/> 
-          </style:style> 
-          <text:outline-style> 
-            <text:outline-level-style text:level="1" style:num-format=""/> 
-            <text:outline-level-style text:level="2" style:num-format=""/> 
-            <text:outline-level-style text:level="3" style:num-format=""/> 
-            <text:outline-level-style text:level="4" style:num-format=""/> 
-            <text:outline-level-style text:level="5" style:num-format=""/> 
-            <text:outline-level-style text:level="6" style:num-format=""/> 
-            <text:outline-level-style text:level="7" style:num-format=""/> 
-            <text:outline-level-style text:level="8" style:num-format=""/> 
-            <text:outline-level-style text:level="9" style:num-format=""/> 
-            <text:outline-level-style text:level="10" style:num-format=""/> 
-          </text:outline-style> 
-          <text:list-style style:name="WW8Num1" text:consecutive-numbering="true"> 
-            <text:list-level-style-bullet text:level="1" text:style-name="WW8Num1z0" style:num-suffix="." text:bullet-char="-"> 
-              <style:properties text:min-label-width="0.25inch" style:font-name="Times New Roman"/> 
-            </text:list-level-style-bullet> 
-            <text:list-level-style-number text:level="2" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.1972inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="3" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.3937inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="4" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.5909inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="5" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.7874inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="6" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.9846inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="7" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.1815inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="8" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.3787inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="9" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.5752inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="10" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.7724inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-          </text:list-style> 
-          <text:list-style style:name="WW8Num2" text:consecutive-numbering="true"> 
-            <text:list-level-style-bullet text:level="1" text:style-name="WW8Num2z0" style:num-suffix="." text:bullet-char="-"> 
-              <style:properties text:min-label-width="0.25inch" style:font-name="Times New Roman"/> 
-            </text:list-level-style-bullet> 
-            <text:list-level-style-number text:level="2" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.1972inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="3" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.3937inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="4" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.5909inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="5" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.7874inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="6" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.9846inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="7" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.1815inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="8" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.3787inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="9" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.5752inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="10" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.7724inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-          </text:list-style> 
-          <text:list-style style:name="WW8Num3" text:consecutive-numbering="true"> 
-            <text:list-level-style-number text:level="1" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:min-label-width="0.25inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="2" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.1972inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="3" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.3937inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="4" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.5909inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="5" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.7874inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="6" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.9846inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="7" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.1815inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="8" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.3787inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="9" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.5752inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="10" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.7724inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-          </text:list-style> 
-          <text:list-style style:name="WW8Num4" text:consecutive-numbering="true"> 
-            <text:list-level-style-number text:level="1" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:min-label-width="0.25inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="2" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.1972inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="3" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.3937inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="4" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.5909inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="5" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.7874inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="6" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.9846inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="7" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.1815inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="8" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.3787inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="9" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.5752inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="10" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.7724inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-          </text:list-style> 
-          <text:list-style style:name="WW8Num5" text:consecutive-numbering="true"> 
-            <text:list-level-style-bullet text:level="1" text:style-name="WW8Num5z0" style:num-suffix="." text:bullet-char="-"> 
-              <style:properties text:min-label-width="0.25inch" style:font-name="Times New Roman"/> 
-            </text:list-level-style-bullet> 
-            <text:list-level-style-number text:level="2" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.1972inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="3" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.3937inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="4" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.5909inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="5" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.7874inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="6" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.9846inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="7" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.1815inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="8" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.3787inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="9" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.5752inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="10" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.7724inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-          </text:list-style> 
-          <text:list-style style:name="WW8Num6" text:consecutive-numbering="true"> 
-            <text:list-level-style-bullet text:level="1" text:style-name="WW8Num6z0" style:num-suffix="." text:bullet-char="-"> 
-              <style:properties text:min-label-width="0.25inch" style:font-name="Times New Roman"/> 
-            </text:list-level-style-bullet> 
-            <text:list-level-style-number text:level="2" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.1972inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="3" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.3937inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="4" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.5909inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="5" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.7874inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="6" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.9846inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="7" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.1815inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="8" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.3787inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="9" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.5752inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="10" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.7724inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-          </text:list-style> 
-          <text:list-style style:name="WW8Num7" text:consecutive-numbering="true"> 
-            <text:list-level-style-bullet text:level="1" text:style-name="WW8Num7z0" style:num-suffix="." text:bullet-char="ï‚·"> 
-              <style:properties text:min-label-width="0.25inch" style:font-name="Symbol"/> 
-            </text:list-level-style-bullet> 
-            <text:list-level-style-number text:level="2" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.1972inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="3" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.3937inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="4" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.5909inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="5" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.7874inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="6" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.9846inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="7" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.1815inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="8" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.3787inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="9" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.5752inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="10" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.7724inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-          </text:list-style> 
-          <text:list-style style:name="WW8Num8" text:consecutive-numbering="true"> 
-            <text:list-level-style-bullet text:level="1" text:style-name="WW8Num8z0" style:num-suffix="." text:bullet-char="-"> 
-              <style:properties text:min-label-width="0.25inch" style:font-name="Times New Roman"/> 
-            </text:list-level-style-bullet> 
-            <text:list-level-style-number text:level="2" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.1972inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="3" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.3937inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="4" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.5909inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="5" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.7874inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="6" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.9846inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="7" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.1815inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="8" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.3787inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="9" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.5752inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="10" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.7724inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-          </text:list-style> 
-          <text:list-style style:name="WW8Num9" text:consecutive-numbering="true"> 
-            <text:list-level-style-bullet text:level="1" text:style-name="WW8Num9z0" style:num-suffix="." text:bullet-char="-"> 
-              <style:properties text:min-label-width="0.25inch" style:font-name="Times New Roman"/> 
-            </text:list-level-style-bullet> 
-            <text:list-level-style-number text:level="2" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.1972inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="3" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.3937inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="4" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.5909inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="5" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.7874inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="6" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.9846inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="7" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.1815inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="8" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.3787inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="9" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.5752inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="10" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.7724inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-          </text:list-style> 
-          <text:list-style style:name="WW8Num10" text:consecutive-numbering="true"> 
-            <text:list-level-style-bullet text:level="1" text:style-name="WW8Num10z0" style:num-suffix="." text:bullet-char="-"> 
-              <style:properties text:min-label-width="0.25inch" style:font-name="Times New Roman"/> 
-            </text:list-level-style-bullet> 
-            <text:list-level-style-number text:level="2" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.1972inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="3" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.3937inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="4" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.5909inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="5" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.7874inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="6" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.9846inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="7" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.1815inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="8" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.3787inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="9" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.5752inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="10" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.7724inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-          </text:list-style> 
-          <text:list-style style:name="WW8Num11" text:consecutive-numbering="true"> 
-            <text:list-level-style-bullet text:level="1" text:style-name="WW8Num11z0" style:num-suffix="." text:bullet-char="-"> 
-              <style:properties text:min-label-width="0.25inch" style:font-name="Times New Roman"/> 
-            </text:list-level-style-bullet> 
-            <text:list-level-style-number text:level="2" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.1972inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="3" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.3937inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="4" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.5909inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="5" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.7874inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="6" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.9846inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="7" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.1815inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="8" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.3787inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="9" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.5752inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="10" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.7724inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-          </text:list-style> 
-          <text:list-style style:name="WW8Num12" text:consecutive-numbering="true"> 
-            <text:list-level-style-bullet text:level="1" text:style-name="WW8Num12z0" style:num-suffix="." text:bullet-char="-"> 
-              <style:properties text:min-label-width="0.25inch" style:font-name="Times New Roman"/> 
-            </text:list-level-style-bullet> 
-            <text:list-level-style-number text:level="2" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.1972inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="3" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.3937inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="4" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.5909inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="5" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.7874inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="6" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.9846inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="7" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.1815inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="8" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.3787inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="9" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.5752inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="10" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.7724inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-          </text:list-style> 
-          <text:list-style style:name="WW8Num13" text:consecutive-numbering="true"> 
-            <text:list-level-style-bullet text:level="1" text:style-name="WW8Num13z0" style:num-suffix="." text:bullet-char="-"> 
-              <style:properties text:min-label-width="0.25inch" style:font-name="Times New Roman"/> 
-            </text:list-level-style-bullet> 
-            <text:list-level-style-number text:level="2" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.1972inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="3" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.3937inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="4" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.5909inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="5" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.7874inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="6" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.9846inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="7" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.1815inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="8" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.3787inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="9" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.5752inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="10" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.7724inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-          </text:list-style> 
-          <text:list-style style:name="WW8Num14" text:consecutive-numbering="true"> 
-            <text:list-level-style-bullet text:level="1" text:style-name="WW8Num14z0" style:num-suffix="." text:bullet-char="-"> 
-              <style:properties text:min-label-width="0.25inch" style:font-name="Times New Roman"/> 
-            </text:list-level-style-bullet> 
-            <text:list-level-style-number text:level="2" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.1972inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="3" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.3937inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="4" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.5909inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="5" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.7874inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="6" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.9846inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="7" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.1815inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="8" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.3787inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="9" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.5752inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="10" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.7724inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-          </text:list-style> 
-          <text:list-style style:name="WW8Num15" text:consecutive-numbering="true"> 
-            <text:list-level-style-bullet text:level="1" text:style-name="WW8Num15z0" style:num-suffix="." text:bullet-char="-"> 
-              <style:properties text:min-label-width="0.25inch" style:font-name="Times New Roman"/> 
-            </text:list-level-style-bullet> 
-            <text:list-level-style-number text:level="2" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.1972inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="3" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.3937inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="4" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.5909inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="5" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.7874inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="6" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.9846inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="7" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.1815inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="8" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.3787inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="9" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.5752inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="10" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.7724inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-          </text:list-style> 
-          <text:list-style style:name="WW8Num16" text:consecutive-numbering="true"> 
-            <text:list-level-style-bullet text:level="1" text:style-name="WW8Num16z0" style:num-suffix="." text:bullet-char="-"> 
-              <style:properties text:min-label-width="0.25inch" style:font-name="Times New Roman"/> 
-            </text:list-level-style-bullet> 
-            <text:list-level-style-number text:level="2" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.1972inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="3" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.3937inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="4" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.5909inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="5" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.7874inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="6" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.9846inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="7" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.1815inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="8" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.3787inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="9" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.5752inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="10" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.7724inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-          </text:list-style> 
-          <text:list-style style:name="WW8Num17" text:consecutive-numbering="true"> 
-            <text:list-level-style-bullet text:level="1" style:num-suffix="." text:bullet-char="-"> 
-              <style:properties text:min-label-width="0.25inch" style:font-name="StarSymbol"/> 
-            </text:list-level-style-bullet> 
-            <text:list-level-style-number text:level="2" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.1972inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="3" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.3937inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="4" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.5909inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="5" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.7874inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="6" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="0.9846inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="7" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.1815inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="8" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.3787inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="9" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.5752inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-            <text:list-level-style-number text:level="10" style:num-suffix="." style:num-format="1"> 
-              <style:properties text:space-before="1.7724inch" text:min-label-width="0.1965inch"/> 
-            </text:list-level-style-number> 
-          </text:list-style> 
-          <text:footnotes-configuration style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document"/> 
-          <text:endnotes-configuration style:num-format="i" text:start-value="0"/> 
-          <text:linenumbering-configuration text:number-lines="false" text:offset="0.1965inch" style:num-format="1" text:number-position="left" text:increment="5"/> 
-        </office:styles> 
-        <office:automatic-styles> 
-          <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Footer"> 
-            <style:properties fo:font-size="8pt" style:font-size-asian="8pt"/> 
-          </style:style> 
-          <style:page-master style:name="pm1"> 
-            <style:properties fo:page-width="8.2673inch" fo:page-height="11.6925inch" style:num-format="1" style:print-orientation="portrait" fo:margin-top="0.4335inch" fo:margin-bottom="0.2402inch" fo:margin-left="0.4335inch" fo:margin-right="0.4335inch" style:writing-mode="lr-tb" style:layout-grid-color="#c0c0c0" style:layout-grid-lines="44" style:layout-grid-base-height="0.1945inch" style:layout-grid-ruby-height="0.0555inch" style:layout-grid-mode="none" style:layout-grid-ruby-below="false" style:layout-grid-print="false" style:layout-grid-display="false" style:footnote-max-height="0inch"> 
-              <style:footnote-sep style:width="0.0071inch" style:distance-before-sep="0.0398inch" style:distance-after-sep="0.0398inch" style:adjustment="left" style:rel-width="25%" style:color="#000000"/> 
-            </style:properties> 
-            <style:header-style/> 
-            <style:footer-style> 
-              <style:properties fo:min-height="0.1965inch" fo:margin-top="0inch" style:dynamic-spacing="true"/> 
-            </style:footer-style> 
-          </style:page-master> 
-        </office:automatic-styles> 
-        <office:master-styles> 
-          <style:master-page style:name="Standard" style:page-master-name="pm1"> 
-            <style:footer> 
-              <text:p text:style-name="P1"> 
-                EHC/Hôpital de Morges/C. Vandenbulcke, Responsable hygiène/octobre 2003 
-              </text:p> 
-            </style:footer> 
-          </style:master-page> 
-        </office:master-styles> 
-      </office:document-styles>
diff --git a/contrib/orm-persistence/applications/test/jaas.config b/contrib/orm-persistence/applications/test/jaas.config
deleted file mode 100644
index be2bd50..0000000
--- a/contrib/orm-persistence/applications/test/jaas.config
+++ /dev/null
@@ -1,3 +0,0 @@
-Jackrabbit {

-  org.apache.jackrabbit.core.security.SimpleLoginModule required anonymousId="anonymous";

-};

diff --git a/contrib/orm-persistence/applications/test/largeimport.xml b/contrib/orm-persistence/applications/test/largeimport.xml
deleted file mode 100644
index 302a2f7..0000000
--- a/contrib/orm-persistence/applications/test/largeimport.xml
+++ /dev/null
@@ -1,8742 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                       as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-  -->
-    <office:document-content xmlns:office="http://openoffice.org/2000/office" xmlns:style="http://openoffice.org/2000/style" xmlns:text="http://openoffice.org/2000/text" xmlns:table="http://openoffice.org/2000/table" xmlns:draw="http://openoffice.org/2000/drawing" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:number="http://openoffice.org/2000/datastyle" xmlns:svg="http://www.w3.org/2000/svg" xmlns:chart="http://openoffice.org/2000/chart" xmlns:dr3d="http://openoffice.org/2000/dr3d" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="http://openoffice.org/2000/form" xmlns:script="http://openoffice.org/2000/script" office:class="text" office:version="1.0">
-      <office:script/>
-      <office:font-decls>
-        <style:font-decl style:name="Wingdings" fo:font-family="Wingdings" style:font-pitch="variable" style:font-charset="x-symbol"/>
-        <style:font-decl style:name="Symbol" fo:font-family="Symbol" style:font-family-generic="roman" style:font-pitch="variable" style:font-charset="x-symbol"/>
-        <style:font-decl style:name="Tahoma1" fo:font-family="Tahoma"/>
-        <style:font-decl style:name="Courier New" fo:font-family="&apos;Courier New&apos;" style:font-family-generic="modern"/>
-        <style:font-decl style:name="Lucida Sans Unicode" fo:font-family="&apos;Lucida Sans Unicode&apos;" style:font-pitch="variable"/>
-        <style:font-decl style:name="MS Mincho" fo:font-family="&apos;MS Mincho&apos;" style:font-pitch="variable"/>
-        <style:font-decl style:name="Tahoma" fo:font-family="Tahoma" style:font-pitch="variable"/>
-        <style:font-decl style:name="Times New Roman" fo:font-family="&apos;Times New Roman&apos;" style:font-family-generic="roman" style:font-pitch="variable"/>
-        <style:font-decl style:name="Arial" fo:font-family="Arial" style:font-family-generic="swiss" style:font-pitch="variable"/>
-        <style:font-decl style:name="Arial Narrow" fo:font-family="&apos;Arial Narrow&apos;" style:font-family-generic="swiss" style:font-pitch="variable"/>
-      </office:font-decls>
-      <office:automatic-styles>
-        <style:style style:name="Table1" style:family="table">
-          <style:properties style:width="6.5819inch" fo:margin-left="0.1715inch" table:align="left" style:writing-mode="lr-tb"/>
-        </style:style>
-        <style:style style:name="Table1.A" style:family="table-column">
-          <style:properties style:column-width="2.15inch"/>
-        </style:style>
-        <style:style style:name="Table1.B" style:family="table-column">
-          <style:properties style:column-width="0.925inch"/>
-        </style:style>
-        <style:style style:name="Table1.C" style:family="table-column">
-          <style:properties style:column-width="0.625inch"/>
-        </style:style>
-        <style:style style:name="Table1.D" style:family="table-column">
-          <style:properties style:column-width="0.6042inch"/>
-        </style:style>
-        <style:style style:name="Table1.E" style:family="table-column">
-          <style:properties style:column-width="1.2521inch"/>
-        </style:style>
-        <style:style style:name="Table1.F" style:family="table-column">
-          <style:properties style:column-width="1.0257inch"/>
-        </style:style>
-        <style:style style:name="Table1.A1" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.075inch" fo:padding-right="0.075inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="none" fo:border-top="0.0007inch solid #000000" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table1.F1" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.075inch" fo:padding-right="0.075inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table1.A2" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.075inch" fo:padding-right="0.075inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table1.F2" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.075inch" fo:padding-right="0.075inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="0.0007inch solid #000000" fo:border-top="none" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table2" style:family="table">
-          <style:properties style:width="6.3556inch" fo:margin-left="0.1979inch" table:align="left" style:writing-mode="lr-tb"/>
-        </style:style>
-        <style:style style:name="Table2.A" style:family="table-column">
-          <style:properties style:column-width="1.0333inch"/>
-        </style:style>
-        <style:style style:name="Table2.B" style:family="table-column">
-          <style:properties style:column-width="0.6889inch"/>
-        </style:style>
-        <style:style style:name="Table2.C" style:family="table-column">
-          <style:properties style:column-width="0.7875inch"/>
-        </style:style>
-        <style:style style:name="Table2.E" style:family="table-column">
-          <style:properties style:column-width="0.6896inch"/>
-        </style:style>
-        <style:style style:name="Table2.F" style:family="table-column">
-          <style:properties style:column-width="0.8854inch"/>
-        </style:style>
-        <style:style style:name="Table2.G" style:family="table-column">
-          <style:properties style:column-width="0.8861inch"/>
-        </style:style>
-        <style:style style:name="Table2.H" style:family="table-column">
-          <style:properties style:column-width="0.6958inch"/>
-        </style:style>
-        <style:style style:name="Table2.A1" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="none" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table2.B1" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:background-color="#f2f2f2" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="none" fo:border-top="0.0007inch solid #000000" fo:border-bottom="0.0007inch solid #000000">
-            <style:background-image/>
-          </style:properties>
-        </style:style>
-        <style:style style:name="Table2.H1" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:background-color="#f2f2f2" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border="0.0007inch solid #000000">
-            <style:background-image/>
-          </style:properties>
-        </style:style>
-        <style:style style:name="Table2.A2" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table2.B2" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:background-color="#ffff00" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.0007inch solid #000000">
-            <style:background-image/>
-          </style:properties>
-        </style:style>
-        <style:style style:name="Table2.H2" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:background-color="#ffff00" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="0.0007inch solid #000000" fo:border-top="none" fo:border-bottom="0.0007inch solid #000000">
-            <style:background-image/>
-          </style:properties>
-        </style:style>
-        <style:style style:name="Table3" style:family="table">
-          <style:properties style:width="6.3556inch" fo:margin-left="0.1979inch" table:align="left" style:writing-mode="lr-tb"/>
-        </style:style>
-        <style:style style:name="Table3.A" style:family="table-column">
-          <style:properties style:column-width="1.7222inch"/>
-        </style:style>
-        <style:style style:name="Table3.B" style:family="table-column">
-          <style:properties style:column-width="1.9688inch"/>
-        </style:style>
-        <style:style style:name="Table3.C" style:family="table-column">
-          <style:properties style:column-width="2.6646inch"/>
-        </style:style>
-        <style:style style:name="Table3.A1" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border="none"/>
-        </style:style>
-        <style:style style:name="Table3.B1" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:background-color="#f2f2f2" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="none" fo:border-top="0.0007inch solid #000000" fo:border-bottom="none">
-            <style:background-image/>
-          </style:properties>
-        </style:style>
-        <style:style style:name="Table3.C1" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:background-color="#f2f2f2" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="0.0007inch solid #000000" fo:border-top="0.0007inch solid #000000" fo:border-bottom="none">
-            <style:background-image/>
-          </style:properties>
-        </style:style>
-        <style:style style:name="Table3.A2" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="none" fo:border-top="0.0007inch solid #000000" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table3.C2" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:background-color="#ffff00" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border="0.0007inch solid #000000">
-            <style:background-image/>
-          </style:properties>
-        </style:style>
-        <style:style style:name="Table3.A3" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table3.C3" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:background-color="#ffff00" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="0.0007inch solid #000000" fo:border-top="none" fo:border-bottom="0.0007inch solid #000000">
-            <style:background-image/>
-          </style:properties>
-        </style:style>
-        <style:style style:name="Table4" style:family="table">
-          <style:properties style:width="6.3556inch" fo:margin-left="0.1979inch" table:align="left" style:writing-mode="lr-tb"/>
-        </style:style>
-        <style:style style:name="Table4.A" style:family="table-column">
-          <style:properties style:column-width="2.4556inch"/>
-        </style:style>
-        <style:style style:name="Table4.B" style:family="table-column">
-          <style:properties style:column-width="1.1368inch"/>
-        </style:style>
-        <style:style style:name="Table4.C" style:family="table-column">
-          <style:properties style:column-width="1.6736inch"/>
-        </style:style>
-        <style:style style:name="Table4.D" style:family="table-column">
-          <style:properties style:column-width="1.0896inch"/>
-        </style:style>
-        <style:style style:name="Table4.A1" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border="none"/>
-        </style:style>
-        <style:style style:name="Table4.B1" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:background-color="#f2f2f2" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="none" fo:border-top="0.0007inch solid #000000" fo:border-bottom="none">
-            <style:background-image/>
-          </style:properties>
-        </style:style>
-        <style:style style:name="Table4.D1" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:background-color="#f2f2f2" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="0.0007inch solid #000000" fo:border-top="0.0007inch solid #000000" fo:border-bottom="none">
-            <style:background-image/>
-          </style:properties>
-        </style:style>
-        <style:style style:name="Table4.A2" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="none" fo:border-top="0.0007inch solid #000000" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table4.B2" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:background-color="#ffff00" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="none" fo:border-top="0.0007inch solid #000000" fo:border-bottom="0.0007inch solid #000000">
-            <style:background-image/>
-          </style:properties>
-        </style:style>
-        <style:style style:name="Table4.D2" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table4.A3" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table4.B3" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:background-color="#ffff00" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.0007inch solid #000000">
-            <style:background-image/>
-          </style:properties>
-        </style:style>
-        <style:style style:name="Table4.D3" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="0.0007inch solid #000000" fo:border-top="none" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table5" style:family="table">
-          <style:properties style:width="6.4042inch" fo:margin-left="-0.0785inch" table:align="left" style:writing-mode="lr-tb"/>
-        </style:style>
-        <style:style style:name="Table5.A" style:family="table-column">
-          <style:properties style:column-width="0.7inch"/>
-        </style:style>
-        <style:style style:name="Table5.B" style:family="table-column">
-          <style:properties style:column-width="0.75inch"/>
-        </style:style>
-        <style:style style:name="Table5.C" style:family="table-column">
-          <style:properties style:column-width="1.75inch"/>
-        </style:style>
-        <style:style style:name="Table5.D" style:family="table-column">
-          <style:properties style:column-width="3.2042inch"/>
-        </style:style>
-        <style:style style:name="Table5.A1" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.075inch" fo:padding-right="0.075inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="none" fo:border-top="0.0007inch solid #000000" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table5.D1" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.075inch" fo:padding-right="0.075inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table5.A2" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.075inch" fo:padding-right="0.075inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table5.D2" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.075inch" fo:padding-right="0.075inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="0.0007inch solid #000000" fo:border-top="none" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table6" style:family="table">
-          <style:properties style:width="6.4042inch" fo:margin-left="-0.0785inch" table:align="left" style:writing-mode="lr-tb"/>
-        </style:style>
-        <style:style style:name="Table6.A" style:family="table-column">
-          <style:properties style:column-width="0.7inch"/>
-        </style:style>
-        <style:style style:name="Table6.B" style:family="table-column">
-          <style:properties style:column-width="0.75inch"/>
-        </style:style>
-        <style:style style:name="Table6.C" style:family="table-column">
-          <style:properties style:column-width="1.75inch"/>
-        </style:style>
-        <style:style style:name="Table6.D" style:family="table-column">
-          <style:properties style:column-width="3.2042inch"/>
-        </style:style>
-        <style:style style:name="Table6.A1" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.075inch" fo:padding-right="0.075inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="none" fo:border-top="0.0007inch solid #000000" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table6.D1" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.075inch" fo:padding-right="0.075inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table6.A2" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.075inch" fo:padding-right="0.075inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table6.D2" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.075inch" fo:padding-right="0.075inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="0.0007inch solid #000000" fo:border-top="none" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table7" style:family="table">
-          <style:properties style:width="6.4042inch" fo:margin-left="-0.0785inch" table:align="left" style:writing-mode="lr-tb"/>
-        </style:style>
-        <style:style style:name="Table7.A" style:family="table-column">
-          <style:properties style:column-width="0.7inch"/>
-        </style:style>
-        <style:style style:name="Table7.B" style:family="table-column">
-          <style:properties style:column-width="0.75inch"/>
-        </style:style>
-        <style:style style:name="Table7.C" style:family="table-column">
-          <style:properties style:column-width="1.75inch"/>
-        </style:style>
-        <style:style style:name="Table7.D" style:family="table-column">
-          <style:properties style:column-width="3.2042inch"/>
-        </style:style>
-        <style:style style:name="Table7.A1" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.075inch" fo:padding-right="0.075inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="none" fo:border-top="0.0007inch solid #000000" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table7.D1" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.075inch" fo:padding-right="0.075inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table7.A2" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.075inch" fo:padding-right="0.075inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table7.D2" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.075inch" fo:padding-right="0.075inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="0.0007inch solid #000000" fo:border-top="none" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table8" style:family="table">
-          <style:properties style:width="6.4042inch" fo:margin-left="-0.0785inch" table:align="left" style:writing-mode="lr-tb"/>
-        </style:style>
-        <style:style style:name="Table8.A" style:family="table-column">
-          <style:properties style:column-width="0.7inch"/>
-        </style:style>
-        <style:style style:name="Table8.B" style:family="table-column">
-          <style:properties style:column-width="0.75inch"/>
-        </style:style>
-        <style:style style:name="Table8.C" style:family="table-column">
-          <style:properties style:column-width="1.75inch"/>
-        </style:style>
-        <style:style style:name="Table8.D" style:family="table-column">
-          <style:properties style:column-width="3.2042inch"/>
-        </style:style>
-        <style:style style:name="Table8.A1" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.075inch" fo:padding-right="0.075inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="none" fo:border-top="0.0007inch solid #000000" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table8.D1" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.075inch" fo:padding-right="0.075inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table8.A2" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.075inch" fo:padding-right="0.075inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table8.D2" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.075inch" fo:padding-right="0.075inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="0.0007inch solid #000000" fo:border-top="none" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table9" style:family="table">
-          <style:properties style:width="6.4042inch" fo:margin-left="-0.0785inch" table:align="left" style:writing-mode="lr-tb"/>
-        </style:style>
-        <style:style style:name="Table9.A" style:family="table-column">
-          <style:properties style:column-width="0.7inch"/>
-        </style:style>
-        <style:style style:name="Table9.B" style:family="table-column">
-          <style:properties style:column-width="0.75inch"/>
-        </style:style>
-        <style:style style:name="Table9.C" style:family="table-column">
-          <style:properties style:column-width="1.75inch"/>
-        </style:style>
-        <style:style style:name="Table9.D" style:family="table-column">
-          <style:properties style:column-width="3.2042inch"/>
-        </style:style>
-        <style:style style:name="Table9.A1" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.075inch" fo:padding-right="0.075inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="none" fo:border-top="0.0007inch solid #000000" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table9.D1" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.075inch" fo:padding-right="0.075inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table9.A2" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.075inch" fo:padding-right="0.075inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table9.D2" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.075inch" fo:padding-right="0.075inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="0.0007inch solid #000000" fo:border-top="none" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table10" style:family="table">
-          <style:properties style:width="6.4042inch" fo:margin-left="-0.0785inch" table:align="left" style:writing-mode="lr-tb"/>
-        </style:style>
-        <style:style style:name="Table10.A" style:family="table-column">
-          <style:properties style:column-width="0.7inch"/>
-        </style:style>
-        <style:style style:name="Table10.B" style:family="table-column">
-          <style:properties style:column-width="0.75inch"/>
-        </style:style>
-        <style:style style:name="Table10.C" style:family="table-column">
-          <style:properties style:column-width="1.75inch"/>
-        </style:style>
-        <style:style style:name="Table10.D" style:family="table-column">
-          <style:properties style:column-width="3.2042inch"/>
-        </style:style>
-        <style:style style:name="Table10.A1" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.075inch" fo:padding-right="0.075inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="none" fo:border-top="0.0007inch solid #000000" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table10.D1" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.075inch" fo:padding-right="0.075inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table10.A2" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.075inch" fo:padding-right="0.075inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table10.D2" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.075inch" fo:padding-right="0.075inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="0.0007inch solid #000000" fo:border-top="none" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table11" style:family="table">
-          <style:properties style:width="5.7569inch" fo:margin-left="0.7465inch" table:align="left" style:writing-mode="lr-tb"/>
-        </style:style>
-        <style:style style:name="Table11.A" style:family="table-column">
-          <style:properties style:column-width="2.875inch"/>
-        </style:style>
-        <style:style style:name="Table11.B" style:family="table-column">
-          <style:properties style:column-width="0.9583inch"/>
-        </style:style>
-        <style:style style:name="Table11.D" style:family="table-column">
-          <style:properties style:column-width="0.9653inch"/>
-        </style:style>
-        <style:style style:name="Table11.A1" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="none" fo:border-top="0.0007inch solid #000000" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table11.B1.1.1" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table11.B1.1.2" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table11.B1.3.2" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="0.0007inch solid #000000" fo:border-top="none" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table12" style:family="table">
-          <style:properties style:width="7.0556inch" fo:margin-left="-0.0521inch" table:align="left" style:writing-mode="lr-tb"/>
-        </style:style>
-        <style:style style:name="Table12.A" style:family="table-column">
-          <style:properties style:column-width="2.0792inch"/>
-        </style:style>
-        <style:style style:name="Table12.B" style:family="table-column">
-          <style:properties style:column-width="1.7188inch"/>
-        </style:style>
-        <style:style style:name="Table12.C" style:family="table-column">
-          <style:properties style:column-width="3.2576inch"/>
-        </style:style>
-        <style:style style:name="Table12.A1" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="none" fo:border-top="0.0007inch solid #000000" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table12.C1" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table12.A2" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table12.C2" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="0.0007inch solid #000000" fo:border-top="none" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table13" style:family="table">
-          <style:properties style:width="6.3556inch" fo:margin-left="-0.0521inch" table:align="left" style:writing-mode="lr-tb"/>
-        </style:style>
-        <style:style style:name="Table13.A" style:family="table-column">
-          <style:properties style:column-width="1.9194inch"/>
-        </style:style>
-        <style:style style:name="Table13.B" style:family="table-column">
-          <style:properties style:column-width="4.4361inch"/>
-        </style:style>
-        <style:style style:name="Table13.A1" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="none" fo:border-top="0.0007inch solid #000000" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table13.B1" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table13.A2" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table13.B2" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="0.0007inch solid #000000" fo:border-top="none" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table14" style:family="table">
-          <style:properties style:width="6.4042inch" fo:margin-left="-0.0521inch" table:align="left" style:writing-mode="lr-tb"/>
-        </style:style>
-        <style:style style:name="Table14.A" style:family="table-column">
-          <style:properties style:column-width="1.9194inch"/>
-        </style:style>
-        <style:style style:name="Table14.B" style:family="table-column">
-          <style:properties style:column-width="4.4847inch"/>
-        </style:style>
-        <style:style style:name="Table14.A1" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="none" fo:border-top="0.0007inch solid #000000" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table14.B1" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table14.A2" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table14.B2" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="0.0007inch solid #000000" fo:border-top="none" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table15" style:family="table">
-          <style:properties style:width="6.4028inch" fo:margin-left="-0.0521inch" table:align="left" style:writing-mode="lr-tb"/>
-        </style:style>
-        <style:style style:name="Table15.A" style:family="table-column">
-          <style:properties style:column-width="2.2146inch"/>
-        </style:style>
-        <style:style style:name="Table15.B" style:family="table-column">
-          <style:properties style:column-width="4.1813inch"/>
-        </style:style>
-        <style:style style:name="Table15.A1" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="none" fo:border-top="0.0007inch solid #000000" fo:border-bottom="none"/>
-        </style:style>
-        <style:style style:name="Table15.B1" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="none"/>
-        </style:style>
-        <style:style style:name="Table15.A2" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="none" fo:border-top="0.0007inch solid #000000" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table15.B2.1" style:family="table-column">
-          <style:properties style:column-width="4.1882inch"/>
-        </style:style>
-        <style:style style:name="Table15.B2.1.1" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table15.B2.1.2" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="0.0007inch solid #000000" fo:border-top="none" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="Table15.A3" style:family="table-cell">
-          <style:properties fo:vertical-align="top" fo:padding-left="0.0486inch" fo:padding-right="0.0486inch" fo:padding-top="0inch" fo:padding-bottom="0inch" fo:border-left="0.0007inch solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.0007inch solid #000000"/>
-        </style:style>
-        <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Standard" style:master-page-name="Standard">
-          <style:properties fo:text-align="center" style:justify-single-word="false" style:page-number="0">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P2" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:text-align="center" style:justify-single-word="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P3" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:text-align="justify" style:justify-single-word="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P4" style:family="paragraph" style:parent-style-name="Heading 1">
-          <style:properties fo:font-weight="normal" style:font-weight-asian="normal" style:font-weight-complex="normal" fo:text-align="justify" style:justify-single-word="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P5" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:text-align="justify" style:justify-single-word="false" fo:break-before="page">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P6" style:family="paragraph" style:parent-style-name="WW-Corps de texte 2">
-          <style:properties fo:text-align="justify" style:justify-single-word="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P7" style:family="paragraph" style:parent-style-name="WW-Corps de texte 2">
-          <style:properties fo:font-size="11pt" style:font-size-asian="11pt" fo:text-align="justify" style:justify-single-word="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P8" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num35">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P9" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.25inch" fo:margin-right="0inch" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P10" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.25inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P11" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num35">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false" fo:break-before="page">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P12" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt" fo:text-align="justify" style:justify-single-word="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P13" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.4917inch" fo:margin-right="0inch" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P14" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num4">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P15" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num4">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-indent="0inch" style:auto-text-indent="false" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P16" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P17" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num7">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P18" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num7">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P19" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-align="justify" style:justify-single-word="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P20" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num15">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P21" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="1inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P22" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.25inch" fo:margin-right="0inch" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false" fo:break-before="page">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P23" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.5inch" fo:margin-right="0inch" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P24" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num39">
-          <style:properties fo:margin-left="0.5inch" fo:margin-right="0inch" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.9inch" style:type="center"/>
-              <style:tab-stop style:position="7.05inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P25" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.5inch" fo:margin-right="0inch" fo:color="#0000ff" style:font-name="Arial" fo:font-size="8pt" fo:font-weight="bold" style:font-size-asian="8pt" style:font-weight-asian="bold" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P26" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" style:font-name="Arial" fo:font-size="8pt" style:font-size-asian="8pt" fo:text-align="center" style:justify-single-word="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P27" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" style:font-name="Arial" fo:font-size="8pt" fo:font-weight="bold" style:font-size-asian="8pt" style:font-weight-asian="bold">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P28" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" style:font-name="Arial" fo:font-size="8pt" style:font-size-asian="8pt">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P29" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.25inch" fo:margin-right="0inch" fo:color="#0000ff" style:font-name="Arial" fo:font-size="8pt" style:font-size-asian="8pt" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P30" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.25inch" fo:margin-right="0inch" fo:color="#0000ff" style:font-name="Arial" fo:font-size="8pt" fo:font-weight="bold" style:font-size-asian="8pt" style:font-weight-asian="bold" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P31" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.25inch" fo:margin-right="0inch" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P32" style:family="paragraph" style:parent-style-name="Text body indent">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P33" style:family="paragraph" style:parent-style-name="Text body indent">
-          <style:properties fo:margin-left="0.9835inch" fo:margin-right="0inch" fo:color="#0000ff" fo:language="nl" fo:country="NL" fo:font-style="italic" style:font-style-asian="italic" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P34" style:family="paragraph" style:parent-style-name="Text body indent" style:list-style-name="WW8Num12">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P35" style:family="paragraph" style:parent-style-name="Text body indent">
-          <style:properties>
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P36" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num23">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P37" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.4917inch" fo:margin-right="0inch" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P38" style:family="paragraph" style:parent-style-name="Text body indent" style:list-style-name="WW8Num8">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P39" style:family="paragraph" style:parent-style-name="Text body indent" style:list-style-name="WW8Num28">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P40" style:family="paragraph" style:parent-style-name="Text body indent" style:list-style-name="WW8Num28">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P41" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.4917inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P42" style:family="paragraph" style:parent-style-name="Text body indent">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P43" style:family="paragraph" style:parent-style-name="Text body indent" style:list-style-name="WW8Num49">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P44" style:family="paragraph" style:parent-style-name="Text body indent">
-          <style:properties fo:font-style="italic" style:font-style-asian="italic">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P45" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.4917inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:text-underline="single" style:text-underline-color="font-color" style:font-style-asian="italic" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P46" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P47" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num24">
-          <style:properties fo:margin-left="0.2335inch" fo:margin-right="0inch" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.9165inch" style:type="center"/>
-              <style:tab-stop style:position="7.0665inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P48" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:font-style="italic" style:font-style-asian="italic" fo:text-align="justify" style:justify-single-word="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P49" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.4917inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P50" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num34">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P51" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num34">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P52" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num11">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P53" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num11">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P54" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num16">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P55" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num16">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P56" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num17">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P57" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.2417inch" fo:margin-right="0inch" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P58" style:family="paragraph" style:parent-style-name="Text body indent">
-          <style:properties fo:margin-left="0.5inch" fo:margin-right="0inch" fo:text-align="start" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P59" style:family="paragraph" style:parent-style-name="Text body indent">
-          <style:properties fo:margin-left="0.75inch" fo:margin-right="0inch" fo:text-align="start" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P60" style:family="paragraph" style:parent-style-name="Text body indent" style:list-style-name="WW8Num35">
-          <style:properties fo:margin-left="0.25inch" fo:margin-right="0inch" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="4.4inch" style:type="center"/>
-              <style:tab-stop style:position="7.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P61" style:family="paragraph" style:parent-style-name="Text body indent">
-          <style:properties fo:margin-left="0.7417inch" fo:margin-right="0inch" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P62" style:family="paragraph" style:parent-style-name="Text body indent">
-          <style:properties fo:margin-left="0.7417inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P63" style:family="paragraph" style:parent-style-name="Text body indent">
-          <style:properties fo:margin-left="0.9835inch" fo:margin-right="0inch" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P64" style:family="paragraph" style:parent-style-name="Text body indent">
-          <style:properties fo:margin-left="0.9835inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P65" style:family="paragraph" style:parent-style-name="Text body indent" style:list-style-name="WW8Num5">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P66" style:family="paragraph" style:parent-style-name="Text body indent" style:list-style-name="WW8Num5">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P67" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num35">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" style:text-crossing-out="single-line" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P68" style:family="paragraph" style:parent-style-name="Text body indent" style:list-style-name="WW8Num35">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P69" style:family="paragraph" style:parent-style-name="Text body indent" style:list-style-name="WW8Num41">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P70" style:family="paragraph" style:parent-style-name="Text body indent" style:list-style-name="WW8Num41">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P71" style:family="paragraph" style:parent-style-name="Text body indent" style:list-style-name="WW8Num2">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P72" style:family="paragraph" style:parent-style-name="Text body indent" style:list-style-name="WW8Num2">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P73" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.4917inch" fo:margin-right="0inch" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false" fo:break-before="page">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P74" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num35">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P75" style:family="paragraph" style:parent-style-name="Heading 3">
-          <style:properties>
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P76" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num6">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P77" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num6">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P78" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.25inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P79" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num31">
-          <style:properties fo:margin-left="0.25inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.9inch" style:type="center"/>
-              <style:tab-stop style:position="7.05inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P80" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num10">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P81" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num37">
-          <style:properties fo:margin-left="0.25inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.9inch" style:type="center"/>
-              <style:tab-stop style:position="7.05inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P82" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num22">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P83" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num19">
-          <style:properties fo:margin-left="0.25inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.9inch" style:type="center"/>
-              <style:tab-stop style:position="7.05inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P84" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num21">
-          <style:properties fo:margin-left="0.25inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.9inch" style:type="center"/>
-              <style:tab-stop style:position="7.05inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P85" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:text-underline="single" style:text-underline-color="font-color" fo:font-weight="bold" style:font-style-asian="italic" style:font-weight-asian="bold">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P86" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties>
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P87" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num3">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P88" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num33">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P89" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:language="none" fo:country="none" fo:font-style="italic" style:language-asian="none" style:country-asian="none" style:font-style-asian="italic">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P90" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-size="8pt" fo:font-style="italic" style:font-size-asian="8pt" style:font-style-asian="italic" style:font-size-complex="8pt">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P91" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.25inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" fo:font-weight="bold" style:font-style-asian="italic" style:font-weight-asian="bold" style:font-weight-complex="bold" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P92" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.25inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:text-underline="single" style:text-underline-color="font-color" fo:font-weight="bold" style:font-style-asian="italic" style:font-weight-asian="bold" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P93" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num1">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P94" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num48">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P95" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.4917inch" fo:margin-right="0inch" fo:color="#0000ff" fo:language="none" fo:country="none" fo:font-style="italic" style:language-asian="none" style:country-asian="none" style:font-style-asian="italic" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P96" style:family="paragraph">
-          <style:properties fo:text-align="center"/>
-        </style:style>
-        <style:style style:name="P97" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.4917inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-indent="0inch" style:auto-text-indent="false" fo:break-before="page">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P98" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num47">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P99" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.9811inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P100" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num29">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P101" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num26">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P102" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num20">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P103" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.9835inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P104" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num29">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P105" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.9835inch" fo:margin-right="0inch" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P106" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num50">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P107" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num36">
-          <style:properties fo:margin-left="0.4917inch" fo:margin-right="0inch" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.9inch" style:type="center"/>
-              <style:tab-stop style:position="7.05inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P108" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.4917inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:text-underline="single" style:text-underline-color="font-color" style:font-style-asian="italic" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P109" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num30">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P110" style:family="paragraph" style:parent-style-name="texte">
-          <style:properties fo:margin-top="0inch" fo:margin-bottom="0inch" style:font-name="Times New Roman">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P111" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num32">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P112" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.9917inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P113" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num14">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P114" style:family="paragraph" style:parent-style-name="Heading 4">
-          <style:properties>
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P115" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num46">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P116" style:family="paragraph" style:parent-style-name="Heading 5">
-          <style:properties>
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P117" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.9835inch" fo:margin-right="0inch" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P118" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="1.4752inch" fo:margin-right="0inch" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P119" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num27">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P120" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num25">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P121" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num40">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P122" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num13">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P123" style:family="paragraph">
-          <style:properties fo:font-size="24pt"/>
-        </style:style>
-        <style:style style:name="P124" style:family="paragraph">
-          <style:properties style:writing-mode="lr-tb"/>
-        </style:style>
-        <style:style style:name="P125" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num9">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P126" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num9">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P127" style:family="paragraph" style:parent-style-name="Text body indent">
-          <style:properties fo:margin-left="0.5inch" fo:margin-right="0inch" fo:font-style="italic" style:font-style-asian="italic" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P128" style:family="paragraph" style:parent-style-name="Text body indent">
-          <style:properties fo:margin-left="0.5inch" fo:margin-right="0inch" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P129" style:family="paragraph" style:parent-style-name="Text body indent">
-          <style:properties fo:margin-left="0.5inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P130" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-align="center" style:justify-single-word="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P131" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-align="justify" style:justify-single-word="false" fo:break-before="page">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P132" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num18">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P133" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num43">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P134" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" fo:font-weight="bold" style:font-style-asian="italic" style:font-weight-asian="bold" fo:break-before="page">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P135" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" fo:font-weight="bold" style:font-style-asian="italic" style:font-weight-asian="bold" style:font-weight-complex="bold" fo:text-align="justify" style:justify-single-word="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P136" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" fo:font-weight="bold" style:font-style-asian="italic" style:font-weight-asian="bold" style:font-weight-complex="bold" fo:text-align="justify" style:justify-single-word="false" fo:break-before="page">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P137" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" fo:font-weight="bold" style:font-style-asian="italic" style:font-weight-asian="bold" fo:text-align="justify" style:justify-single-word="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P138" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" style:font-weight-complex="bold" fo:text-align="justify" style:justify-single-word="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P139" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" style:font-weight-complex="bold" fo:text-align="justify" style:justify-single-word="false" fo:break-before="page">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P140" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num45">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" style:font-weight-complex="bold" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P141" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" style:font-weight-complex="bold" fo:line-height="0.1807inch" fo:orphans="0" fo:widows="0" fo:break-before="page" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P142" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:line-height="0.139inch" fo:orphans="0" fo:widows="0" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P143" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:line-height="0.0957inch" fo:orphans="0" fo:widows="0" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P144" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0.4256inch" fo:line-height="0.1874inch" fo:orphans="0" fo:widows="0" fo:text-indent="0inch" style:auto-text-indent="false" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P145" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0.4256inch" fo:color="#0000ff" fo:letter-spacing="0.0146inch" fo:font-style="italic" style:font-style-asian="italic" fo:line-height="0.1874inch" fo:orphans="0" fo:widows="0" fo:text-indent="0inch" style:auto-text-indent="false" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P146" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:line-height="0.1665inch" fo:orphans="0" fo:widows="0" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P147" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:line-height="0.1937inch" fo:orphans="0" fo:widows="0" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P148" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.572inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" style:line-height-at-least="0.1665inch" fo:orphans="0" fo:widows="0" fo:text-indent="0inch" style:auto-text-indent="false" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P149" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0.4256inch" fo:line-height="0.1874inch" fo:text-align="justify" style:justify-single-word="false" fo:orphans="0" fo:widows="0" fo:text-indent="0inch" style:auto-text-indent="false" fo:break-before="page" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P150" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0.4256inch" fo:line-height="0.1874inch" fo:text-align="justify" style:justify-single-word="false" fo:orphans="0" fo:widows="0" fo:text-indent="0inch" style:auto-text-indent="false" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P151" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0.4256inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:line-height="0.1874inch" fo:text-align="justify" style:justify-single-word="false" fo:orphans="0" fo:widows="0" fo:text-indent="0inch" style:auto-text-indent="false" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P152" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.298inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" style:line-height-at-least="0.1665inch" fo:orphans="0" fo:widows="0" fo:text-indent="0inch" style:auto-text-indent="false" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P153" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:line-height="0.1929inch" fo:orphans="0" fo:widows="0" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P154" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.0819inch" fo:margin-right="0.4252inch" fo:line-height="0.1874inch" fo:text-align="justify" style:justify-single-word="false" fo:orphans="0" fo:widows="0" fo:text-indent="0inch" style:auto-text-indent="false" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P155" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:line-height="0.1953inch" fo:text-align="justify" style:justify-single-word="false" fo:orphans="0" fo:widows="0" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P156" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.0819inch" fo:margin-right="0.4256inch" fo:line-height="0.1874inch" fo:text-align="justify" style:justify-single-word="false" fo:orphans="0" fo:widows="0" fo:text-indent="0inch" style:auto-text-indent="false" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P157" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:line-height="0.139inch" fo:text-align="justify" style:justify-single-word="false" fo:orphans="0" fo:widows="0" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P158" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.0819inch" fo:margin-right="0.4256inch" fo:color="#0000ff" fo:letter-spacing="-0.0016inch" fo:font-style="italic" style:font-style-asian="italic" fo:line-height="0.1874inch" fo:text-align="justify" style:justify-single-word="false" fo:orphans="0" fo:widows="0" fo:text-indent="0inch" style:auto-text-indent="false" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P159" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.0819inch" fo:margin-right="0.4244inch" fo:line-height="0.1874inch" fo:text-align="justify" style:justify-single-word="false" fo:orphans="0" fo:widows="0" fo:text-indent="0inch" style:auto-text-indent="false" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P160" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:line-height="0.0772inch" fo:orphans="0" fo:widows="0" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P161" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:line-height="0.1665inch" fo:orphans="0" fo:widows="0" fo:break-before="page" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P162" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:line-height="0.1075inch" fo:orphans="0" fo:widows="0" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P163" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.0854inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" style:line-height-at-least="0.1665inch" fo:orphans="0" fo:widows="0" fo:text-indent="0inch" style:auto-text-indent="false" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P164" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.0839inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" style:line-height-at-least="0.1665inch" fo:orphans="0" fo:widows="0" fo:text-indent="0inch" style:auto-text-indent="false" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P165" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.0819inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:line-height="0.1665inch" fo:text-align="justify" style:justify-single-word="false" fo:orphans="0" fo:widows="0" fo:text-indent="0inch" style:auto-text-indent="false" fo:break-before="page" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P166" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:line-height="0.2071inch" fo:text-align="justify" style:justify-single-word="false" fo:orphans="0" fo:widows="0" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P167" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num44">
-          <style:properties fo:margin-left="-0.25inch" fo:margin-right="0.4256inch" fo:line-height="0.1874inch" fo:text-align="justify" style:justify-single-word="false" fo:orphans="0" fo:widows="0" fo:text-indent="0inch" style:auto-text-indent="false" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P168" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:line-height="0.1929inch" fo:text-align="justify" style:justify-single-word="false" fo:orphans="0" fo:widows="0" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P169" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num44">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:line-height="0.2016inch" fo:text-align="justify" style:justify-single-word="false" fo:orphans="0" fo:widows="0" fo:text-indent="0inch" style:auto-text-indent="false" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P170" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:line-height="0.2063inch" fo:text-align="justify" style:justify-single-word="false" fo:orphans="0" fo:widows="0" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P171" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num44">
-          <style:properties fo:margin-left="-0.25inch" fo:margin-right="0.4264inch" fo:line-height="0.1874inch" fo:text-align="justify" style:justify-single-word="false" fo:orphans="0" fo:widows="0" fo:text-indent="0inch" style:auto-text-indent="false" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P172" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0.4264inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:line-height="0.1874inch" fo:text-align="justify" style:justify-single-word="false" fo:orphans="0" fo:widows="0" fo:text-indent="0inch" style:auto-text-indent="false" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P173" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:line-height="0.0752inch" fo:orphans="0" fo:widows="0" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P174" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:line-height="0.1291inch" fo:text-align="justify" style:justify-single-word="false" fo:orphans="0" fo:widows="0" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P175" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.0819inch" fo:margin-right="0inch" fo:line-height="0.1665inch" fo:text-align="justify" style:justify-single-word="false" fo:orphans="0" fo:widows="0" fo:text-indent="0inch" style:auto-text-indent="false" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P176" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:line-height="0.1437inch" fo:text-align="justify" style:justify-single-word="false" fo:orphans="0" fo:widows="0" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P177" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.0819inch" fo:margin-right="0.4264inch" fo:line-height="0.1874inch" fo:text-align="justify" style:justify-single-word="false" fo:orphans="0" fo:widows="0" fo:text-indent="0inch" style:auto-text-indent="false" fo:break-before="page" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P178" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.0811inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" style:line-height-at-least="0.1665inch" fo:orphans="0" fo:widows="0" fo:text-indent="0inch" style:auto-text-indent="false" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P179" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:line-height="0.1118inch" fo:orphans="0" fo:widows="0" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P180" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.0819inch" fo:margin-right="0inch" fo:line-height="0.1665inch" fo:orphans="0" fo:widows="0" fo:text-indent="0inch" style:auto-text-indent="false" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P181" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:line-height="0.078inch" fo:orphans="0" fo:widows="0" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P182" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:line-height="0.1953inch" fo:orphans="0" fo:widows="0" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P183" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.0819inch" fo:margin-right="0.4256inch" fo:line-height="0.1874inch" fo:orphans="0" fo:widows="0" fo:text-indent="0inch" style:auto-text-indent="false" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P184" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.0819inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:line-height="0.1665inch" fo:orphans="0" fo:widows="0" fo:text-indent="0inch" style:auto-text-indent="false" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P185" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.0819inch" fo:margin-right="0inch" fo:line-height="0.1665inch" fo:orphans="0" fo:widows="0" fo:text-indent="0inch" style:auto-text-indent="false" fo:break-before="page" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P186" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.0819inch" fo:margin-right="0inch" fo:color="#0000ff" fo:letter-spacing="-0.0016inch" fo:font-style="italic" style:font-style-asian="italic" fo:line-height="0.1665inch" fo:orphans="0" fo:widows="0" fo:text-indent="0inch" style:auto-text-indent="false" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P187" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:line-height="0.1665inch" fo:orphans="0" fo:widows="0" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P188" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.3402inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" style:line-height-at-least="0.1665inch" fo:orphans="0" fo:widows="0" fo:text-indent="0inch" style:auto-text-indent="false" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P189" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" style:line-height-at-least="0.1665inch" fo:orphans="0" fo:widows="0" fo:break-before="page" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P190" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:line-height="0.1909inch" fo:orphans="0" fo:widows="0" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P191" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.6209inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" style:line-height-at-least="0.1665inch" fo:orphans="0" fo:widows="0" fo:text-indent="0inch" style:auto-text-indent="false" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P192" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:line-height="0.0756inch" fo:orphans="0" fo:widows="0" style:text-autospace="none">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P193" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:text-underline="single" style:text-underline-color="font-color" style:font-style-asian="italic" fo:text-align="justify" style:justify-single-word="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P194" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:break-before="page">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P195" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:text-underline="single" style:text-underline-color="font-color" style:font-style-asian="italic">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P196" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:text-align="center" style:justify-single-word="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P197" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:text-underline="single" style:text-underline-color="font-color" style:font-style-asian="italic" fo:text-align="center" style:justify-single-word="false" fo:break-before="page">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P198" style:family="paragraph" style:parent-style-name="WW-Retrait corps de texte 3">
-          <style:properties fo:margin-left="0.4917inch" fo:margin-right="0inch" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P199" style:family="paragraph" style:parent-style-name="WW-Retrait corps de texte 3">
-          <style:properties fo:margin-left="0.4917inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P200" style:family="paragraph" style:parent-style-name="WW-Retrait corps de texte 3">
-          <style:properties>
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P201" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.4917inch" fo:margin-right="0inch" fo:color="#0000ff" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P202" style:family="paragraph">
-          <style:properties fo:font-size="24pt" fo:text-align="center"/>
-        </style:style>
-        <style:style style:name="P203" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num38">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P204" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.9835inch" fo:margin-right="0inch" fo:color="#000080" fo:font-style="italic" style:font-style-asian="italic" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P205" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.4917inch" fo:margin-right="0inch" style:font-size-complex="10pt" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P206" style:family="paragraph" style:parent-style-name="Footer">
-          <style:properties>
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P207" style:family="paragraph" style:parent-style-name="Footer">
-          <style:properties fo:break-before="page">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P208" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.25inch" fo:margin-right="0inch" style:font-size-complex="10pt" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P209" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.4917inch" fo:margin-right="0inch" fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" style:font-size-complex="10pt" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P210" style:family="paragraph" style:parent-style-name="Title">
-          <style:properties style:font-name="Arial" fo:font-size="12pt" style:font-size-asian="12pt" style:font-name-complex="Arial" fo:break-before="page">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P211" style:family="paragraph" style:parent-style-name="Title">
-          <style:properties style:font-name="Arial" fo:font-size="12pt" style:font-size-asian="12pt" style:font-name-complex="Arial">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P212" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties style:font-name="Arial" fo:font-style="italic" style:text-underline="single" style:text-underline-color="font-color" fo:font-weight="bold" style:font-style-asian="italic" style:font-weight-asian="bold" style:font-name-complex="Arial" style:font-style-complex="italic" style:font-weight-complex="bold" fo:text-align="center" style:justify-single-word="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P213" style:family="paragraph" style:parent-style-name="Heading 1">
-          <style:properties style:font-name="Arial" style:font-name-complex="Arial">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P214" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties style:font-name="Arial" style:font-name-complex="Arial" fo:text-align="center" style:justify-single-word="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P215" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties style:font-name="Arial" style:font-name-complex="Arial" fo:text-align="justify" style:justify-single-word="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P216" style:family="paragraph" style:parent-style-name="texte">
-          <style:properties style:font-name="Arial" style:font-name-complex="Arial">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P217" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:margin-left="0.25inch" fo:margin-right="0inch" style:font-name="Arial" style:font-name-complex="Arial" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P218" style:family="paragraph" style:parent-style-name="texte">
-          <style:properties>
-            <style:tab-stops>
-              <style:tab-stop style:position="3.4inch" style:type="center"/>
-              <style:tab-stop style:position="6.55inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P219" style:family="paragraph" style:parent-style-name="Standard" style:list-style-name="WW8Num42">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" style:font-name="Arial" style:font-name-complex="Arial" fo:text-indent="0inch" style:auto-text-indent="false">
-            <style:tab-stops>
-              <style:tab-stop style:position="3.65inch" style:type="center"/>
-              <style:tab-stop style:position="6.8inch" style:type="right"/>
-            </style:tab-stops>
-          </style:properties>
-        </style:style>
-        <style:style style:name="P220" style:family="paragraph" style:parent-style-name="texte">
-          <style:properties style:font-name="Arial" style:font-name-complex="Arial"/>
-        </style:style>
-        <style:style style:name="P221" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties style:font-name="Arial" style:font-name-complex="Arial" fo:text-align="justify" style:justify-single-word="false"/>
-        </style:style>
-        <style:style style:name="P222" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties style:font-name="Arial" style:font-name-complex="Arial" fo:text-align="center" style:justify-single-word="false"/>
-        </style:style>
-        <style:style style:name="P223" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties style:font-name="Arial" style:font-name-complex="Arial"/>
-        </style:style>
-        <style:style style:name="P224" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:text-align="center" style:justify-single-word="false"/>
-        </style:style>
-        <style:style style:name="P225" style:family="paragraph" style:parent-style-name="Standard">
-          <style:properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold" fo:break-before="page"/>
-        </style:style>
-        <style:style style:name="T1" style:family="text">
-          <style:properties fo:font-size="11pt" style:font-size-asian="11pt"/>
-        </style:style>
-        <style:style style:name="T2" style:family="text">
-          <style:properties style:text-position="super 58%" fo:font-size="11pt" style:font-size-asian="11pt"/>
-        </style:style>
-        <style:style style:name="T3" style:family="text">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic"/>
-        </style:style>
-        <style:style style:name="T4" style:family="text">
-          <style:properties fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/>
-        </style:style>
-        <style:style style:name="T5" style:family="text">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic"/>
-        </style:style>
-        <style:style style:name="T6" style:family="text" style:parent-style-name="Internet link">
-          <style:properties fo:font-style="italic" style:font-style-asian="italic"/>
-        </style:style>
-        <style:style style:name="T7" style:family="text">
-          <style:properties style:font-name="Arial" style:font-name-complex="Arial"/>
-        </style:style>
-        <style:style style:name="T8" style:family="text">
-          <style:properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
-        </style:style>
-        <style:style style:name="T9" style:family="text">
-          <style:properties style:font-name="Arial" fo:font-size="10pt" style:font-size-asian="10pt" style:font-name-complex="Arial" style:font-size-complex="10pt"/>
-        </style:style>
-        <style:style style:name="T10" style:family="text">
-          <style:properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-size-complex="10pt" style:font-weight-complex="bold"/>
-        </style:style>
-        <style:style style:name="T11" style:family="text">
-          <style:properties style:font-size-complex="10pt"/>
-        </style:style>
-        <style:style style:name="T12" style:family="text" style:parent-style-name="Footnote Symbol">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic"/>
-        </style:style>
-        <style:style style:name="T13" style:family="text">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:text-underline="single" style:text-underline-color="font-color" style:font-style-asian="italic"/>
-        </style:style>
-        <style:style style:name="T14" style:family="text">
-          <style:properties fo:language="en" fo:country="GB"/>
-        </style:style>
-        <style:style style:name="T15" style:family="text">
-          <style:properties style:use-window-font-color="true" style:font-name="Times New Roman" fo:font-size="12pt" fo:language="fr" fo:country="FR" style:font-name-asian="Times New Roman" style:font-size-asian="12pt" style:font-name-complex="Times New Roman" style:font-size-complex="12pt" style:language-complex="ar" style:country-complex="SA"/>
-        </style:style>
-        <style:style style:name="T16" style:family="text">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" style:font-weight-complex="bold"/>
-        </style:style>
-        <style:style style:name="T17" style:family="text">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" fo:font-weight="bold" style:font-style-asian="italic" style:font-weight-asian="bold"/>
-        </style:style>
-        <style:style style:name="T18" style:family="text">
-          <style:properties fo:color="#0000ff" fo:letter-spacing="0.0146inch" fo:font-style="italic" style:font-style-asian="italic"/>
-        </style:style>
-        <style:style style:name="T19" style:family="text">
-          <style:properties fo:color="#0000ff" fo:letter-spacing="-0.0016inch" fo:font-style="italic" style:font-style-asian="italic"/>
-        </style:style>
-        <style:style style:name="T20" style:family="text">
-          <style:properties fo:color="#0000ff" fo:letter-spacing="0.0008inch" fo:font-style="italic" style:font-style-asian="italic"/>
-        </style:style>
-        <style:style style:name="T21" style:family="text">
-          <style:properties fo:color="#0000ff" fo:letter-spacing="0.0028inch" fo:font-style="italic" style:font-style-asian="italic"/>
-        </style:style>
-        <style:style style:name="T22" style:family="text">
-          <style:properties fo:color="#0000ff" fo:letter-spacing="0.0075inch" fo:font-style="italic" style:font-style-asian="italic"/>
-        </style:style>
-        <style:style style:name="T23" style:family="text">
-          <style:properties fo:color="#0000ff" fo:letter-spacing="0.0091inch" fo:font-style="italic" style:font-style-asian="italic"/>
-        </style:style>
-        <style:style style:name="T24" style:family="text">
-          <style:properties fo:color="#0000ff" fo:letter-spacing="0.0154inch" fo:font-style="italic" style:font-style-asian="italic"/>
-        </style:style>
-        <style:style style:name="T25" style:family="text">
-          <style:properties fo:color="#0000ff" fo:letter-spacing="0.002inch" fo:font-style="italic" style:font-style-asian="italic"/>
-        </style:style>
-        <style:style style:name="T26" style:family="text">
-          <style:properties fo:color="#0000ff" fo:letter-spacing="0.0299inch" fo:font-style="italic" style:font-style-asian="italic"/>
-        </style:style>
-        <style:style style:name="T27" style:family="text">
-          <style:properties fo:color="#0000ff" fo:letter-spacing="-0.002inch" fo:font-style="italic" style:font-style-asian="italic"/>
-        </style:style>
-        <style:style style:name="T28" style:family="text">
-          <style:properties fo:color="#0000ff" fo:letter-spacing="0.0173inch" fo:font-style="italic" style:font-style-asian="italic"/>
-        </style:style>
-        <style:style style:name="T29" style:family="text">
-          <style:properties fo:color="#0000ff" fo:letter-spacing="0.0425inch" fo:font-style="italic" style:font-style-asian="italic"/>
-        </style:style>
-        <style:style style:name="T30" style:family="text">
-          <style:properties fo:color="#0000ff" fo:letter-spacing="-0.0043inch" fo:font-style="italic" style:font-style-asian="italic"/>
-        </style:style>
-        <style:style style:name="T31" style:family="text">
-          <style:properties fo:color="#0000ff" fo:letter-spacing="0.0083inch" fo:font-style="italic" style:font-style-asian="italic"/>
-        </style:style>
-        <style:style style:name="T32" style:family="text">
-          <style:properties fo:color="#0000ff" fo:letter-spacing="0.0417inch" fo:font-style="italic" style:font-style-asian="italic"/>
-        </style:style>
-        <style:style style:name="T33" style:family="text">
-          <style:properties fo:color="#0000ff" fo:letter-spacing="0.0063inch" fo:font-style="italic" style:font-style-asian="italic"/>
-        </style:style>
-        <style:style style:name="T34" style:family="text">
-          <style:properties fo:color="#0000ff" fo:letter-spacing="0.0071inch" fo:font-style="italic" style:font-style-asian="italic"/>
-        </style:style>
-        <style:style style:name="T35" style:family="text">
-          <style:properties fo:color="#0000ff" fo:letter-spacing="0.0252inch" fo:font-style="italic" style:font-style-asian="italic"/>
-        </style:style>
-        <style:style style:name="T36" style:family="text">
-          <style:properties fo:color="#0000ff" fo:letter-spacing="0.0366inch" fo:font-style="italic" style:font-style-asian="italic"/>
-        </style:style>
-        <style:style style:name="T37" style:family="text">
-          <style:properties fo:color="#0000ff" fo:letter-spacing="-0.0091inch" fo:font-style="italic" style:font-style-asian="italic"/>
-        </style:style>
-        <style:style style:name="T38" style:family="text">
-          <style:properties style:text-underline="single" style:text-underline-color="font-color"/>
-        </style:style>
-        <style:style style:name="T39" style:family="text">
-          <style:properties fo:color="#0000ff" fo:font-style="italic" style:font-style-asian="italic" style:font-size-complex="10pt"/>
-        </style:style>
-        <style:style style:name="fr1" style:family="graphics" style:parent-style-name="Graphics">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" style:vertical-pos="top" style:vertical-rel="baseline" fo:padding-left="0.1102inch" fo:padding-right="0.1102inch" fo:padding-top="0.0602inch" fo:padding-bottom="0.0602inch" fo:border="none" style:mirror="none" fo:clip="rect(0inch 0inch 0inch 0inch)" draw:luminance="0%" draw:contrast="0%" draw:red="0%" draw:green="0%" draw:blue="0%" draw:gamma="1" draw:color-inversion="false" draw:transparency="0%" draw:color-mode="standard"/>
-        </style:style>
-        <style:style style:name="fr2" style:family="graphics" style:parent-style-name="Graphics">
-          <style:properties fo:margin-left="0.1256inch" fo:margin-right="0.1256inch" style:wrap="run-through" style:vertical-pos="from-top" style:vertical-rel="char" style:horizontal-pos="from-left" style:horizontal-rel="char" fo:padding="0.0102inch" fo:border="none" style:mirror="none" fo:clip="rect(0inch 0inch 0inch 0inch)" draw:luminance="0%" draw:contrast="0%" draw:red="0%" draw:green="0%" draw:blue="0%" draw:gamma="1" draw:color-inversion="false" draw:transparency="0%" draw:color-mode="standard"/>
-        </style:style>
-        <style:style style:name="fr3" style:family="graphics">
-          <style:properties fo:margin-left="0.1256inch" fo:margin-right="0.1256inch" style:run-through="foreground" style:wrap="run-through"/>
-        </style:style>
-        <style:style style:name="fr4" style:family="graphics" style:parent-style-name="Graphics">
-          <style:properties fo:margin-left="0.1256inch" fo:margin-right="0.1256inch" style:wrap="run-through" style:vertical-pos="from-top" style:vertical-rel="paragraph" style:horizontal-pos="from-left" style:horizontal-rel="paragraph" fo:padding="0.0102inch" fo:border="none" style:mirror="none" fo:clip="rect(0inch 0inch 0inch 0inch)" draw:luminance="0%" draw:contrast="0%" draw:red="0%" draw:green="0%" draw:blue="0%" draw:gamma="1" draw:color-inversion="false" draw:transparency="0%" draw:color-mode="standard"/>
-        </style:style>
-        <style:style style:name="fr5" style:family="graphics">
-          <style:properties style:run-through="foreground" style:wrap="run-through"/>
-        </style:style>
-        <style:style style:name="fr6" style:family="graphics" style:parent-style-name="OLE">
-          <style:properties fo:margin-left="0inch" fo:margin-right="0inch" style:vertical-pos="top" style:vertical-rel="baseline" fo:padding-left="0.1102inch" fo:padding-right="0.1102inch" fo:padding-top="0.0602inch" fo:padding-bottom="0.0602inch" fo:border="none" draw:visible-area-left="0inch" draw:visible-area-top="0inch" draw:visible-area-width="11.1173inch" draw:visible-area-height="6.6705inch" draw:draw-aspect="content"/>
-        </style:style>
-        <style:style style:name="gr1" style:family="graphics">
-          <style:properties draw:stroke="solid" svg:stroke-width="0.0244inch" svg:stroke-color="#008000" draw:fill="none" draw:fill-color="#ffffff" draw:textarea-horizontal-align="center" draw:textarea-vertical-align="middle" draw:shadow="hidden" fo:margin-left="0.1256inch" fo:margin-right="0.1256inch" style:run-through="foreground" style:wrap="run-through"/>
-        </style:style>
-        <style:style style:name="gr2" style:family="graphics">
-          <style:properties style:run-through="foreground" style:wrap="run-through"/>
-        </style:style>
-        <style:style style:name="gr3" style:family="graphics">
-          <style:properties draw:stroke="solid" svg:stroke-width="0.0173inch" svg:stroke-color="#000080" draw:fill="solid" draw:fill-color="#ffffff" fo:min-height="1.2201inch" draw:shadow="hidden" style:run-through="foreground"/>
-        </style:style>
-        <style:style style:name="gr4" style:family="graphics">
-          <style:properties draw:stroke="none" draw:fill="none" draw:fill-color="#ffffff" draw:auto-grow-width="false" draw:auto-grow-height="false" fo:padding-top="0.05inch" fo:padding-bottom="0.05inch" fo:padding-left="0.1inch" fo:padding-right="0.1inch" style:run-through="foreground"/>
-        </style:style>
-        <style:style style:name="gr5" style:family="graphics">
-          <style:properties draw:stroke="solid" svg:stroke-width="0.0173inch" svg:stroke-color="#333399" draw:fill="none" draw:fill-color="#ffffff" draw:textarea-horizontal-align="center" draw:textarea-vertical-align="middle" draw:shadow="hidden" fo:margin-left="0.1256inch" fo:margin-right="0.1256inch" style:run-through="foreground" style:wrap="run-through"/>
-        </style:style>
-        <style:style style:name="gr6" style:family="graphics">
-          <style:properties draw:stroke="solid" svg:stroke-width="0.0173inch" svg:stroke-color="#008000" draw:fill="solid" draw:fill-color="#ffffff" fo:min-height="0.9945inch" draw:shadow="hidden" style:run-through="foreground"/>
-        </style:style>
-        <style:style style:name="gr7" style:family="graphics">
-          <style:properties draw:stroke="solid" svg:stroke-width="0.0173inch" svg:stroke-color="#ff6600" draw:fill="solid" draw:fill-color="#ffffff" fo:min-height="3.6665inch" draw:shadow="hidden" style:run-through="foreground"/>
-        </style:style>
-        <style:style style:name="gr8" style:family="graphics">
-          <style:properties draw:stroke="solid" svg:stroke-width="0.0244inch" svg:stroke-color="#ff6600" draw:fill="none" draw:fill-color="#ffffff" draw:textarea-horizontal-align="center" draw:textarea-vertical-align="middle" draw:shadow="hidden" fo:margin-left="0.1256inch" fo:margin-right="0.1256inch" style:run-through="foreground" style:wrap="run-through"/>
-        </style:style>
-        <style:style style:name="gr9" style:family="graphics">
-          <style:properties draw:stroke="solid" svg:stroke-width="0.0173inch" svg:stroke-color="#993300" draw:fill="solid" draw:fill-color="#ffffff" fo:min-height="2.5146inch" draw:shadow="hidden" style:run-through="foreground"/>
-        </style:style>
-        <style:style style:name="gr10" style:family="graphics">
-          <style:properties draw:stroke="solid" svg:stroke-width="0.0244inch" svg:stroke-color="#993300" draw:fill="none" draw:fill-color="#ffffff" draw:textarea-horizontal-align="center" draw:textarea-vertical-align="middle" draw:shadow="hidden" fo:margin-left="0.1256inch" fo:margin-right="0.1256inch" style:run-through="foreground" style:wrap="run-through"/>
-        </style:style>
-        <style:style style:name="gr11" style:family="graphics">
-          <style:properties fo:margin-left="0.1256inch" fo:margin-right="0.1256inch" style:run-through="foreground" style:wrap="run-through"/>
-        </style:style>
-        <style:style style:name="gr12" style:family="graphics">
-          <style:properties style:run-through="foreground"/>
-        </style:style>
-        <style:style style:name="gr13" style:family="graphics">
-          <style:properties draw:stroke="solid" svg:stroke-width="0.0102inch" svg:stroke-color="#000000" draw:marker-end="msArrowEnd 5" draw:marker-end-width="0.1457inch" draw:marker-end-center="false" draw:fill="none" draw:fill-color="#ffffff" draw:textarea-horizontal-align="center" draw:textarea-vertical-align="middle" draw:shadow="hidden" style:run-through="foreground"/>
-        </style:style>
-        <style:style style:name="gr14" style:family="graphics">
-          <style:properties draw:stroke="solid" svg:stroke-width="0.0102inch" svg:stroke-color="#000000" draw:fill="solid" draw:fill-color="#ffffff" draw:auto-grow-width="false" draw:auto-grow-height="false" fo:padding-top="0.05inch" fo:padding-bottom="0.05inch" fo:padding-left="0.1inch" fo:padding-right="0.1inch" draw:shadow="hidden" style:run-through="foreground"/>
-        </style:style>
-        <style:style style:name="gr15" style:family="graphics">
-          <style:properties draw:stroke="none" draw:fill="none" draw:fill-color="#ffffff" draw:auto-grow-width="false" draw:auto-grow-height="false" fo:padding-top="0.05inch" fo:padding-bottom="0.05inch" fo:padding-left="0.1inch" fo:padding-right="0.1inch" draw:shadow="hidden" style:run-through="foreground"/>
-        </style:style>
-      </office:automatic-styles>
-      <office:body>
-        <text:sequence-decls>
-          <text:sequence-decl text:display-outline-level="0" text:name="Illustration"/>
-          <text:sequence-decl text:display-outline-level="0" text:name="Table"/>
-          <text:sequence-decl text:display-outline-level="0" text:name="Text"/>
-          <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>
-        </text:sequence-decls>
-        <text:p text:style-name="P1">
-          Capgemini
-        </text:p>
-        <text:p text:style-name="P2"/>
-        <text:p text:style-name="P2">
-          (version du 01/06/2004)
-        </text:p>
-        <text:p text:style-name="P3"/>
-        <text:h text:style-name="P4" text:level="1">
-          Il est rappelé que la proposition définitive fournie après l
-&apos;
-          audition fera office de CCTP pour le projet. Elle doit donc prendre en compte toutes les remarques, observations ou compléments échangés pendant la phase d
-&apos;
-          évaluation. Elle doit lever les éventuelles ambiguïtés sur le périmètre de la prestation : il est donc nécessaire de supprimer les mentions à des prestations optionnelles qui ne sont pas prévues dans le cadre du marché. Supprimer systématiquement les formes conditionnelles dans l
-&apos;
-          offre (pourrait, serait) lorsque les termes de la condition ne sont pas explicites. Préférer des formes au présent ou au futur. Un effort, devra notamment être fait sur le cadre de réponse
-        </text:h>
-        <text:h text:style-name="P4" text:level="1">
-          Les réponses aux questions écrites transmises en mai devront être annexées à la nouvelle proposition commerciale. Si des éléments sont contradictoires avec la nouvelle proposition commerciale il convient alors de le mentionner.
-        </text:h>
-        <text:p text:style-name="P3"/>
-        <text:p text:style-name="P3">
-          Les réponses aux questions posées lors de l’audition doivent apparaître clairement dans la nouvelle proposition commerciale.
-        </text:p>
-        <text:p text:style-name="P3"/>
-        <text:p text:style-name="P3"/>
-        <text:p text:style-name="P3"/>
-        <text:p text:style-name="P5"/>
-        <text:p text:style-name="P6">
-          <text:span text:style-name="T1">
-            1
-          </text:span>
-          <text:span text:style-name="T2">
-            ère
-          </text:span>
-          <text:span text:style-name="T1">
-            partie : présentation du candidat et de son organisation, reformulation du projet et compréhension du contexte (1 heure). Questions / réponses entre les membres de la commission et le candidat (30 min.).
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P7"/>
-        <text:p text:style-name="P7"/>
-        <text:ordered-list text:style-name="WW8Num35">
-          <text:list-item>
-            <text:p text:style-name="P8">
-              Démarrage anticipé : est-il prévu de commencer les développements sur des plateformes mises à disposition par le prestataire dans ses locaux.
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P3"/>
-        <text:p text:style-name="P9">
-          <text:span text:style-name="T3">
-            De T0 à T0+9 semaines, il est simplement demandé des postes de travail J2EE (windows, 1 Go de mémoire).
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P10">
-          Les travaux peuvent donc se réaliser dans les locaux de la DPMA dès le T0 sur ces postes de travail.
-        </text:p>
-        <text:p text:style-name="P3"/>
-        <text:p text:style-name="P3"/>
-        <text:ordered-list text:style-name="WW8Num35" text:continue-numbering="true">
-          <text:list-item>
-            <text:p text:style-name="P8">
-              Les candidats doivent préciser quelles seront les ressources humaines que les éditeurs mettront à la disposition de l
-&apos;
-              intégrateur pendant la réalisation du projet. Ces ressources doivent avoir une expérience d’au moins un projet de gestion de contenu et de portail. L
-&apos;
-              implication des éditeurs tout au long du projet sera un plus pour le Minefi.
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P3"/>
-        <text:p text:style-name="P10">
-          Codeva est intégré à hauteur de 80 jours durant la phase de développement des éléments génériques au titre du développement collaboratif.
-        </text:p>
-        <text:p text:style-name="P10">
-          Clément Hegger, chef de projet Codeva, assiste Capgemini tout au long du projet.
-        </text:p>
-        <text:p text:style-name="P3"/>
-        <text:p text:style-name="P9"/>
-        <text:ordered-list text:style-name="WW8Num35" text:continue-numbering="true">
-          <text:list-item>
-            <text:p text:style-name="P8">
-              Ressources allouées au projet : La réalisation du prototype a-t-elle permis de dégager de nouveaux éléments techniques ou fonctionnels qui pourraient être mis en commun entre les espaces : sites alize,
-              <text:a xlink:type="simple" xlink:href="http://www.minefi.gouv.fr/">
-                <text:span text:style-name="Internet link">
-                  www.minefi.gouv.fr
-                </text:span>
-              </text:a>
-              et leurs sous-sites?
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P3"/>
-        <text:p text:style-name="P10">
-          Les éléments techniques et fonctionnels transverses aux différents sites sont soit présents dans Jahia, soit déjà prévus dans les développements collaboratifs.
-        </text:p>
-        <text:p text:style-name="P3"/>
-        <text:ordered-list text:style-name="WW8Num35" text:continue-numbering="true">
-          <text:list-item>
-            <text:p text:style-name="P11">
-              Les prestataires devront préciser des URL de deux projets réalisés sur Internet si
-              <text:s/>
-              possible par eux et/ou avec les outils proposés. Ces projets doivent être le plus
-              <text:s/>
-              représentatifs possibles des attentes du Minefi notamment au travers de la personnalisation des portails.
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P3"/>
-        <table:table table:name="Table1" table:style-name="Table1">
-          <table:table-column table:style-name="Table1.A"/>
-          <table:table-column table:style-name="Table1.B"/>
-          <table:table-column table:style-name="Table1.C"/>
-          <table:table-column table:style-name="Table1.D"/>
-          <table:table-column table:style-name="Table1.E"/>
-          <table:table-column table:style-name="Table1.F"/>
-          <table:table-row>
-            <table:table-cell table:style-name="Table1.A1" table:value-type="string">
-              <text:p text:style-name="P12">
-                Adresse URL
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table1.A1" table:value-type="string">
-              <text:p text:style-name="P12">
-                Référence
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table1.A1" table:value-type="string">
-              <text:p text:style-name="P12">
-                Portail
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table1.A1" table:value-type="string">
-              <text:p text:style-name="P12">
-                Gestion de contenu
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table1.A1" table:value-type="string">
-              <text:p text:style-name="P12">
-                Personnalisation
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table1.F1" table:value-type="string">
-              <text:p text:style-name="P12">
-                Technologies
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table1.A2" table:value-type="string">
-              <text:p text:style-name="P3">
-                <text:a xlink:type="simple" xlink:href="http://Unil.ch/">
-                  <text:span text:style-name="Internet link">
-                    http://Unil.ch
-                  </text:span>
-                </text:a>
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table1.A2" table:value-type="string">
-              <text:p text:style-name="P3">
-                Codeva
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table1.A2" table:value-type="string">
-              <text:p text:style-name="P3">
-                O
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table1.A2" table:value-type="string">
-              <text:p text:style-name="P3">
-                O
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table1.A2" table:value-type="string">
-              <text:p text:style-name="P3">
-                MyUnil (constitution d’un bureau personnalisé).
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table1.F2" table:value-type="string">
-              <text:p text:style-name="P3">
-                Jahia
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table1.A2" table:value-type="string">
-              <text:p text:style-name="P3">
-                <text:a xlink:type="simple" xlink:href="http://www.edfentreprise.com/">
-                  <text:span text:style-name="Internet link">
-                    http://www.edfentreprise.com
-                  </text:span>
-                </text:a>
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table1.A2" table:value-type="string">
-              <text:p text:style-name="P3">
-                Capgemini
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table1.A2" table:value-type="string">
-              <text:p text:style-name="P3">
-                O
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table1.A2" table:value-type="string">
-              <text:p text:style-name="P3">
-                O
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table1.A2" table:value-type="string">
-              <text:p text:style-name="P3">
-                Espace client propre à son profil + données personnelles
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table1.F2" table:value-type="string">
-              <text:p text:style-name="P3">
-                BEA Portal /
-                <text:span text:style-name="T4">
-                  Documentum
-                </text:span>
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table1.A2" table:value-type="string">
-              <text:p text:style-name="P3">
-                <text:a xlink:type="simple" xlink:href="http://barcelona.com/">
-                  <text:span text:style-name="Internet link">
-                    http://barcelona.com
-                  </text:span>
-                </text:a>
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table1.A2" table:value-type="string">
-              <text:p text:style-name="P3">
-                Codeva
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table1.A2" table:value-type="string">
-              <text:p text:style-name="P3">
-                O
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table1.A2" table:value-type="string">
-              <text:p text:style-name="P3">
-                O
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table1.A2" table:value-type="string">
-              <text:p text:style-name="P3">
-                N
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table1.F2" table:value-type="string">
-              <text:p text:style-name="P3">
-                Jahia
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table1.A2" table:value-type="string">
-              <text:p text:style-name="P3">
-                <text:a xlink:type="simple" xlink:href="http://monagence.edf.fr/">
-                  <text:span text:style-name="Internet link">
-                    http://monagence.edf.fr
-                  </text:span>
-                </text:a>
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table1.A2" table:value-type="string">
-              <text:p text:style-name="P3">
-                Capgemini
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table1.A2" table:value-type="string">
-              <text:p text:style-name="P3">
-                O
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table1.A2" table:value-type="string">
-              <text:p text:style-name="P3">
-                O
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table1.A2" table:value-type="string">
-              <text:p text:style-name="P3">
-                O (données personnelles)
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table1.F2" table:value-type="string">
-              <text:p text:style-name="P3">
-                Weblogic
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table1.A2" table:value-type="string">
-              <text:p text:style-name="P3">
-                <text:a xlink:type="simple" xlink:href="http://www.culture.fr/">
-                  <text:span text:style-name="Internet link">
-                    http://www.culture.fr
-                  </text:span>
-                </text:a>
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table1.A2" table:value-type="string">
-              <text:p text:style-name="P3">
-                Capgemini
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table1.A2" table:value-type="string">
-              <text:p text:style-name="P3">
-                O
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table1.A2" table:value-type="string">
-              <text:p text:style-name="P3">
-                O
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table1.A2" table:value-type="string">
-              <text:p text:style-name="P3">
-                N
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table1.F2" table:value-type="string">
-              <text:p text:style-name="P3">
-                Zope/CPS
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-        </table:table>
-        <text:p text:style-name="P3"/>
-        <text:p text:style-name="P3"/>
-        <text:ordered-list text:style-name="WW8Num35" text:continue-numbering="true">
-          <text:list-item>
-            <text:p text:style-name="P8">
-              Définition fonctionnelle
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P13">
-          Dans la phase à dominante fonctionnelle (telle que le cadrage fonctionnel ou l’étude différentielle) est-il prévu de faire intervenir des personnes dont le profil est fonctionnel, c’est à dire des personnes qui ont l’habitude de gérer du contenu et de piloter des chantiers de portail, y compris dans leur dimension ergonomique et graphique ?
-        </text:p>
-        <text:p text:style-name="P13">
-          Ou les interventions prévues se limitent-elles à des profils de type « expert technique » (programmeur, analyste, …) ?
-        </text:p>
-        <text:p text:style-name="P13"/>
-        <text:p text:style-name="P9">
-          <text:span text:style-name="T3">
-            Le chef de projet pressenti, Sandrine Dalbègue, a travaillé sur différents portails :
-          </text:span>
-          <text:a xlink:type="simple" xlink:href="http://www.cci.fr/">
-            <text:span text:style-name="T5">
-              www.cci.fr
-            </text:span>
-          </text:a>
-          <text:span text:style-name="T3">
-            ,
-          </text:span>
-          <text:a xlink:type="simple" xlink:href="http://www.culture.fr/">
-            <text:span text:style-name="T5">
-              www.culture.fr
-            </text:span>
-          </text:a>
-          <text:span text:style-name="T3">
-            , ArchipelRH (portail RH d’EDF). Sandrine a également participé aux différentes évaluations techniques et fonctionnelles de Jahia.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P3"/>
-        <text:p text:style-name="P3"/>
-        <text:ordered-list text:style-name="WW8Num35" text:continue-numbering="true">
-          <text:list-item>
-            <text:p text:style-name="P11">
-              Définition fonctionnelle des modules développés en mode collaboratif
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P13">
-          Confirmer que les fonctionnalités développées en mode collaboratif seront étudiées de façon autonome par le prestataire sans que le Minefi soit sollicité pour établir les spécifications fonctionnelles et techniques. La DPMA souhaite uniquement être informée lors de l’avancement des travaux. Préciser les moyens d
-&apos;
-          études et les livrables intermédiaires prévus pour ces travaux.
-        </text:p>
-        <text:p text:style-name="P13">
-          Fournir des engagements clairs concernant le plan de développement du produit JAHIA indépendamment du projet du Ministère.
-        </text:p>
-        <text:p text:style-name="P9"/>
-        <text:p text:style-name="P9">
-          <text:span text:style-name="T3">
-            Sont financées actuellement les évolutions et devraient être disponibles cet été :
-          </text:span>
-        </text:p>
-        <text:unordered-list text:style-name="WW8Num4">
-          <text:list-item>
-            <text:p text:style-name="P14">
-              gestion des champs obligatoires,
-            </text:p>
-          </text:list-item>
-          <text:list-item>
-            <text:p text:style-name="P15">
-              Support JSR 168.
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P16"/>
-        <text:p text:style-name="P9">
-          <text:span text:style-name="T3">
-            Sont prévues (notamment en fonction du choix de la DPMA) :
-          </text:span>
-        </text:p>
-        <text:unordered-list text:style-name="WW8Num7">
-          <text:list-item>
-            <text:p text:style-name="P17">
-              Support des métadonnées Dublin Core standard,
-            </text:p>
-          </text:list-item>
-          <text:list-item>
-            <text:p text:style-name="P18">
-              <text:span text:style-name="T3">
-                Réplication multi-site,
-              </text:span>
-            </text:p>
-          </text:list-item>
-          <text:list-item>
-            <text:p text:style-name="P17">
-              Gestion d’un statut archivé,
-            </text:p>
-          </text:list-item>
-          <text:list-item>
-            <text:p text:style-name="P18">
-              <text:span text:style-name="T3">
-                Gestion multi LDAP.
-              </text:span>
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P19"/>
-        <text:p text:style-name="P10">
-          Est réalisé par un client de Jahia (date non fournie) :
-        </text:p>
-        <text:unordered-list text:style-name="WW8Num15">
-          <text:list-item>
-            <text:p text:style-name="P20">
-              Gestion de formulaires.
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P21"/>
-        <text:p text:style-name="P16"/>
-        <text:p text:style-name="P22"/>
-        <text:p text:style-name="P6">
-          <text:span text:style-name="T1">
-            2
-          </text:span>
-          <text:span text:style-name="T2">
-            ème
-          </text:span>
-          <text:span text:style-name="T1">
-            partie : présentation de l’offre technique et financière du candidat (1 heure 30). Questions / réponses entre les membres de la commission et le candidat (30 min.).
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P3"/>
-        <text:ordered-list text:style-name="WW8Num35" text:continue-numbering="true">
-          <text:list-item>
-            <text:p text:style-name="P8">
-              Les sociétés doivent s
-&apos;
-              engager dans la francisation des libellés, des messages, des commandes et la documentation de l
-&apos;
-              ensemble des outils nécessaires au fonctionnement et au paramétrage du système livré. Il est à noter que pour les utilisateurs (intra/internautes et gestionnaires de contenu déconcentrés) cette demande est indispensable ; pour les administrateurs (de contenu Alize/Sircom et système); cette demande est souhaitable, mais n
-&apos;
-              est probablement pas une contrainte.
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P9"/>
-        <text:p text:style-name="P10">
-          La documentation de la version 4 est en cours de francisation.
-        </text:p>
-        <text:p text:style-name="P10">
-          Le produit est déjà francisé.
-        </text:p>
-        <text:p text:style-name="P9">
-          <text:span text:style-name="T3">
-            Capgemini et Codeva s’engagent sur la francisation des libellés, des messages, des commandes, de Lucene et la documentation de l
-&apos;
-            ensemble des outils nécessaires au fonctionnement et au paramétrage du système livré.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P9"/>
-        <text:p text:style-name="P9"/>
-        <text:ordered-list text:style-name="WW8Num35" text:continue-numbering="true">
-          <text:list-item>
-            <text:p text:style-name="P8">
-              Moteur de recherche (performance
-&amp;
-              intégration)
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P23"/>
-        <text:p text:style-name="P23">
-          Les moteurs de recherche proposés ne semblent pas atteindre les performances demandées dans le PFD.
-        </text:p>
-        <text:p text:style-name="P23">
-          On rappelle que les performances des moteurs demandées au PFD doivent :
-        </text:p>
-        <text:unordered-list text:style-name="WW8Num39">
-          <text:list-item>
-            <text:p text:style-name="P24">
-              offrir de meilleures performances (dictionnaire, synonymie, lemmatisation avancée, correcteur orthographique..)
-            </text:p>
-          </text:list-item>
-          <text:list-item>
-            <text:p text:style-name="P24">
-              offrir une meilleure concaténation des résultats entre les recherches effectuées sur les différents sites portées sur la plateforme et les recherches effectuées sur les sites externes au système. Y-aura-t-il des mises en commun des éventuels dictionnaires mis en œuvre ?
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P23"/>
-        <text:p text:style-name="P23">
-          Le Minefi a réalisé un inventaire à partir d’information disponible sur internet pour déterminer les fonctionnalités des moteurs de recherche.
-        </text:p>
-        <text:p text:style-name="P23"/>
-        <text:p text:style-name="P25">
-          Syntaxe de recherche
-        </text:p>
-        <table:table table:name="Table2" table:style-name="Table2">
-          <table:table-column table:style-name="Table2.A"/>
-          <table:table-column table:style-name="Table2.B"/>
-          <table:table-column table:style-name="Table2.C"/>
-          <table:table-column table:style-name="Table2.B"/>
-          <table:table-column table:style-name="Table2.E"/>
-          <table:table-column table:style-name="Table2.F"/>
-          <table:table-column table:style-name="Table2.G"/>
-          <table:table-column table:style-name="Table2.H"/>
-          <table:table-row>
-            <table:table-cell table:style-name="Table2.A1" table:value-type="string">
-              <text:p text:style-name="P26"/>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table2.B1" table:value-type="string">
-              <text:p text:style-name="P26">
-                Recherche floue
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table2.B1" table:value-type="string">
-              <text:p text:style-name="P26">
-                Phonétisation
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table2.B1" table:value-type="string">
-              <text:p text:style-name="P26">
-                Masque de recherche
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table2.B1" table:value-type="string">
-              <text:p text:style-name="P26">
-                Troncature
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table2.B1" table:value-type="string">
-              <text:p text:style-name="P26">
-                Correction orthographique
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table2.B1" table:value-type="string">
-              <text:p text:style-name="P26">
-                Lémmatisation
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table2.H1" table:value-type="string">
-              <text:p text:style-name="P26">
-                Opérateurs booléens
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table2.A2" table:value-type="string">
-              <text:p text:style-name="P27">
-                Lucène : interne (Cap Gemini)
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table2.B2" table:value-type="string">
-              <text:p text:style-name="P28">
-                oui
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table2.B2" table:value-type="string">
-              <text:p text:style-name="P28">
-                oui
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table2.B2" table:value-type="string">
-              <text:p text:style-name="P28">
-                Oui (*1)
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table2.B2" table:value-type="string">
-              <text:p text:style-name="P28">
-                Oui
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table2.B2" table:value-type="string">
-              <text:p text:style-name="P28">
-                Oui (*2)
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table2.B2" table:value-type="string">
-              <text:p text:style-name="P28">
-                oui
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table2.H2" table:value-type="string">
-              <text:p text:style-name="P28">
-                oui
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table2.A2" table:value-type="string">
-              <text:p text:style-name="P27">
-                Nutch : externe (Cap Gemini)
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table2.B2" table:value-type="string">
-              <text:p text:style-name="P28">
-                oui
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table2.B2" table:value-type="string">
-              <text:p text:style-name="P28">
-                oui
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table2.B2" table:value-type="string">
-              <text:p text:style-name="P28">
-                Oui (*1)
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table2.B2" table:value-type="string">
-              <text:p text:style-name="P28">
-                Oui
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table2.B2" table:value-type="string">
-              <text:p text:style-name="P28">
-                Oui (*2)
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table2.B2" table:value-type="string">
-              <text:p text:style-name="P28">
-                oui
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table2.H2" table:value-type="string">
-              <text:p text:style-name="P28">
-                oui
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-        </table:table>
-        <text:p text:style-name="P29"/>
-        <text:p text:style-name="P29"/>
-        <text:p text:style-name="P30">
-          Personnalisation
-        </text:p>
-        <table:table table:name="Table3" table:style-name="Table3">
-          <table:table-column table:style-name="Table3.A"/>
-          <table:table-column table:style-name="Table3.B"/>
-          <table:table-column table:style-name="Table3.C"/>
-          <table:table-row>
-            <table:table-cell table:style-name="Table3.A1" table:value-type="string">
-              <text:p text:style-name="P28"/>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table3.B1" table:value-type="string">
-              <text:p text:style-name="P28">
-                Adjonction de thésaurus / dictionnaire
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table3.C1" table:value-type="string">
-              <text:p text:style-name="P28">
-                Recherche sur champs / corpus spécifiques
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table3.A2" table:value-type="string">
-              <text:p text:style-name="P27">
-                Lucène : interne (Cap Gemini)
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table3.A2" table:value-type="string">
-              <text:p text:style-name="P28">
-                Option (*3)
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table3.C2" table:value-type="string">
-              <text:p text:style-name="P28">
-                oui
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table3.A3" table:value-type="string">
-              <text:p text:style-name="P27">
-                Nutch : externe (Cap Gemini)
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table3.A3" table:value-type="string">
-              <text:p text:style-name="P28">
-                Même option (*3)
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table3.C3" table:value-type="string">
-              <text:p text:style-name="P28">
-                oui
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-        </table:table>
-        <text:p text:style-name="P29"/>
-        <text:p text:style-name="P29">
-          Pondération des résultats
-        </text:p>
-        <table:table table:name="Table4" table:style-name="Table4">
-          <table:table-column table:style-name="Table4.A"/>
-          <table:table-column table:style-name="Table4.B"/>
-          <table:table-column table:style-name="Table4.C"/>
-          <table:table-column table:style-name="Table4.D"/>
-          <table:table-row>
-            <table:table-cell table:style-name="Table4.A1" table:value-type="string">
-              <text:p text:style-name="P28"/>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table4.B1" table:value-type="string">
-              <text:p text:style-name="P28">
-                Adéquation requête / document
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table4.B1" table:value-type="string">
-              <text:p text:style-name="P28">
-                Surpondération (champ / terme)
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table4.D1" table:value-type="string">
-              <text:p text:style-name="P28">
-                Indice de popularité
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table4.A2" table:value-type="string">
-              <text:p text:style-name="P27">
-                Lucène : interne (Cap Gemini)
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table4.B2" table:value-type="string">
-              <text:p text:style-name="P28">
-                oui
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table4.B2" table:value-type="string">
-              <text:p text:style-name="P28">
-                oui
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table4.D2" table:value-type="string">
-              <text:p text:style-name="P28">
-                non
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table4.A3" table:value-type="string">
-              <text:p text:style-name="P27">
-                Nutch : externe (Cap Gemini)
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table4.B3" table:value-type="string">
-              <text:p text:style-name="P28">
-                oui
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table4.B3" table:value-type="string">
-              <text:p text:style-name="P28">
-                oui
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table4.D3" table:value-type="string">
-              <text:p text:style-name="P28">
-                non
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-        </table:table>
-        <text:p text:style-name="P31"/>
-        <text:p text:style-name="P29"/>
-        <text:p text:style-name="P29"/>
-        <text:p text:style-name="P29"/>
-        <text:p text:style-name="P29"/>
-        <text:p text:style-name="P29"/>
-        <text:p text:style-name="P32">
-          (*1) : Masque de recherche :
-        </text:p>
-        <text:p text:style-name="P32">
-          Lucene supporte les recherches par jokers : *, ? comme :
-        </text:p>
-        <text:p text:style-name="P33">
-          Test*, Te*t, Te ?t.
-        </text:p>
-        <text:p text:style-name="P33"/>
-        <text:p text:style-name="P33"/>
-        <text:p text:style-name="P32">
-          (*2) : Recherche orthographique.
-        </text:p>
-        <text:p text:style-name="P32">
-          Cette fonctionnalité permet lorsque l’utilisateur déclenche sa recherche de :
-        </text:p>
-        <text:ordered-list text:style-name="WW8Num12">
-          <text:list-item>
-            <text:p text:style-name="P34">
-              Déclencher le moteur de recherche avec la saisie de l’utilisateur
-            </text:p>
-          </text:list-item>
-          <text:list-item>
-            <text:p text:style-name="P34">
-              Présenter une correction orthographique de ce qui a été saisi pour permettre à l’utilisateur de re-lancer une recherche sur les termes corrigés.
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P32"/>
-        <text:p text:style-name="P32">
-          Ce scénario correspond exactement au mécanisme du moteur de recherche Google :
-        </text:p>
-        <text:p text:style-name="P32">
-          <draw:image draw:style-name="fr1" draw:name="Graphic1" text:anchor-type="as-char" svg:width="5.8846inch" svg:height="2.0283inch" draw:z-index="0" xlink:href="#Pictures/10000000000003F10000015BD2EF4745.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>
-        </text:p>
-        <text:p text:style-name="P32"/>
-        <text:p text:style-name="P35">
-          <text:span text:style-name="T3">
-            Capgemini propose de réaliser cette fonctionnalité au travers du composant Open Source JTextCheck (
-          </text:span>
-          <text:a xlink:type="simple" xlink:href="http://linux.org.mt/projects/jtextcheck/index.html">
-            <text:span text:style-name="T6">
-              http://linux.org.mt/projects/jtextcheck/index.html
-            </text:span>
-          </text:a>
-          <text:span text:style-name="T3">
-            ).
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P32"/>
-        <text:p text:style-name="P32"/>
-        <text:p text:style-name="P32"/>
-        <text:p text:style-name="P35">
-          Corriger ce tableau, en fonction de ce qui sera disponible dans Jahia et/ou développer dans le cadre de la prestation.
-        </text:p>
-        <text:p text:style-name="P3"/>
-        <text:ordered-list text:style-name="WW8Num35" text:continue-numbering="true">
-          <text:list-item>
-            <text:p text:style-name="P8">
-              L’outil prend-il en compte l’intégration et gestion d’un thésaurus
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:unordered-list text:style-name="WW8Num23">
-          <text:list-item>
-            <text:p text:style-name="P36">
-              gestion d’un thésaurus (création/modification/imports/exports),
-            </text:p>
-          </text:list-item>
-          <text:list-item>
-            <text:p text:style-name="P36">
-              d’utilisation du thésaurus lors de la recherche plein texte.
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P37">
-          Si la réponse est négative, il convient de le prévoir (cf. paragraphe 6.5.3 du PFD). Si cette fonctionnalité engendre un surcoût, celui-ci doit être intégré dans les options
-&quot;
-          moteur de recherche, offre optionnelle
-&quot;
-          (total 13 et total 14).
-        </text:p>
-        <text:p text:style-name="P3"/>
-        <text:p text:style-name="P32">
-          (*3) : Thésaurus.
-        </text:p>
-        <text:p text:style-name="P32">
-          Le thésaurus est un dictionnaire particulier réalisant des liens (de type spécialisation, généralisation) entre les mots.
-        </text:p>
-        <text:p text:style-name="P32"/>
-        <text:p text:style-name="P32">
-          Cet outil est une aide à l’élaboration des critères de recherches :
-        </text:p>
-        <text:unordered-list text:style-name="WW8Num8">
-          <text:list-item>
-            <text:p text:style-name="P38">
-              L’utilisateur saisi ses mots de recherche
-            </text:p>
-          </text:list-item>
-          <text:list-item>
-            <text:p text:style-name="P38">
-              Pour chaque mot,
-              <text:s/>
-              le thésaurus lui présente les mots liés qu’il ajoute ou réfute
-            </text:p>
-          </text:list-item>
-          <text:list-item>
-            <text:p text:style-name="P38">
-              Le moteur de recherche est alors lancé avec l’ensemble de ces critères.
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P32"/>
-        <text:p text:style-name="P32"/>
-        <text:p text:style-name="P32"/>
-        <text:p text:style-name="P32"/>
-        <text:p text:style-name="P32"/>
-        <text:p text:style-name="P32">
-          Capgemini propose de développer ce thésaurus qui permet :
-        </text:p>
-        <text:unordered-list text:style-name="WW8Num28">
-          <text:list-item>
-            <text:p text:style-name="P39">
-              <text:span text:style-name="T3">
-                L’import (resp. l’export) des mots du thésaurus depuis (resp. vers) un fichier texte conforme à la norme ISO 2788 et AFNOR NFZ-47100
-              </text:span>
-            </text:p>
-          </text:list-item>
-          <text:list-item>
-            <text:p text:style-name="P40">
-              Assister l’utilisateur dans la saisie de ses critères de recherche.
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P32"/>
-        <text:p text:style-name="P32">
-          L’alimentation du fichier est réalisée par la DPMA en fonction des concepts manipulés.
-        </text:p>
-        <text:p text:style-name="P3"/>
-        <text:p text:style-name="P3"/>
-        <text:ordered-list text:style-name="WW8Num35" text:continue-numbering="true">
-          <text:list-item>
-            <text:p text:style-name="P8">
-              Prise en compte des meta-données
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P37">
-          L’outil de gestion de contenu doit prendre en compte les meta-données tels que définis par le Minefi notamment au travers des formulaires de gestion des documents publiés. (cf.
-        </text:p>
-        <text:p text:style-name="P37">
-          En annexe le « Tableau de synthèse Méta-données
-          <text:span text:style-name="T7">
-             »
-          </text:span>
-            qui décrit les travaux en cours par le Minefi.
-        </text:p>
-        <text:p text:style-name="P37"/>
-        <text:p text:style-name="P41">
-          Date de révision : pris en compte dans la solution.
-        </text:p>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P41">
-          La date de fin de publication n’est pas une méta-données du document, puisque sa valeur peut être différentes en fonction de la rubrique où le document est publié.
-        </text:p>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P41">
-          Capgemini propose de développer un workflow gérant cette date de fin de publication.
-        </text:p>
-        <text:p text:style-name="P41">
-          Le responsable de la rubrique avant la validation de la publication détermine à quelle date la page doit disparaître.
-        </text:p>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P41">
-          Par contre, pour les documents saisis en mode edit/publish, la date de fin de publication ne peut être rattachée qu’au document. L’information est alors ‘dépubliée’ dans toutes les rubriques en même temps.
-        </text:p>
-        <text:p text:style-name="P3"/>
-        <text:p text:style-name="P3"/>
-        <text:ordered-list text:style-name="WW8Num35" text:continue-numbering="true">
-          <text:list-item>
-            <text:p text:style-name="P8">
-              Consolidation des résultats par le moteur de recherche
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P35">
-          Si un document est à la fois sur intranet, Internet et extranet, et si le moteur de recherche indexe ces trois espaces, est-ce qu’alors le document apparaît trois fois dans la liste des résultats lors d’une recherche sur ces trois espaces ?
-        </text:p>
-        <text:p text:style-name="P35">
-          Le comportement est-il identique si le document est publié dans plusieurs rubriques d
-&apos;
-          un même espace?
-        </text:p>
-        <text:p text:style-name="P9"/>
-        <text:p text:style-name="P32">
-          Il est important que le document apparaisse (même si c’est le même) à chaque endroit où il est publié. Qu’il s’agisse d’un document publié sur différents portails, ou d’un document publié plusieurs fois sur le même portail.
-        </text:p>
-        <text:p text:style-name="P32">
-          Lorsqu’un utilisateur réalise une recherche sur un site, il s’attend à retrouver les documents publiés sur le site.
-        </text:p>
-        <text:p text:style-name="P32"/>
-        <text:p text:style-name="P32">
-          Du point de vue ergonomique, si le portail propose une recherche multi-site, il est essentiel que l’utilisateur maîtrise la recherche qui est effectuée tout en gardant la simplicité d’utilisation.
-        </text:p>
-        <text:p text:style-name="P32">
-          Pour réaliser ce double objectif, la méthode la plus couramment utilisée est d’accompagner le champ de saisie d’un boite déroulante permettant à l’internaute de spécifier en plus des critères de recherche la cible :
-        </text:p>
-        <text:p text:style-name="P32"/>
-        <text:p text:style-name="P42">
-          <draw:image draw:style-name="fr1" draw:name="Graphic2" text:anchor-type="as-char" svg:width="6.8756inch" svg:height="0.9437inch" draw:z-index="1" xlink:href="#Pictures/10000000000003FE0000008DD4008671.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>
-        </text:p>
-        <text:p text:style-name="P32"/>
-        <text:p text:style-name="P35">
-          <text:span text:style-name="T3">
-            Le traitement de la recherche peut également être réalisée au travers une fonction de recherche avancée. La fonctionnalité de recherche avancée présente les différents critères de recherches et cibles de recherches.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P35">
-          <text:span text:style-name="T3">
-            Dans le cas de cette recherche avancée, il est possible de solliciter les différents moteurs de recherche et de re-trier les informations rendues pour fusionner les différents résultats. Cette mise en œuvre nécessite :
-          </text:span>
-        </text:p>
-        <text:unordered-list text:style-name="WW8Num49">
-          <text:list-item>
-            <text:p text:style-name="P43">
-              un coût d’intégration plus élevé,
-            </text:p>
-          </text:list-item>
-          <text:list-item>
-            <text:p text:style-name="P43">
-              une plus grande expertise des utilisateurs.
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P32"/>
-        <text:p text:style-name="P32">
-          A la demande de la DPMA, Capgemini peut intégrer ce module de recherche avancée.
-        </text:p>
-        <text:p text:style-name="P3"/>
-        <text:p text:style-name="P9"/>
-        <text:ordered-list text:style-name="WW8Num35" text:continue-numbering="true">
-          <text:list-item>
-            <text:p text:style-name="P8">
-              Poids des pages html gérées par les outils
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P35">
-          Les outils de portail introduisent-ils des éléments qui pourraient augmenter le poids des pages html ?
-        </text:p>
-        <text:p text:style-name="P35"/>
-        <text:p text:style-name="P35">
-          <text:span text:style-name="T3">
-            La notion de portlet commune à tous les portails induit implicitement des poids de page légèrement augmenté : il n’est plus possible d’optimiser la syntaxe HTML dans l’ensemble de la page.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P32">
-          Il n’est pas possible réellement d’estimer ce surcoût.
-        </text:p>
-        <text:p text:style-name="P35"/>
-        <text:p text:style-name="P3"/>
-        <text:ordered-list text:style-name="WW8Num35" text:continue-numbering="true">
-          <text:list-item>
-            <text:p text:style-name="P8">
-              Reprise des pages d
-&apos;
-              accueil Alizé et Minefi.gouv.fr.
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P35">
-          Le candidat est-il en mesure de s
-&apos;
-          engager à ce que les pages d
-&apos;
-          accueil Internet et intranet soient reprises dans les portails proposés avec un niveau de complexité (graphique et ergonomique) similaire à celui des pages actuelles. Notamment il est nécessaire que ces pages d
-&apos;
-          accueil puissent adresser une dizaine d
-&apos;
-          espaces et une cinquantaine de liens. A titre d
-&apos;
-          exemple, il faudra valider que le système fourni pourra supporter les chartes graphiques et ergonomiques des pages d
-&apos;
-          accueil des sites Internet (www.minefi.gouv.fr)
-          <text:s/>
-          et intranet (alize) actuelles ainsi que la proposition en cours de réalisation pour Alize.
-        </text:p>
-        <text:p text:style-name="P35">
-          A contrario, le candidat peut-il indiquer des limites (ou des contraintes) à prendre en compte lors de l
-&apos;
-          élaboration de la charte graphique et ergonomique. Une liste d
-&apos;
-          exemples de difficultés rencontrées sur d
-&apos;
-          autres projets est satisfaisante.
-        </text:p>
-        <text:p text:style-name="P35"/>
-        <text:p text:style-name="P32">
-          Capgemini préconise pour des aspects ergonomiques et techniques d’exclure les frames pour les documents gérés avec Jahia.
-        </text:p>
-        <text:p text:style-name="P44"/>
-        <text:p text:style-name="P32">
-          Pour le reste, la solution de Capgemini supporte les pages d’accueil Alizé et Minefi.gouv.fr.
-        </text:p>
-        <text:p text:style-name="P32"/>
-        <text:p text:style-name="P32"/>
-        <text:p text:style-name="P32"/>
-        <text:p text:style-name="P32"/>
-        <text:p text:style-name="P32"/>
-        <text:p text:style-name="P9"/>
-        <text:ordered-list text:style-name="WW8Num35" text:continue-numbering="true">
-          <text:list-item>
-            <text:p text:style-name="P8">
-              Accessibilité
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P37">
-          Il est nécessaire que le système permette à l
-&apos;
-          administration de respecter au plus près les 55 critères du label Bronze accessiweb (voir
-          <text:a xlink:type="simple" xlink:href="http://www.accessiweb.org/fr/Label_Accessibilite/criteres_accessiweb/55_accessiweb_bronze/">
-            <text:span text:style-name="Internet link">
-              http://www.accessiweb.org/fr/Label_Accessibilite/criteres_accessiweb/55_accessiweb_bronze/
-            </text:span>
-          </text:a>
-          ). Préciser quels sont les critères qui seront gérés par le système. A minima, il est souhaité que les champs d
-&apos;
-          information complémentaires (alt, title des liens…) soient saisis dans la gestion de contenu et correctement gérés par le système. Indiquer les solutions éventuelles pour gérer les attributs nécessaires à l
-&apos;
-          accessibilité des tableaux, des cadres, des formulaires.
-        </text:p>
-        <text:p text:style-name="P37"/>
-        <text:p text:style-name="P37">
-          Capgemini s’engage à respecter les 55 critères du label Bronze Accessiweb.
-        </text:p>
-        <text:p text:style-name="P37"/>
-        <text:p text:style-name="P37">
-          Le tableau ci-dessous regroupe les éléments automatisables pour ces critères, regroupés par catégories :
-        </text:p>
-        <text:p text:style-name="P37"/>
-        <text:p text:style-name="P45">
-          Eléments graphiques :
-        </text:p>
-        <table:table table:name="Table5" table:style-name="Table5">
-          <table:table-column table:style-name="Table5.A"/>
-          <table:table-column table:style-name="Table5.B"/>
-          <table:table-column table:style-name="Table5.C"/>
-          <table:table-column table:style-name="Table5.D"/>
-          <table:table-row>
-            <table:table-cell table:style-name="Table5.A1" table:value-type="string">
-              <text:p text:style-name="P46">
-                Critères
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table5.A1" table:value-type="string">
-              <text:p text:style-name="P46">
-                Niveau
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table5.A1" table:value-type="string">
-              <text:p text:style-name="P46">
-                Description
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table5.D1" table:value-type="string">
-              <text:p text:style-name="P46">
-                Solution
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table5.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                1.1
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table5.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Bronze
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table5.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Chaque élément graphique figurant dans une page web doit posséder une alternative textuelle.
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table5.D2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Pour les éléments graphiques devant être ajouter ou modifier sur une page, nous ajouterons un champ obligatoire permettant de saisir l’alternative.
-              </text:p>
-              <text:p text:style-name="P46">
-                Pour les éléments graphiques ajoutés dans le « mini word », nous ajouterons automatiquement des alternatives vides, que l’utilisateur pourra renseigner par la suite en éditant le contenu html
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table5.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                1.4
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table5.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Bronze
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table5.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Pour chacun des éléments graphiques contenus dans la page, le texte de l’alternative doit faire un maximum de 60 caractères.
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table5.D2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Avec le mécanisme décrit pour le critère 1.1, nous ajouterons une vérification de la longueur du texte. Si le texte est trop long, le contributeur en sera averti.
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-        </table:table>
-        <text:p text:style-name="P37"/>
-        <text:p text:style-name="P45">
-          Cadres :
-        </text:p>
-        <table:table table:name="Table6" table:style-name="Table6">
-          <table:table-column table:style-name="Table6.A"/>
-          <table:table-column table:style-name="Table6.B"/>
-          <table:table-column table:style-name="Table6.C"/>
-          <table:table-column table:style-name="Table6.D"/>
-          <table:table-row>
-            <table:table-cell table:style-name="Table6.A1" table:value-type="string">
-              <text:p text:style-name="P46">
-                Critères
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table6.A1" table:value-type="string">
-              <text:p text:style-name="P46">
-                Niveau
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table6.A1" table:value-type="string">
-              <text:p text:style-name="P46">
-                Description
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table6.D1" table:value-type="string">
-              <text:p text:style-name="P46">
-                Solution
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table6.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                2.1
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table6.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Bronze
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table6.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Chaque cadre composant une page web doit être nommé.
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table6.D2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Les cadres sont créés au sein des fichiers jsp. La page contenant les cadres possédera un ensemble de champ (nom, alternative, titre) correspondant à chacun des cadres, ainsi qu’un champ de description définissant l’interaction entre les cadres, permettant ainsi la modification par un contributeur.
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table6.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                2.3
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table6.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Bronze
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table6.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Une alternative doit être proposée lorsqu’une page web est construite avec des cadres.
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table6.D2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Même réponse que le point 2.1 pour l’alternative.
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table6.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                2.5
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table6.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Bronze
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table6.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                En plus de posséder un nom explicite, chaque cadre doit être décrite de manière plus précise.
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table6.D2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Même réponse que le point 2.1 pour le titre.
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table6.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                2.9
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table6.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Bronze
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table6.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Il doit y avoir un maximum de trois cadres dans la page.
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table6.D2" table:value-type="string">
-              <text:p text:style-name="P46">
-                La construction des cadres est défini au sein des templates jsp, et dépend de la charte graphique du site.
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table6.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                2.10
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table6.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Bronze
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table6.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Lorsqu’il y a des cadres, le défilement (« scrolling » en
-                <text:s/>
-                anglais) doit être automatique.
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table6.D2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Cette propriété sera mise sur chaque cadre au sein des templates jsp.
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-        </table:table>
-        <text:p text:style-name="P37"/>
-        <text:p text:style-name="P45">
-          Liens :
-        </text:p>
-        <table:table table:name="Table7" table:style-name="Table7">
-          <table:table-column table:style-name="Table7.A"/>
-          <table:table-column table:style-name="Table7.B"/>
-          <table:table-column table:style-name="Table7.C"/>
-          <table:table-column table:style-name="Table7.D"/>
-          <table:table-row>
-            <table:table-cell table:style-name="Table7.A1" table:value-type="string">
-              <text:p text:style-name="P46">
-                Critères
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table7.A1" table:value-type="string">
-              <text:p text:style-name="P46">
-                Niveau
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table7.A1" table:value-type="string">
-              <text:p text:style-name="P46">
-                Description
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table7.D1" table:value-type="string">
-              <text:p text:style-name="P46">
-                Solution
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table7.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                6.1
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table7.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Bronze
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table7.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                L’intitulé des liens doit faire un maximum de 80 caractères.
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table7.D2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Nous ajouterons une vérification de la longueur des intitulés des liens dans les écrans de saisies de nouveaux liens, ainsi que dans le « mini Word ».
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table7.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                6.3
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table7.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Bronze
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table7.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Lorsque c’est nécessaire, un lien doit être commenté et ce commentaire doit comporter un maximum de 80 caractères.
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table7.D2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Ce point concerne les liens de téléchargement de fichiers. Par conséquent, nous ajouterons un champ de saisie obligatoire permettant de décrire le fichier.
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table7.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                6.5
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table7.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Bronze
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table7.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Chaque intitulé de lien identique doit amener vers une seule et même destination.
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table7.D2" table:value-type="string">
-              <text:p text:style-name="P46">
-                ??????????
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-        </table:table>
-        <text:p text:style-name="P37"/>
-        <text:p text:style-name="P45">
-          Eléments obligatoires :
-        </text:p>
-        <table:table table:name="Table8" table:style-name="Table8">
-          <table:table-column table:style-name="Table8.A"/>
-          <table:table-column table:style-name="Table8.B"/>
-          <table:table-column table:style-name="Table8.C"/>
-          <table:table-column table:style-name="Table8.D"/>
-          <table:table-row>
-            <table:table-cell table:style-name="Table8.A1" table:value-type="string">
-              <text:p text:style-name="P46">
-                Critères
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table8.A1" table:value-type="string">
-              <text:p text:style-name="P46">
-                Niveau
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table8.A1" table:value-type="string">
-              <text:p text:style-name="P46">
-                Description
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table8.D1" table:value-type="string">
-              <text:p text:style-name="P46">
-                Solution
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table8.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                8.1
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table8.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Bronze
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table8.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Le type du document électronique consulté dans un navigateur doit être spécifié.
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table8.D2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Le type du document html étant défini par la balise DOCTYPE, nous ajouterons dans les templates cette balise afin de respecter ce critère.
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table8.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                8.2
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table8.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Bronze
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table8.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                La langue utilisée dans un document électronique doit être clairement identifiée.
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table8.D2" table:value-type="string">
-              <text:p text:style-name="P46">
-                La langue utilisée dans les pages doit être mise, au sein du template, sur l’attribut « lang » de la balise
-&lt;
-                html
-&gt;
-                . Nous ajouterons cet attribut au sein des templates et en correspondance avec la langue en cours de visualisation.
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table8.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                8.4
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table8.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Bronze
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table8.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Le titre d’une page web doit être clairement identifié.
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table8.D2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Le titre de la page sera présent dans l’ensemble des templates grâce à la balise
-&lt;
-                TITLE
-&gt;
-                . Le titre de la page peut être renseigné par le contributeur à partir des attributs de la page.
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table8.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                8.6
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table8.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Bronze
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table8.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Le titre d’une page web doit être unique
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table8.D2" table:value-type="string">
-              <text:p text:style-name="P46">
-                ????????????
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-        </table:table>
-        <text:p text:style-name="P37"/>
-        <text:p text:style-name="P45">
-          Présentation de l’information :
-        </text:p>
-        <table:table table:name="Table9" table:style-name="Table9">
-          <table:table-column table:style-name="Table9.A"/>
-          <table:table-column table:style-name="Table9.B"/>
-          <table:table-column table:style-name="Table9.C"/>
-          <table:table-column table:style-name="Table9.D"/>
-          <table:table-row>
-            <table:table-cell table:style-name="Table9.A1" table:value-type="string">
-              <text:p text:style-name="P46">
-                Critères
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table9.A1" table:value-type="string">
-              <text:p text:style-name="P46">
-                Niveau
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table9.A1" table:value-type="string">
-              <text:p text:style-name="P46">
-                Description
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table9.D1" table:value-type="string">
-              <text:p text:style-name="P46">
-                Solution
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table9.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                10.1
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table9.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Bronze
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table9.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Le contenu d’une page web doit être séparé de sa présentation spécifique.
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table9.D2" table:value-type="string">
-              <text:p text:style-name="P46">
-                La mise en forme des pages (polices, couleurs, alignement,…) est externalisé dans des feuilles de style CSS.
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-        </table:table>
-        <text:p text:style-name="P37"/>
-        <text:p text:style-name="P45">
-          Contenus accessibles :
-        </text:p>
-        <table:table table:name="Table10" table:style-name="Table10">
-          <table:table-column table:style-name="Table10.A"/>
-          <table:table-column table:style-name="Table10.B"/>
-          <table:table-column table:style-name="Table10.C"/>
-          <table:table-column table:style-name="Table10.D"/>
-          <table:table-row>
-            <table:table-cell table:style-name="Table10.A1" table:value-type="string">
-              <text:p text:style-name="P46">
-                Critères
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table10.A1" table:value-type="string">
-              <text:p text:style-name="P46">
-                Niveau
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table10.A1" table:value-type="string">
-              <text:p text:style-name="P46">
-                Description
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table10.D1" table:value-type="string">
-              <text:p text:style-name="P46">
-                Solution
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table10.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                13.2
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table10.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Bronze
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table10.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Si une redirection automatique est présente, elle ne doit pas s’effectuer par l’intermédiaire d’un script.
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table10.D2" table:value-type="string">
-              <text:p text:style-name="P46">
-                L’ensemble des redirections automatiques sera réalisé sur le serveur.
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table10.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                13.4
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table10.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Bronze
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table10.A2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Une alternative équivalente au script qui déclenche l’ouverture de nouvelles fenêtres doit être prévue.
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table10.D2" table:value-type="string">
-              <text:p text:style-name="P46">
-                Au sein des templates, nous ajouterons des liens permettant d’accéder à la nouvelle fenêtre.
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-        </table:table>
-        <text:p text:style-name="P37"/>
-        <text:p text:style-name="P37"/>
-        <text:p text:style-name="P9"/>
-        <text:ordered-list text:style-name="WW8Num35" text:continue-numbering="true">
-          <text:list-item>
-            <text:p text:style-name="P8">
-              Cohérence des référentiels
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P13">
-          Est-il prévu des traitements permettant de garantir la cohérence des référentiels de données entre le portail et la gestion de contenu ?
-        </text:p>
-        <text:p text:style-name="P13"/>
-        <text:p text:style-name="P13">
-          <text:span text:style-name="T3">
-            Les référentiels Portail et gestion de contenu sont communs dans Jahia. Il n’est pas nécessaire de prévoir des mécanismes d’intégrations particuliers.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P13"/>
-        <text:p text:style-name="P9"/>
-        <text:p text:style-name="P9"/>
-        <text:ordered-list text:style-name="WW8Num35" text:continue-numbering="true">
-          <text:list-item>
-            <text:p text:style-name="P8">
-              Republication partielle ou totale de contenu par rapport à un ou deux sites :
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P13">
-          L’administrateur des sites (webmestres) disposera-t-il de commandes lui permettant de lancer des synchros partielles ou totales de sites ? Ces commandes seront-elles déclenchées à partir d’un navigateur ?
-        </text:p>
-        <text:p text:style-name="P13">
-          Existera-il des commandes du type :
-        </text:p>
-        <text:p text:style-name="P13">
-          -
-          <text:tab-stop/>
-          relancer la synchro totale de tous les documents publiés sur l’Internet ?
-        </text:p>
-        <text:p text:style-name="P35">
-          -
-          <text:tab-stop/>
-          lancer une synchro partielle limitée aux seuls documents modifiés depuis 24 heures ?
-        </text:p>
-        <text:unordered-list text:style-name="WW8Num24">
-          <text:list-item>
-            <text:p text:style-name="P47">
-              synchroniser de manière immédiate les rubriques de la page d’accueil en priorité par rapport aux autres traitements de synchronisation actuellement en cours ou programmés ?
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P3"/>
-        <text:p text:style-name="P48"/>
-        <text:p text:style-name="P9">
-          <text:span text:style-name="T3">
-            Capgemini et Codeva proposent :
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P13">
-          <text:span text:style-name="T3">
-            Un développement collaboratif permettant la réplication des éléments saisis depuis l’environnement Intranet (Back-Office) vers le site Internet.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P49">
-          La réplication porte sur :
-        </text:p>
-        <text:unordered-list text:style-name="WW8Num34">
-          <text:list-item>
-            <text:p text:style-name="P50">
-              <text:span text:style-name="T3">
-                Un ‘site virtuel’ (sous-site) : contenu, conteneurs d’un site, groupes jahia.
-              </text:span>
-            </text:p>
-          </text:list-item>
-          <text:list-item>
-            <text:p text:style-name="P51">
-              L’arbre des catégories.
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P19"/>
-        <text:p text:style-name="P49">
-          Pour que la réplication fonctionne, tous les sites comprennent l’ensemble des templates Jahia.
-        </text:p>
-        <text:p text:style-name="P49"/>
-        <text:p text:style-name="P49">
-          Cette fonctionnalité de réplication offre des fonctionnalités de :
-        </text:p>
-        <text:unordered-list text:style-name="WW8Num11">
-          <text:list-item>
-            <text:p text:style-name="P52">
-              Réplication totale – initialisation ou ré-initialisation totale,
-            </text:p>
-          </text:list-item>
-          <text:list-item>
-            <text:p text:style-name="P53">
-              <text:span text:style-name="T3">
-                Réplication incrémentale – mise à jour par delta. A chaque export, les données validées depuis le dernier export sont mises en paquet. Le paquet est numéroté (numéro de version v) et envoyé vers le serveur cible. Le serveur cible reçoit ce paquet et vérifie qu’il a bien déjà importé le paquet v-1. Ce mécanisme permet de garantir les mises à jours incrémentales ont bien été réalisées dans le bon ordre.
-              </text:span>
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P19"/>
-        <text:p text:style-name="P49">
-          Cette fonction de réplication peut être déclenchée, par site virtuel :
-        </text:p>
-        <text:unordered-list text:style-name="WW8Num16">
-          <text:list-item>
-            <text:p text:style-name="P54">
-              de façon automatique,
-            </text:p>
-          </text:list-item>
-          <text:list-item>
-            <text:p text:style-name="P55">
-              <text:span text:style-name="T3">
-                manuellement via une interface Web pour l’utilisateur ‘root’,
-              </text:span>
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:unordered-list text:style-name="WW8Num17">
-          <text:list-item>
-            <text:p text:style-name="P56">
-              <text:span text:style-name="T3">
-                Si certaines données (actualités de la page d’accueil) par exemple, doivent être mises à jour de façon régulières, il est possible  de déclencher manuellement la réplication du site virtuel ‘Internet’, ce qui permet de mettre en ligne tous les documents qui font parti du lot validé et notamment ceux qui doivent être publié en urgence.
-              </text:span>
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P57"/>
-        <text:p text:style-name="P57"/>
-        <text:p text:style-name="P57"/>
-        <text:ordered-list text:style-name="WW8Num35" text:continue-numbering="true">
-          <text:list-item>
-            <text:p text:style-name="P8">
-              Aspect architecture : en cours d’élaboration
-              <text:span text:style-name="T8">
-                (nouvelle rubrique)
-              </text:span>
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P35"/>
-        <text:p text:style-name="P58">
-          1°) Intranet AdER
-        </text:p>
-        <text:p text:style-name="P59">
-          Au vu des éléments techniques montrés techniques dans les prototypes, le MINEFI propose l
-&apos;
-          architecture suivante :
-        </text:p>
-        <text:unordered-list text:style-name="WW8Num35">
-          <text:list-item>
-            <text:unordered-list>
-              <text:list-item>
-                <text:p text:style-name="P60">
-                  la gestion de contenu de l
-&apos;
-                  intranet AdER pourra être un site cloisonné logiquement sur la gestion de contenu Intranet.
-                </text:p>
-              </text:list-item>
-              <text:list-item>
-                <text:p text:style-name="P60">
-                  le portail de publication de l
-&apos;
-                  intranet AdER pourra être un site cloisonné logiquement sur la gestion de contenu Intranet.
-                </text:p>
-              </text:list-item>
-            </text:unordered-list>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P61">
-          Il n
-&apos;
-          est donc plus nécessaire d
-&apos;
-          isoler des éléments matériels ou logiciels sur le réseau AdER
-        </text:p>
-        <text:p text:style-name="P61"/>
-        <text:p text:style-name="P62">
-          Pris en compte.
-        </text:p>
-        <text:p text:style-name="P35"/>
-        <text:p text:style-name="P35">
-          2°) optimisation du nombre de serveurs
-        </text:p>
-        <text:p text:style-name="P63">
-          a) Le candidat proposera une optimisation de son architecture actuelle en fonction du nouvel élément lié
-          <text:span text:style-name="T9">
-            à AdER.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P63">
-          <text:span text:style-name="T10">
-            (nouveau)
-          </text:span>
-          <text:span text:style-name="T11">
-            Le Minefi prendra à sa charge l
-&apos;
-            acquisition des boîtiers alteon ou autres systèmes de répartition de charge préconisés par le candidat. Le candidat mettra en oeuvre ces outils.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P63"/>
-        <text:p text:style-name="P63">
-          <text:span text:style-name="T3">
-            Pris en compte.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P64">
-          Plusieurs optimisations ont été réalisées :
-        </text:p>
-        <text:unordered-list text:style-name="WW8Num5">
-          <text:list-item>
-            <text:unordered-list>
-              <text:list-item>
-                <text:p text:style-name="P65">
-                  La fusion ADER/Intranet.
-                </text:p>
-              </text:list-item>
-              <text:list-item>
-                <text:p text:style-name="P66">
-                  <text:span text:style-name="T3">
-                    Une étude des coûts détaillés nous a permis d’optimiser le coût de la plate-forme Internet. Les 2 quadri-processeurs sont remplacés de avantageusement par 5 bi-processeurs.
-                  </text:span>
-                </text:p>
-              </text:list-item>
-            </text:unordered-list>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P64"/>
-        <text:p text:style-name="P64">
-          Au démarrage du projet, la DPMA indiquera à Capgemini si la solution retenue est un altéon ou un serveur sous LVS.
-        </text:p>
-        <text:p text:style-name="P63">
-          <text:line-break/>
-          b) De plus, le candidat proposera
-          <text:span text:style-name="T9"></text:span>
-          une architecture alternative basée sur des clusters et des SAN.
-        </text:p>
-        <text:p text:style-name="P63">
-          Le stockage intranet et le stockage Internet sera mutualisé sur des SAN (les SAN en ISCSI sont conseillés).
-        </text:p>
-        <text:p text:style-name="P63"/>
-        <text:p text:style-name="P64">
-          Pris en compte.
-        </text:p>
-        <text:p text:style-name="P63"/>
-        <text:p text:style-name="P35">
-          <text:line-break/>
-          Il devra s
-&apos;
-          engager à implémenter ses solutions sur les serveurs en cluster et l
-&apos;
-          archivage en SAN.
-        </text:p>
-        <text:p text:style-name="P35"/>
-        <text:p text:style-name="P64">
-          Pris en compte.
-        </text:p>
-        <text:p text:style-name="P35"/>
-        <text:p text:style-name="P35">
-          <text:line-break/>
-          Si une des deux solutions induit un surcoût celui-ci devra être proposé en variante.
-          <text:line-break/>
-          Le Minefi choisira au moment du lancement du projet l
-&apos;
-          architecture définitive parmi ces deux solutions.
-        </text:p>
-        <text:p text:style-name="P35"/>
-        <text:p text:style-name="P35">
-          <text:span text:style-name="T3">
-            Il n’y a pas de différence de coût, pour la mise en œuvre des sites, entre les 2 solutions.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P9"/>
-        <text:ordered-list text:style-name="WW8Num35" text:continue-numbering="true">
-          <text:list-item>
-            <text:p text:style-name="P67">
-              Outils de partage de charge : Fournir et mettre en œuvre les outils de partage de charge (en cours d’élaboration)
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P3"/>
-        <text:p text:style-name="P3"/>
-        <text:ordered-list text:style-name="WW8Num35" text:continue-numbering="true">
-          <text:list-item>
-            <text:p text:style-name="P8">
-              Sécurité des accès et des données et respect des flux déterminés par le Minefi
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P35">
-          Les sociétés doivent s’engager de manière explicite dans le CCTP à ce que:
-        </text:p>
-        <text:unordered-list text:style-name="WW8Num35">
-          <text:list-item>
-            <text:unordered-list>
-              <text:list-item>
-                <text:p text:style-name="P68">
-                  aucune donnée de type intranet (contenu, index, login, …) ne soit disponible sur l’internet (sauf si publication volontaire)
-                </text:p>
-              </text:list-item>
-              <text:list-item>
-                <text:p text:style-name="P68">
-                  les solutions techniques fonctionnent sans nécessiter de flux d’internet vers intranet. Dans le sens internet vers intranet les réseaux intranet et internet doivent être considérés comme physiquement séparés.
-                </text:p>
-              </text:list-item>
-            </text:unordered-list>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P35">
-          Les sociétés doivent s’engager à ce que leur solution respecte les flux admis par le Minefi entre l’Intranet et l’Internet (cf PFD paragraphe 10).
-        </text:p>
-        <text:p text:style-name="P35">
-          Si une de ces conditions n
-&apos;
-          était pas respectée, les candidats s’engagent à trouver une solution de contournement.
-        </text:p>
-        <text:p text:style-name="P35"/>
-        <text:ordered-list text:style-name="WW8Num41">
-          <text:list-item>
-            <text:p text:style-name="P69">
-              Oui : aucune donnée de type intranet (contenu, index, login, …) ne soit disponible sur l’Internet (sauf si publication volontaire)
-            </text:p>
-          </text:list-item>
-          <text:list-item>
-            <text:p text:style-name="P70">
-              <text:span text:style-name="T3">
-                Les solutions techniques fonctionnent sans nécessiter de flux d’Internet vers intranet. Dans le sens Internet vers intranet les réseaux intranet et Internet doivent être considérés comme physiquement séparés.
-              </text:span>
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P35"/>
-        <text:p text:style-name="P35"/>
-        <text:ordered-list text:style-name="WW8Num35" text:continue-numbering="true">
-          <text:list-item>
-            <text:p text:style-name="P8">
-              Contrôle d’intégrité des données :
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P35">
-          Le Minefi rappelle qu’il souhaite un contrôle de l’intégrité des données. La solution mise en œuvre doit au moins être du
-          <text:s/>
-          niveau de TripWire. Il convient d’intégrer cette demande dans la réponse.
-        </text:p>
-        <text:p text:style-name="P35"/>
-        <text:p text:style-name="P32">
-          Le logiciel TripWire permet le contrôle
-          <text:s/>
-          d’intégrité des fichiers stockés sur les disques d’un serveur.
-        </text:p>
-        <text:p text:style-name="P35">
-          <text:span text:style-name="T3">
-            Capgemini propose l’intégration de la version Open source de Tripwire (
-          </text:span>
-          <text:a xlink:type="simple" xlink:href="http://www.tripwire.org/">
-            <text:span text:style-name="T6">
-              http://www.tripwire.org/
-            </text:span>
-          </text:a>
-          <text:span text:style-name="T3">
-            ). L’intégration de TripWire permet de vérifier que le système de fichier n’est pas modifié.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P32"/>
-        <text:p text:style-name="P35">
-          <text:span text:style-name="T3">
-            Les contenus publiés par Jahia ne sont pas stockés dans un système de fichier mais dans la base de données PostGres. Tripwire ne permet pas de vérifier l’intégrité de la base de données.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P32"/>
-        <text:p text:style-name="P35">
-          <text:span text:style-name="T3">
-            De plus, la solution proposée par Capgemini positionne le serveur Apache derrière le pare-feu. Il s’agirait donc pour un ‘hacker’ de pénétrer le pare-feu puis d’accéder au serveur Apache, puis d’accéder au serveur d’application, puis d’accéder au serveur PostGres. Chaque accès (Serveur linux supportant Apache, Serveur linux supportant PostGres, Serveur Postgres) possède ses propres mécanismes d’authentification et de sécurité :
-          </text:span>
-        </text:p>
-        <text:unordered-list text:style-name="WW8Num2">
-          <text:list-item>
-            <text:unordered-list>
-              <text:list-item>
-                <text:p text:style-name="P71">
-                  <text:span text:style-name="T3">
-                    L’accès au serveur Linux supportant Apache est fortement restreint : durcissement du système d’exploitation.
-                  </text:span>
-                </text:p>
-              </text:list-item>
-              <text:list-item>
-                <text:p text:style-name="P71">
-                  <text:span text:style-name="T3">
-                    L’accès au serveur Linux supportant le serveur d’application est restreint : durcissement du système d’exploitation , TcpWrapper (préconisé) n’autorisant les communications qu’avec le serveur Apache et le serveur de base de données.
-                  </text:span>
-                </text:p>
-              </text:list-item>
-              <text:list-item>
-                <text:p text:style-name="P72">
-                  L’accès au serveur Linux supportant le serveur Postgres est restreint : durcissement du système d’exploitation, TcpWrapper (préconisé) n’autorisant les communications qu’avec le serveur d’application.
-                </text:p>
-              </text:list-item>
-              <text:list-item>
-                <text:p text:style-name="P71">
-                  <text:span text:style-name="T3">
-                    L’accès au serveur Postgres est réalisé au travers d’un login/mot de passe crypté lors de l’échange.
-                  </text:span>
-                </text:p>
-              </text:list-item>
-            </text:unordered-list>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P32"/>
-        <text:p text:style-name="P35">
-          <text:span text:style-name="T3">
-            Enfin, si ces niveaux de sécurité ne sont pas suffisants, il est également possible d’ajouter un pare-feu supplémentaire entre le serveur Apache et le serveur d’application. Des solutions basées sur Linux permettent la mise en œuvre peu coûteuse de pare-feux.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P32"/>
-        <text:p text:style-name="P32">
-          Capgemini propose de réaliser un dossier sécurité durant la phase de conception.
-        </text:p>
-        <text:p text:style-name="P32"/>
-        <text:p text:style-name="P3"/>
-        <text:p text:style-name="P3"/>
-        <text:p text:style-name="P3"/>
-        <text:ordered-list text:style-name="WW8Num35" text:continue-numbering="true">
-          <text:list-item>
-            <text:p text:style-name="P8">
-              Instance Jahia sur Internet :
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P35">
-          Préciser si les outils d’administration des portails Jahia seront désactivés sur l’instance sur internet. Dans le cas contraire préciser les mécanismes qui permettent d’éviter les accès non désirés aux outils d’administration.
-        </text:p>
-        <text:p text:style-name="P35"/>
-        <text:p text:style-name="P35">
-          <text:span text:style-name="T3">
-            L’instance Jahia sur Internet ne possède pas les différentes engines
-          </text:span>
-          <text:span text:style-name="T12">
-            <text:footnote text:id="ftn1">
-              <text:footnote-citation>
-                1
-              </text:footnote-citation>
-              <text:footnote-body>
-                <text:p text:style-name="Footnote">
-                  <text:s/>
-                  Fonction de type assistant pour Jahia.
-                </text:p>
-              </text:footnote-body>
-            </text:footnote>
-          </text:span>
-          <text:span text:style-name="T3">
-            d’administration et de contribution. Si un utilisateur malveillant réussit à faire appel à ces fonctions, il obtiendra une erreur Java.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P35"/>
-        <text:p text:style-name="P35">
-          <text:span text:style-name="T3">
-            De plus, Capgemini propose d’intégrer une étude sécurité permettant de lister tous les points mis en place (serveurs, réseaux, application) permettant de relever les enjeux de sécurité de la DPMA.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P3"/>
-        <text:ordered-list text:style-name="WW8Num35" text:continue-numbering="true">
-          <text:list-item>
-            <text:p text:style-name="P8">
-              Utilisation du protocole WebDAV
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P35">
-          Entre le client et Jahia : l’utilisation de WebDav est-elle obligatoire pour publier les documents. Si deux publieurs sont responsables d’une rubrique : l’un des deux peut-il utiliser webDav et l’autre pas ?
-        </text:p>
-        <text:p text:style-name="P35"/>
-        <text:p text:style-name="P32">
-          L’utilisation de WebDav n’est pas obligatoire.
-        </text:p>
-        <text:p text:style-name="P32">
-          L’utilisation combinée pour une même rubrique est tout à fait possible.
-        </text:p>
-        <text:p text:style-name="P35"/>
-        <text:p text:style-name="P13">
-          Entre les instances java intranet et internet : le protocole WebDav passe-t-il les firewall de la DPMA (pare-feux filtre de paquets et pare-feux applicatif) situés entre la zone intranet et la zone internet. Il est rappelé que pendant la réalisation des prototypes ce protocole n’était pas ouvert. Décrire les conditions qui permettront d’ouvrir ce protocole au travers des firewall (ouverture d’un port particulier, reconnaissance d’ordre http, …) ?
-        </text:p>
-        <text:p text:style-name="P13">
-          Si cela nécessite l
-&apos;
-          ajout d
-&apos;
-          un composant sur les pare-feux, la fourniture est à la charge du prestataire.
-        </text:p>
-        <text:p text:style-name="P13"/>
-        <text:p text:style-name="P13">
-          <text:span text:style-name="T3">
-            A priori, le protocole WebDav est construit pour passer les pare-feux.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P13"/>
-        <text:p text:style-name="P73">
-          Les équipes de DPMA/2C estime que webdav pourrait passer en https pour qu
-&apos;
-          il n
-&apos;
-          y ait pas analyse de protocole. Le HTTPS chiffre les données, avantage donc en termes de sécurité (les données confidentielles à publier ne passent pas en clair). L’inconvénient majeur pourrait alors porter sur le niveau des performances.
-        </text:p>
-        <text:p text:style-name="P13"/>
-        <text:p text:style-name="P13">
-          <text:span text:style-name="T3">
-            Le flux WebDav peut être encrypté. Il n’y a pas impact sur les performances au sens fonctionnel du terme, la phase de synchronisation entre le back office intranet et le front office Internet se découpe en 4 phases :
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P49">
-          1/ Export des documents du back-office
-        </text:p>
-        <text:p text:style-name="P49">
-          2/ Transport des informations vers le front office
-        </text:p>
-        <text:p text:style-name="P49">
-          3/ Import des documents dans le front office.
-        </text:p>
-        <text:p text:style-name="P49"/>
-        <text:p text:style-name="P13">
-          <text:span text:style-name="T3">
-            Le front office est uniquement perturbé à la phase 3. Cette phase doit être limitée dans le temps :
-          </text:span>
-        </text:p>
-        <text:unordered-list text:style-name="WW8Num35">
-          <text:list-item>
-            <text:unordered-list>
-              <text:list-item>
-                <text:p text:style-name="P74">
-                  mise en place de la réplication incrémentale,
-                </text:p>
-              </text:list-item>
-              <text:list-item>
-                <text:p text:style-name="P74">
-                  garantie de performance : 20000 pages par heure.
-                </text:p>
-              </text:list-item>
-            </text:unordered-list>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P19"/>
-        <text:p text:style-name="P13">
-          <text:span text:style-name="T3">
-            Le surcoût du transport n’a donc pas d’incidence sur l’objectif de performance qui porte sur les phases 3.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P49"/>
-        <text:p text:style-name="P3"/>
-        <text:ordered-list text:style-name="WW8Num35" text:continue-numbering="true">
-          <text:list-item>
-            <text:p text:style-name="P8">
-              Gestion de contenu multisite (spécifications)
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P13">
-          Préciser le degré d‘engagement pour transformer Jahia en outil de gestion de contenu multi-sites.
-        </text:p>
-        <text:p text:style-name="P13">
-          Préciser les spécifications générales et l
-&apos;
-          architecture fonctionnelle du module de gestion de contenu dans sa version multisites.
-        </text:p>
-        <text:p text:style-name="P13"/>
-        <text:h text:style-name="P75" text:level="3">
-          Introduction
-        </text:h>
-        <text:p text:style-name="P49">
-          Le module de gestion de contenu de Jahia permet, dès aujourd’hui, la mise en œuvre de 2 types de contribution :
-        </text:p>
-        <text:ordered-list text:style-name="WW8Num6">
-          <text:list-item>
-            <text:p text:style-name="P76">
-              « Edit/Publish » : dans se mode, le contributeur produit un document Web et le publie selon plusieurs axes (catégories). Le portail transforme ces catégories sous formes de rubriques.
-            </text:p>
-          </text:list-item>
-          <text:list-item>
-            <text:p text:style-name="P77">
-              <text:span text:style-name="T3">
-                <text:s/>
-                « Edit in place » : dans ce mode le contributeur se positionne au sein du portail là où le document doit être affiché pour le saisir (ou le récupérer dans le cas ou le document est déjà publié).
-              </text:span>
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P19"/>
-        <text:h text:style-name="P75" text:level="3">
-          Le mode ‘Edit/Publish’
-        </text:h>
-        <text:p text:style-name="P78">
-          La contribution est réalisée dans des templates Jahia dédiés. Chaque document est associé à :
-        </text:p>
-        <text:unordered-list text:style-name="WW8Num31">
-          <text:list-item>
-            <text:p text:style-name="P79">
-              1 fonction ‘back office’ réalisée par :
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:unordered-list text:style-name="WW8Num10">
-          <text:list-item>
-            <text:unordered-list>
-              <text:list-item>
-                <text:p text:style-name="P80">
-                  1 page permettant de lister ou de rechercher 1 document de ce type depuis le site de contribution.
-                </text:p>
-              </text:list-item>
-              <text:list-item>
-                <text:p text:style-name="P80">
-                  1 page de saisie permettant la consultation, la saisie et la modification.
-                </text:p>
-              </text:list-item>
-              <text:list-item>
-                <text:p text:style-name="P80">
-                  1 à n catégories : l’arbre des catégories de Jahia.
-                </text:p>
-              </text:list-item>
-            </text:unordered-list>
-          </text:list-item>
-        </text:unordered-list>
-        <text:unordered-list text:style-name="WW8Num37">
-          <text:list-item>
-            <text:p text:style-name="P81">
-              1 fonction ‘front office’ réalisée par :
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:unordered-list text:style-name="WW8Num22">
-          <text:list-item>
-            <text:unordered-list>
-              <text:list-item>
-                <text:p text:style-name="P82">
-                  La page de consultation précédente.
-                </text:p>
-              </text:list-item>
-              <text:list-item>
-                <text:p text:style-name="P82">
-                  1 page dédiée à la navigation au sein du portail (liste ou recherche).
-                </text:p>
-              </text:list-item>
-            </text:unordered-list>
-          </text:list-item>
-        </text:unordered-list>
-        <text:unordered-list text:style-name="WW8Num19">
-          <text:list-item>
-            <text:p text:style-name="P83">
-              Le site contient des rubriques construites sur l’extraction de documents rattachés à des catégories.
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:unordered-list text:style-name="WW8Num21">
-          <text:list-item>
-            <text:p text:style-name="P84">
-              Pour un document, la validation est globale à toutes les catégories auxquelles il est rattaché.
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P46"/>
-        <text:p text:style-name="P78">
-          Le prototype ‘Concours’ présente ce modèle de contribution :
-        </text:p>
-        <text:unordered-list text:style-name="WW8Num21">
-          <text:list-item>
-            <text:p text:style-name="P84">
-              Une page permettant la recherche multi critères des concours en liste.
-            </text:p>
-          </text:list-item>
-          <text:list-item>
-            <text:p text:style-name="P84">
-              Une page permettant la saisie du document concours.
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P46"/>
-        <text:p text:style-name="P46"/>
-        <text:p text:style-name="P85">
-          Publication multi-site :
-        </text:p>
-        <text:p text:style-name="P86">
-          <text:span text:style-name="T3">
-            Dans ce mode, l’arbre des catégories est découpé en branches portant les catégories de chaque site (Alizé, Internet). Chaque portail présente les documents validés et attribués aux documents catégorie de son site.
-          </text:span>
-        </text:p>
-        <text:h text:style-name="P75" text:level="3">
-          Le mode ‘Edit in place’
-        </text:h>
-        <text:p text:style-name="P78">
-          La contribution est réalisée directement à l’endroit où le document est publié.
-        </text:p>
-        <text:p text:style-name="P78"/>
-        <text:unordered-list text:style-name="WW8Num3">
-          <text:list-item>
-            <text:p text:style-name="P87">
-              Les fonctions ‘back office’ et ‘front office’ sont indifférenciées :
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:unordered-list text:style-name="WW8Num33">
-          <text:list-item>
-            <text:unordered-list>
-              <text:list-item>
-                <text:p text:style-name="P88">
-                  1 page permet la consultation, la modification et la création d’un nouveau document.
-                </text:p>
-              </text:list-item>
-              <text:list-item>
-                <text:p text:style-name="P88">
-                  au sein du portail.
-                </text:p>
-              </text:list-item>
-            </text:unordered-list>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P46"/>
-        <text:p text:style-name="P46"/>
-        <text:p text:style-name="P89">
-          <draw:image draw:style-name="fr2" draw:name="Graphic3" text:anchor-type="char" svg:x="0inch" svg:y="0inch" svg:width="3.7811inch" svg:height="3.1752inch" draw:z-index="83" xlink:href="#Pictures/10000000000001C10000017926D58783.jpg" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>
-        </text:p>
-        <text:p text:style-name="P90"/>
-        <text:p text:style-name="P89">
-          <draw:image draw:style-name="fr2" draw:name="Graphic4" text:anchor-type="char" svg:x="0inch" svg:y="0inch" svg:width="3.7799inch" svg:height="3.1472inch" draw:z-index="82" xlink:href="#Pictures/10000000000003D100000363AEEE6838.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>
-        </text:p>
-        <text:p text:style-name="P91">
-          NB : Cela ne signifie pas que les modifications sont réalisées sur le site en ligne (Internet par exemple) mais bien sur une instance en ‘back office’.
-        </text:p>
-        <text:p text:style-name="P91"/>
-        <text:p text:style-name="P92">
-          Publication multi-site :
-        </text:p>
-        <text:p text:style-name="P37">
-          <text:span text:style-name="T3">
-            Dans le cadre du mode de contribution
-            <text:s/>
-            ‘edit in place’. La contribution multi-site est une simple extension du fonctionnement actuel qui permet à un même document d’être publié dans plusieurs rubriques.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P41"/>
-        <text:unordered-list text:style-name="WW8Num1">
-          <text:list-item>
-            <text:p text:style-name="P93">
-              Dans le mode edit in place – l’activité est centrée sur le portail :
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:unordered-list text:style-name="WW8Num48">
-          <text:list-item>
-            <text:unordered-list>
-              <text:list-item>
-                <text:p text:style-name="P94">
-                  Un document a été créé dans une page du portail Intranet (par exemple). Un workflow propre à la page a alors été déclenché.
-                </text:p>
-              </text:list-item>
-              <text:list-item>
-                <text:p text:style-name="P94">
-                  Un contributeur ‘Internet’ décide de publier ce document.
-                </text:p>
-              </text:list-item>
-            </text:unordered-list>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P46"/>
-        <text:p text:style-name="P41">
-          Il se positionne sur le portail Internet, choisit l’option d’inclure un contenu externe.
-        </text:p>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P95">
-          <draw:ellipse text:anchor-type="paragraph" draw:z-index="85" draw:style-name="gr1" draw:text-style-name="P96" svg:width="1.3756inch" svg:height="0.2508inch" svg:x="3.8752inch" svg:y="2.1417inch">
-            <draw:glue-point draw:id="5" svg:x="1.9673inch" svg:y="0inch"/>
-            <draw:glue-point draw:id="6" svg:x="0.574inch" svg:y="0.5669inch"/>
-            <draw:glue-point draw:id="7" svg:x="0inch" svg:y="1.963inch"/>
-            <draw:glue-point draw:id="8" svg:x="0.574inch" svg:y="3.3587inch"/>
-            <draw:glue-point draw:id="9" svg:x="1.9673inch" svg:y="3.937inch"/>
-            <draw:glue-point draw:id="10" svg:x="3.3606inch" svg:y="3.3587inch"/>
-            <draw:glue-point draw:id="11" svg:x="3.937inch" svg:y="1.963inch"/>
-            <draw:glue-point draw:id="12" svg:x="3.3606inch" svg:y="0.5669inch"/>
-          </draw:ellipse>
-          <draw:image draw:style-name="fr2" draw:name="Graphic5" text:anchor-type="char" svg:x="0inch" svg:y="0inch" svg:width="5.1965inch" svg:height="4.861inch" draw:z-index="81" xlink:href="#Pictures/1000020000000303000002D1B6583370.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>
-        </text:p>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P97">
-          Un assistant permet de recherche le contenu à inclure. Cet assistant permet plusieurs modes de recherche :
-        </text:p>
-        <text:p text:style-name="P37">
-          <text:span text:style-name="T3">
-            Par catégorie, Auteur, par date
-            <text:s text:c="39"/>
-            En suivant le plan des sites
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P95">
-          <draw:image draw:style-name="fr4" draw:name="Graphic6" text:anchor-type="paragraph" svg:x="0inch" svg:y="0.05inch" svg:width="3.3752inch" svg:height="3.2701inch" draw:z-index="87" xlink:href="#Pictures/100002000000028800000274E70B6F3E.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>
-          <draw:image draw:style-name="fr4" draw:name="Graphic7" text:anchor-type="paragraph" svg:x="3.5inch" svg:y="0.05inch" svg:width="3.3752inch" svg:height="3.2709inch" draw:z-index="86" xlink:href="#Pictures/100002000000028800000274FFACC85F.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>
-        </text:p>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P46"/>
-        <text:p text:style-name="P41">
-          Par recherche, résultat
-        </text:p>
-        <text:p text:style-name="P95">
-          <draw:image draw:style-name="fr4" draw:name="Graphic8" text:anchor-type="paragraph" svg:x="3.5inch" svg:y="0.0925inch" svg:width="3.3752inch" svg:height="3.2709inch" draw:z-index="89" xlink:href="#Pictures/100002000000028800000274680246E3.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>
-          <draw:image draw:style-name="fr4" draw:name="Graphic9" text:anchor-type="paragraph" svg:x="0inch" svg:y="0.0717inch" svg:width="3.3752inch" svg:height="3.2709inch" draw:z-index="88" xlink:href="#Pictures/1000020000000288000002749811B8F6.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>
-        </text:p>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P46"/>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P46"/>
-        <text:p text:style-name="P86"/>
-        <text:p text:style-name="P49"/>
-        <text:p text:style-name="P13"/>
-        <text:p text:style-name="P13"/>
-        <text:p text:style-name="P13"/>
-        <text:p text:style-name="P49"/>
-        <text:p text:style-name="P13">
-          <text:span text:style-name="T3">
-            Par ‘recopie’ d’une URL du site.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P49"/>
-        <text:p text:style-name="P49"/>
-        <text:p text:style-name="P49"/>
-        <text:p text:style-name="P49"/>
-        <text:p text:style-name="P49"/>
-        <text:p text:style-name="P49"/>
-        <text:h text:style-name="P75" text:level="3">
-          Synthèse
-        </text:h>
-        <text:p text:style-name="P86"/>
-        <text:p text:style-name="P78">
-          La solution de Capgemini intègre ces 2 modes :
-        </text:p>
-        <text:ordered-list text:style-name="WW8Num47">
-          <text:list-item>
-            <text:ordered-list>
-              <text:list-item>
-                <text:p text:style-name="P98">
-                  Le mode ‘edit/publish’ doit être utilisé pour les documents publiés sous forme de catalogue ou de listes qui sont généralement saisis par des contributeurs dédiés à ce type de document de type documentaliste.
-                </text:p>
-              </text:list-item>
-            </text:ordered-list>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P99">
-          C’est ainsi le cas pour les documents agenda, actualités, ressources documentaires, courrier du ministère, la liste des services en ligne, concours, les catalogues de l’action sociale, fiches de poste.
-        </text:p>
-        <text:ordered-list text:style-name="WW8Num29">
-          <text:list-item>
-            <text:ordered-list>
-              <text:list-item>
-                <text:p text:style-name="P100">
-                  Le mode ‘edit in place’ doit être utilisé pour les documents de type communication et pour des contributeurs qui gèrent une information riche, avec une vision transverse du portail de type webmestre et responsable éditorial.
-                </text:p>
-              </text:list-item>
-            </text:ordered-list>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P46"/>
-        <text:p text:style-name="P78">
-          Au sein du ‘back office’ on retrouve donc :
-        </text:p>
-        <text:unordered-list text:style-name="WW8Num26">
-          <text:list-item>
-            <text:unordered-list>
-              <text:list-item>
-                <text:p text:style-name="P101">
-                  Le portail tel qu’il sera publié pour permettre la mise à jour du site ‘edit in place’.
-                </text:p>
-              </text:list-item>
-              <text:list-item>
-                <text:p text:style-name="P101">
-                  Un menu particulier donnant l’accès à la production des documents ‘edit/publish’
-                </text:p>
-              </text:list-item>
-              <text:list-item>
-                <text:p text:style-name="P101">
-                  Le tout intégré du point de vue de la gestion des droits.
-                </text:p>
-              </text:list-item>
-            </text:unordered-list>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P19"/>
-        <text:p text:style-name="P13"/>
-        <text:p text:style-name="P13">
-          Préciser notamment la granularité des objets gérés par le système : une page peut-elle afficher plusieurs documents publiés séparément dans différentes rubriques (indépendance des documents par rapport à leurs instances de publication au sein des pages)
-        </text:p>
-        <text:p text:style-name="P13"/>
-        <text:p text:style-name="P13">
-          <text:span text:style-name="T3">
-            Oui :
-          </text:span>
-        </text:p>
-        <text:unordered-list text:style-name="WW8Num20">
-          <text:list-item>
-            <text:p text:style-name="P102">
-              <text:span text:style-name="T3">
-                Dans le mode ‘Edit/Publish’,
-                <text:s/>
-                c’est le portail qui décide (de façon programmée) quelles catégories de documents positionner dans ses pages.
-              </text:span>
-            </text:p>
-          </text:list-item>
-          <text:list-item>
-            <text:p text:style-name="P102">
-              <text:span text:style-name="T3">
-                Dans le mode ‘Edit in place’, l’utilisateur reste totalement libre de positionner tout contenu provenant de tout site sur sa page.
-              </text:span>
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P13"/>
-        <text:p text:style-name="P13">
-          Un document pourra-t-il être rédigé et validé sans être publié ?
-        </text:p>
-        <text:p text:style-name="P13"/>
-        <text:p text:style-name="P49">
-          Oui :
-        </text:p>
-        <text:p text:style-name="P103">
-          En fonction de ce que représentent du point de vue organisationnel les termes ‘rédigé’ et ‘validé’.
-        </text:p>
-        <text:p text:style-name="P103"/>
-        <text:p text:style-name="P103">
-          Par défaut, Jahia gère 3 états :
-        </text:p>
-        <text:ordered-list text:style-name="WW8Num29" text:continue-numbering="true">
-          <text:list-item>
-            <text:ordered-list text:continue-numbering="true">
-              <text:list-item>
-                <text:ordered-list text:continue-numbering="true">
-                  <text:list-item>
-                    <text:p text:style-name="P104">
-                      En cours.
-                    </text:p>
-                  </text:list-item>
-                  <text:list-item>
-                    <text:p text:style-name="P104">
-                      Terminé.
-                    </text:p>
-                  </text:list-item>
-                  <text:list-item>
-                    <text:p text:style-name="P104">
-                      Publié.
-                    </text:p>
-                  </text:list-item>
-                </text:ordered-list>
-              </text:list-item>
-            </text:ordered-list>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P19"/>
-        <text:p text:style-name="P105">
-          <text:span text:style-name="T3">
-            Si l’état ‘terminé’ signifie : rédigé et validé par le contributeur. Il reste effectivement stocké dans Jahia sans qu’il ne soit publié.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P103"/>
-        <text:p text:style-name="P103"/>
-        <text:p text:style-name="P103"/>
-        <text:p text:style-name="P103">
-          Si par contre, la DPMA souhaite pour certains types de documents une validation par un tiers du document avant sa publication, Capgemini propose la mise en place d’un workflow à 4 états :
-        </text:p>
-        <text:ordered-list text:style-name="WW8Num50">
-          <text:list-item>
-            <text:p text:style-name="P106">
-              En cours
-            </text:p>
-          </text:list-item>
-          <text:list-item>
-            <text:p text:style-name="P106">
-              Rédigé
-            </text:p>
-          </text:list-item>
-          <text:list-item>
-            <text:p text:style-name="P106">
-              Validé rédaction
-            </text:p>
-          </text:list-item>
-          <text:list-item>
-            <text:p text:style-name="P106">
-              Publié.
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P105">
-          <text:span text:style-name="T3">
-            La proposition de Capgemini intègre la mise en œuvre de 3 workflows.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P103"/>
-        <text:p text:style-name="P13"/>
-        <text:p text:style-name="P13">
-          Pourra-t-on avoir un document contenu à la fois dans l’outil Jahia et publié sur aucun site ?
-        </text:p>
-        <text:p text:style-name="P49">
-          Oui.
-        </text:p>
-        <text:p text:style-name="P13">
-          En complément de la question précédente.
-        </text:p>
-        <text:p text:style-name="P13">
-          Un document peut être dans le référentiel documentaire et pas encore publié.
-        </text:p>
-        <text:p text:style-name="P13"/>
-        <text:p text:style-name="P13">
-          <text:span text:style-name="T3">
-            Il peut également rester dans le référentiel et ne plus être publié : cette possibilité est simplement réalisée en utilisant la gestion des droits. Si l’on souhaite qu’un document dé-publié
-            <text:s/>
-            reste dans le référentiel documentaire, il faut simplement changer les droits d’accès au document. Un document publié sur un site est ouvert en lecture au profil ‘guest’. Dé-publié ce document revient à attribuer un profil de type contributeur pour qu’il ne soit plus accessible sur le site.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P13"/>
-        <text:p text:style-name="P13">
-          Préciser si tous les aspects d’une gestion de contenu multi-sites seront pris en compte dans les développements à venir :
-        </text:p>
-        <text:unordered-list text:style-name="WW8Num36">
-          <text:list-item>
-            <text:p text:style-name="P107">
-              contraintes liées aux documents,
-            </text:p>
-          </text:list-item>
-          <text:list-item>
-            <text:p text:style-name="P107">
-              contraintes sur le workflow (ex : un document est publié selon une règle de validation sur l’intranet et doit l
-&apos;
-              être selon une autre règle de validation sur l’internet)
-            </text:p>
-          </text:list-item>
-          <text:list-item>
-            <text:p text:style-name="P107">
-              contrainte sur le moteur de recherche
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P13"/>
-        <text:p text:style-name="P13">
-          Hypothèse : un document est créé à partir d’un site Internet Jahia (portail Internet) puis il est publié sur un site intranet. Que ce passe-t-il si le document est dé-publié du portail Internet.
-        </text:p>
-        <text:p text:style-name="P13"/>
-        <text:p text:style-name="P13">
-          <text:span text:style-name="T13">
-            Ce que l’on veut pour de mode « edit in place » :
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P108"/>
-        <text:p text:style-name="P13">
-          <text:span text:style-name="T3">
-            Scénario 1 : on souhaite qu’un document partagé ait le même cycle de vie entre l’Internet et l’intranet.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P105">
-          <text:span text:style-name="T3">
-            Il s’agit de rubriques partagées entre l’intranet et l’Internet (même si ces rubriques sont positionnées différemment sur chaque site).
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P103">
-          L’équipe éditoriale est la même : les rubriques sont les mêmes.
-        </text:p>
-        <text:p text:style-name="P105">
-          <text:span text:style-name="T3">
-            Le document est géré dans un espace mixte entre l’Internet et l’intranet.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P105">
-          <text:span text:style-name="T3">
-            Il est validé, et dé-publié de façon partagée entre les 2 sites.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P103"/>
-        <text:p text:style-name="P49">
-          Scénario 2 : on souhaite qu’un document partagé ait des cycles de vies différentes entre L’Internet et l’intranet.
-        </text:p>
-        <text:p text:style-name="P103">
-          Il s’agit de rubriques différentes.
-        </text:p>
-        <text:p text:style-name="P105">
-          <text:span text:style-name="T3">
-            L’équipe éditoriale de la rubrique intranet (resp. Internet) produit le document. Au travers d’un comité éditorial transverse ce document est identifié comme devant également être également publié sur Internet (resp. intranet).
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P105">
-          <text:span text:style-name="T3">
-            Chaque rubrique possède son propre cycle de contribution, de validation, de péremption.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P103"/>
-        <text:p text:style-name="P35">
-          Repréciser clairement l’impact de l’utilisation des dossiers privés à un site et l’impact de l’utilisation des dossiers publics ? N’y a-t-il pas un risque que le choix d’un dossier privé implique des contraintes (voir des impossibilités) de publication vers d’autres portails ?
-        </text:p>
-        <text:p text:style-name="P13"/>
-        <text:p text:style-name="P13">
-          <text:span text:style-name="T3">
-            Les dossiers privés ne sont utilisés, normalement, que lors de son élaboration collaborative. Lorsqu’un contributeur veut publier un document privé, un message d’avertissement le prévient de cette incohérence potentielle. Si le contributeur le publie néanmoins, il peut :
-          </text:span>
-        </text:p>
-        <text:unordered-list text:style-name="WW8Num30">
-          <text:list-item>
-            <text:unordered-list>
-              <text:list-item>
-                <text:p text:style-name="P109">
-                  soit modifier les droits pour qu’il soit accessible de tous,
-                </text:p>
-              </text:list-item>
-              <text:list-item>
-                <text:p text:style-name="P109">
-                  conserver ses droits. Il est alors visible de tous mais ne peut être récupéré que par les utilisateurs autorisés.
-                </text:p>
-              </text:list-item>
-            </text:unordered-list>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P110"/>
-        <text:ordered-list text:style-name="WW8Num35" text:continue-numbering="true">
-          <text:list-item>
-            <text:p text:style-name="P8">
-              Ergonomie
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P13">
-          L
-&apos;
-          ergonomie actuelle de Jahia
-&quot;
-          edit in place
-&quot;
-          nécessite que le contributeur se positionne  dans un endroit d’un portail puis crée un document. Préciser si l’ergonomie suivante sera réalisée : création d’un document dans la gestion de contenu indépendamment de toute publication, puis publication vers un ou plusieurs portails.
-        </text:p>
-        <text:p text:style-name="P13"/>
-        <text:p text:style-name="P13">
-          <text:span text:style-name="T10">
-            (nouveau)
-          </text:span>
-          <text:span text:style-name="T11">
-            Préciser si dans le
-          </text:span>
-          mode
-&quot;
-          edit in place
-&quot;
-          , il sera possible de publier à partir du site où l
-&apos;
-          on se trouve dans d’autres sites (intranet ou internet), sans avoir à se positionner sur chacun des sites cibles. Autrement dit le mode
-&quot;
-          edit in place
-&quot;
-          prend-il en compte la gestion en multi-sites attendue.
-        </text:p>
-        <text:p text:style-name="P19"/>
-        <text:h text:style-name="P75" text:level="3">
-          Multi-site appliqué
-        </text:h>
-        <text:p text:style-name="P49">
-          Le mode « edit in place » permet la publication multi-site telle qu’attendue par la DPMA.
-        </text:p>
-        <text:p text:style-name="P49"/>
-        <text:p text:style-name="P49">
-          Dans un premier temps il faut distinguer :
-        </text:p>
-        <text:unordered-list text:style-name="WW8Num32">
-          <text:list-item>
-            <text:unordered-list>
-              <text:list-item>
-                <text:p text:style-name="P111">
-                  <text:span text:style-name="T3">
-                    les informations « chaudes » - informations mises à jours régulièrement (jour, semaine) – des articles par exemple.
-                  </text:span>
-                </text:p>
-              </text:list-item>
-              <text:list-item>
-                <text:p text:style-name="P111">
-                  <text:span text:style-name="T3">
-                    des informations « froide » - informations mises à jours rarement (mois) – des dossiers par exemple.
-                  </text:span>
-                </text:p>
-              </text:list-item>
-            </text:unordered-list>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P19"/>
-        <text:p text:style-name="P13">
-          <text:span text:style-name="T3">
-            Les informations « chaudes » sont en général nombreuses et doivent être renseignées rapidement. Elles sont fortement candidates au mode « edit/publish » : des contributeurs sont dévolus à ces tâches répétitives. L’interface de contribution devient alors un outil de saisie basé sur des formulaires. L’alimentation du portail devient automatique. Les étapes de validation et de publication sont raccourcies au maximum.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P49"/>
-        <text:p text:style-name="P13">
-          <text:span text:style-name="T3">
-            Les informations «  froides » sont en général
-            <text:s/>
-            plus complexes (plus riches), leur disposition dans le portail est moins prédictible, les étapes de construction, validation plus complexes. Ces informations doivent utiliser le mode « edit in place ».
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P49"/>
-        <text:p text:style-name="P49"/>
-        <text:p text:style-name="P49"/>
-        <text:p text:style-name="P112"/>
-        <text:p text:style-name="P49"/>
-        <text:p text:style-name="P13">
-          <text:span text:style-name="T3">
-            Il s’agit pour l’organisation éditoriale des informations froides d’accompagner l’organisation du site. De façon traditionnelle on retrouve 2 types de partages d’information entre l’intranet et l’Internet :
-          </text:span>
-        </text:p>
-        <text:ordered-list text:style-name="WW8Num14">
-          <text:list-item>
-            <text:p text:style-name="P113">
-              <text:span text:style-name="T3">
-                Partage de rubriques – un ensemble d’informations proposé sur un site se retrouve à l’identique sur un autre site. Il convient à chaque site de positionner cette rubrique au bon niveau dans sa propre arborescence.
-              </text:span>
-            </text:p>
-          </text:list-item>
-          <text:list-item>
-            <text:p text:style-name="P113">
-              <text:span text:style-name="T3">
-                Partages de contenus (dossiers) – une information particulière est partagée.
-              </text:span>
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P13"/>
-        <text:h text:style-name="P114" text:level="4">
-          Partage de rubriques
-        </text:h>
-        <text:p text:style-name="P41">
-          Dans cette configuration, une équipe éditoriale anime la rubrique, qu’elle soit publiée sur l’intranet ou l’Internet.
-        </text:p>
-        <text:p text:style-name="P37">
-          <text:span text:style-name="T3">
-            Cette rubrique est alors simplement réalisée en mode « edit in place » dans un espace mixte (site virtuel mixte) qui est publié à la fois sur l’intranet et l’Internet.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P41">
-          La validation et la publication sont alors communes à chaque site, les contributeurs/valideurs travaillent de façon unique au sein du site mixte.
-        </text:p>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P41">
-          Chaque portail (intranet, Internet) :
-        </text:p>
-        <text:unordered-list text:style-name="WW8Num46">
-          <text:list-item>
-            <text:unordered-list>
-              <text:list-item>
-                <text:p text:style-name="P115">
-                  intègre les rubriques mixtes au sein de son arborescence.
-                </text:p>
-              </text:list-item>
-              <text:list-item>
-                <text:p text:style-name="P115">
-                  intègre ses gabarits (templates Jahia) permettant d’appliquer sa charte graphique au contenu des rubriques partagées.
-                </text:p>
-              </text:list-item>
-            </text:unordered-list>
-          </text:list-item>
-        </text:unordered-list>
-        <text:h text:style-name="P114" text:level="4">
-          Partage de contenus
-        </text:h>
-        <text:p text:style-name="P37">
-          <text:span text:style-name="T3">
-            Dans cette configuration, les contenus sont publiés dans leurs espaces propres. L’équipe éditoriale d’une rubrique Internet (resp. intranet) identifie qu’un contenu publié sur l’intranet (resp. Internet) doit être repris.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P37">
-          <text:span text:style-name="T3">
-            Le mode « edit in place » permet à l’équipe Internet (resp. intranet) de récupérer ce contenu pour le publier.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P37">
-          <text:span text:style-name="T3">
-            La validation et publication peuvent suivre des cycles totalement différents. Les contributeurs/valideurs travaillent de façons dissociées sur chaque site.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P41"/>
-        <text:h text:style-name="P114" text:level="4">
-          Cas d’utilisation
-        </text:h>
-        <text:h text:style-name="P116" text:level="5">
-          Contenu chaud ou de type catalogue
-        </text:h>
-        <text:p text:style-name="P37">
-          Problématique :
-        </text:p>
-        <text:p text:style-name="P117">
-          Un type de contenu est saisi en masse : soit souvent, soit en grande quantité
-        </text:p>
-        <text:p text:style-name="P117">
-          Souvent – contenus chauds :
-        </text:p>
-        <text:p text:style-name="P118">
-          Le cycle de vie du document est très raccourcis : contribution =
-&gt;
-          publication rapide.
-        </text:p>
-        <text:p text:style-name="P117">
-          Grande quantité – données structurée de type catalogues nécessitant des outils de recherche, de filtre développés sur le portail.
-        </text:p>
-        <text:p text:style-name="P117">
-          Des contributeurs spécialisés, dédiés à la production de ces contenus.
-        </text:p>
-        <text:p text:style-name="P37">
-          Solution : Edit/Publish
-        </text:p>
-        <text:p text:style-name="P37">
-          Impacts :
-        </text:p>
-        <text:unordered-list text:style-name="WW8Num27">
-          <text:list-item>
-            <text:p text:style-name="P119">
-              l’arbre des catégories est segmenté en zone Internet, intranet.
-            </text:p>
-          </text:list-item>
-          <text:list-item>
-            <text:p text:style-name="P119">
-              le cycle de vie du contenu est porté par le contenu indépendamment du site sur lequel il est présenté.
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:h text:style-name="P116" text:level="5">
-          Contenu froid propre à un site
-        </text:h>
-        <text:p text:style-name="P37">
-          Problématique :
-        </text:p>
-        <text:p text:style-name="P117">
-          Il s’agit de faire simplement la mise à jour du site : contenu, rubriques, …
-        </text:p>
-        <text:p text:style-name="P86">
-          <text:tab-stop/>
-          Solution : Edit in place
-        </text:p>
-        <text:p text:style-name="P37">
-          Impacts :
-        </text:p>
-        <text:unordered-list text:style-name="WW8Num25">
-          <text:list-item>
-            <text:p text:style-name="P120">
-              aucun
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P117"/>
-        <text:h text:style-name="P116" text:level="5">
-          Contenu froid partagés par 2 sites réalisés dans des rubriques séparées
-        </text:h>
-        <text:p text:style-name="P37">
-          Problématique :
-        </text:p>
-        <text:p text:style-name="P117">
-          Des équipes éditoriales différentes travaillent sur des rubriques différentes de sites différents.
-        </text:p>
-        <text:p text:style-name="P117">
-          Un document peut néanmoins être partagé entre les 2 sites.
-        </text:p>
-        <text:p text:style-name="P37">
-          <text:span text:style-name="T14">
-            Solution: Edit in place.
-          </text:span>
-          Jahia proposera un assistant (« content sourcing ») permettant de récupérer un contenu existant pour le publier.
-        </text:p>
-        <text:p text:style-name="P37">
-          Impacts :
-        </text:p>
-        <text:unordered-list text:style-name="WW8Num25">
-          <text:list-item>
-            <text:p text:style-name="P120">
-              Chaque contribution correspond à un cycle de vie différent qui est fonction de la page dans laquelle le contenu est produit ou récupéré.
-            </text:p>
-          </text:list-item>
-          <text:list-item>
-            <text:p text:style-name="P120">
-              Tous les gabarits doivent intégrer les 2 chartes graphiques intranet et Internet. Pour pouvoir être intégré de façon harmonieuse tout contenu doit pouvoir être proposé sur l’intranet et l’Internet.
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P86"/>
-        <text:h text:style-name="P116" text:level="5">
-          Contenu froid partagés par 2 sites réalisés dans des rubriques mixtes
-        </text:h>
-        <text:p text:style-name="P37">
-          Problématique :
-        </text:p>
-        <text:p text:style-name="P117">
-          L’organisation éditoriale sur site Internet et du site intranet possèdent des similitudes : des rubriques sont partagées entre les 2 sites (même si ces rubriques ne sont pas disposées au même endroit.
-        </text:p>
-        <text:p text:style-name="P37">
-          Solution : Edit in place et site virtuel mixte. Un site mixte est mis en place (techniquement) permettant de gérer ces rubriques partagées entre le site Internet et le site intranet.
-        </text:p>
-        <text:p text:style-name="P37">
-          Impacts :
-        </text:p>
-        <text:unordered-list text:style-name="WW8Num25">
-          <text:list-item>
-            <text:p text:style-name="P120">
-              Chaque portail (Internet, intranet) référence ces rubriques.
-            </text:p>
-          </text:list-item>
-          <text:list-item>
-            <text:p text:style-name="P120">
-              Le cycle de vie du contenu est unique : contribution, notification, validation.
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P86"/>
-        <text:p text:style-name="P86"/>
-        <text:p text:style-name="P86"/>
-        <text:p text:style-name="P86"/>
-        <text:p text:style-name="P86"/>
-        <text:p text:style-name="P86"/>
-        <text:p text:style-name="P86"/>
-        <text:p text:style-name="P86"/>
-        <text:h text:style-name="P116" text:level="5">
-          <text:bookmark-start text:name="OLE_LINK1"/>
-          <text:bookmark-start text:name="OLE_LINK2"/>
-          Une rubrique mixte devient propre à l’intranet (resp. l’Internet).
-        </text:h>
-        <text:p text:style-name="P37">
-          <text:bookmark-end text:name="OLE_LINK1"/>
-          <text:bookmark-end text:name="OLE_LINK2"/>
-          Problématique :
-        </text:p>
-        <text:p text:style-name="P117">
-          Une rubrique partagée se restreint à un site.
-        </text:p>
-        <text:p text:style-name="P37">
-          Solution immédiate (cas d’une restriction temporaire) :
-        </text:p>
-        <text:p text:style-name="P117">
-          Il suffit de retirer le lien sur le site Internet (resp. intranet) vers cette rubrique.
-        </text:p>
-        <text:p text:style-name="P117"/>
-        <text:p text:style-name="P37">
-          Impact de la solution rapide :
-        </text:p>
-        <text:unordered-list text:style-name="WW8Num40">
-          <text:list-item>
-            <text:p text:style-name="P121">
-              Les contenus continuent à être répliqués vers le site Internet (resp. intranet) même s’ils ne sont plus accessibles.
-            </text:p>
-          </text:list-item>
-          <text:list-item>
-            <text:p text:style-name="P121">
-              De point de vue de la sécurité, ces documents étaient publiés juste avant la modification et gardent intrinsèquement leurs niveaux d’accessibilité ‘public’.
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P86"/>
-        <text:p text:style-name="P37">
-          Solution court terme :
-        </text:p>
-        <text:p text:style-name="P117">
-          Les contenus sont recopiés (manuellement) depuis le site mixte vers le site intranet (resp. Internet). Il s’agit bien ici des back-offices de chaque site.
-        </text:p>
-        <text:p text:style-name="P86"/>
-        <text:p text:style-name="P37">
-          Impact de la solution court terme :
-        </text:p>
-        <text:unordered-list text:style-name="WW8Num13">
-          <text:list-item>
-            <text:p text:style-name="P122">
-              La recopie des contenus utilise la fonction de ‘content sourcing’ entre le site mixte et le site intranet (resp. Internet).
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P86"/>
-        <text:h text:style-name="P116" text:level="5">
-          Un contenu d’une rubrique mixte doit subir un embargo pour ne plus être accessible sur Internet.
-        </text:h>
-        <text:p text:style-name="P37">
-          Problématique :
-        </text:p>
-        <text:p text:style-name="P117">
-          Un contenu publié dans une rubrique mixte peut subir un embargo (temporaire ou définitif)
-        </text:p>
-        <text:p text:style-name="P86"/>
-        <text:p text:style-name="P86"/>
-        <text:p text:style-name="P117"/>
-        <text:p text:style-name="P117"/>
-        <text:p text:style-name="P86"/>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P13"/>
-        <text:p text:style-name="P13"/>
-        <text:p text:style-name="P13"/>
-        <text:p text:style-name="P13"/>
-        <text:p text:style-name="P13"/>
-        <text:p text:style-name="P13"/>
-        <text:p text:style-name="P13"/>
-        <text:p text:style-name="P13"/>
-        <text:p text:style-name="P13"/>
-        <text:p text:style-name="P13"/>
-        <text:p text:style-name="P13"/>
-        <text:p text:style-name="P13">
-          Définir les outils (et les fonctions associées) permettant aux différents contributeurs d
-&apos;
-          administrer et de gérer la (les) base(s) de contenu indépendamment des accès via la navigation sur les sites de publication. (point 84 du cadre de réponse à détailler)
-        </text:p>
-        <text:p text:style-name="P13"/>
-        <text:p text:style-name="P13">
-          <text:span text:style-name="T3">
-            Jahia propose en standard un outil permettant d’explorer les contenus indépendamment des accès via la navigation sur les sites de publication.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P13">
-          <text:span text:style-name="T3">
-            Concernant les contenus réalisés en mode « edit/publish » une interface dédiée à la contribution et à la gestion est développée.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P13">
-          <text:span text:style-name="T3">
-            Concernant les contenus réalisés en mode « edit in place », Capgemini propose d’intégrer un agent de la DPMA (transfert de compétence) qui durant le projet aura la charge de spécifier et de développer ces outils.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P13"/>
-        <text:p text:style-name="P13"/>
-        <text:p text:style-name="P13">
-          Concernant les contenus non publiés ou en cours d
-&apos;
-          édition, décrire les outils, pour permettre aux utilisateurs du système (contributeur, éditeur, superviseurs) de modifier, publier ou de piloter le travail d
-&apos;
-          édition. (La notion de corbeille sera-t-elle étendue aux documents en cours de préparation, si oui, comment ?)
-        </text:p>
-        <text:p text:style-name="P13"/>
-        <text:p text:style-name="P49">
-          Jahia propose un outil permettant aux différents utilisateurs (contributeurs, valideurs, administrateurs) de suivre les contenus.
-        </text:p>
-        <text:p text:style-name="P49">
-          <draw:g text:anchor-type="paragraph" draw:z-index="97" draw:style-name="gr2">
-            <draw:caption draw:style-name="gr3" draw:text-style-name="P123" svg:width="1.4535inch" svg:height="1.2209inch" svg:x="5.5047inch" svg:y="1.6252inch" draw:caption-point-x="-0.6736inch" draw:caption-point-y="3.1311inch"/>
-            <draw:text-box draw:style-name="gr4" draw:text-style-name="P124" svg:width="1.7902inch" svg:height="0.5008inch" svg:x="5.1681inch" svg:y="2.8453inch">
-              <text:p text:style-name="P124">
-                <text:span text:style-name="T15">
-                  Zone de commentaires.
-                </text:span>
-              </text:p>
-            </draw:text-box>
-          </draw:g>
-          <draw:ellipse text:anchor-type="paragraph" draw:z-index="96" draw:style-name="gr5" draw:text-style-name="P96" svg:width="2.5008inch" svg:height="1.1256inch" svg:x="3.8752inch" svg:y="2.3752inch">
-            <draw:glue-point draw:id="5" svg:x="1.9677inch" svg:y="0inch"/>
-            <draw:glue-point draw:id="6" svg:x="0.5748inch" svg:y="0.5756inch"/>
-            <draw:glue-point draw:id="7" svg:x="0inch" svg:y="1.9669inch"/>
-            <draw:glue-point draw:id="8" svg:x="0.5748inch" svg:y="3.3587inch"/>
-            <draw:glue-point draw:id="9" svg:x="1.9677inch" svg:y="3.937inch"/>
-            <draw:glue-point draw:id="10" svg:x="3.3606inch" svg:y="3.3587inch"/>
-            <draw:glue-point draw:id="11" svg:x="3.9358inch" svg:y="1.9669inch"/>
-            <draw:glue-point draw:id="12" svg:x="3.3606inch" svg:y="0.5756inch"/>
-          </draw:ellipse>
-          <draw:g text:anchor-type="paragraph" draw:z-index="95" draw:style-name="gr2">
-            <draw:caption draw:style-name="gr6" draw:text-style-name="P123" svg:width="1.0244inch" svg:height="0.9953inch" svg:x="0.9189inch" svg:y="6.6193inch" draw:caption-point-x="2.5555inch" draw:caption-point-y="-1.9941inch"/>
-            <draw:text-box draw:style-name="gr4" draw:text-style-name="P124" svg:width="1.7902inch" svg:height="0.5008inch" svg:x="0.9189inch" svg:y="6.1193inch">
-              <text:p text:style-name="P124">
-                <text:span text:style-name="T15">
-                  Contenu publié.
-                </text:span>
-              </text:p>
-            </draw:text-box>
-          </draw:g>
-          <draw:ellipse text:anchor-type="paragraph" draw:z-index="94" draw:style-name="gr1" draw:text-style-name="P96" svg:width="0.3756inch" svg:height="0.2508inch" svg:x="3.3752inch" svg:y="3.75inch">
-            <draw:glue-point draw:id="5" svg:x="1.9646inch" svg:y="0inch"/>
-            <draw:glue-point draw:id="6" svg:x="0.5748inch" svg:y="0.5669inch"/>
-            <draw:glue-point draw:id="7" svg:x="0inch" svg:y="1.963inch"/>
-            <draw:glue-point draw:id="8" svg:x="0.5748inch" svg:y="3.3587inch"/>
-            <draw:glue-point draw:id="9" svg:x="1.9646inch" svg:y="3.937inch"/>
-            <draw:glue-point draw:id="10" svg:x="3.3547inch" svg:y="3.3587inch"/>
-            <draw:glue-point draw:id="11" svg:x="3.937inch" svg:y="1.963inch"/>
-            <draw:glue-point draw:id="12" svg:x="3.3547inch" svg:y="0.5669inch"/>
-          </draw:ellipse>
-          <draw:g text:anchor-type="paragraph" draw:z-index="93" draw:style-name="gr2">
-            <draw:caption draw:style-name="gr7" draw:text-style-name="P123" svg:width="1.1335inch" svg:height="3.6673inch" svg:x="5.689inch" svg:y="9.5417inch" draw:caption-point-x="-1.3138inch" draw:caption-point-y="-4.6665inch"/>
-            <draw:text-box draw:style-name="gr4" draw:text-style-name="P124" svg:width="1.7902inch" svg:height="0.5008inch" svg:x="5.0319inch" svg:y="9.0417inch">
-              <text:p text:style-name="P124">
-                <text:span text:style-name="T15">
-                  Contenu terminé en attente de validation.
-                </text:span>
-              </text:p>
-            </draw:text-box>
-          </draw:g>
-          <draw:ellipse text:anchor-type="paragraph" draw:z-index="92" draw:style-name="gr8" draw:text-style-name="P96" svg:width="0.3756inch" svg:height="0.1256inch" svg:x="3.3752inch" svg:y="3inch">
-            <draw:glue-point draw:id="5" svg:x="1.9646inch" svg:y="0inch"/>
-            <draw:glue-point draw:id="6" svg:x="0.5748inch" svg:y="0.5654inch"/>
-            <draw:glue-point draw:id="7" svg:x="0inch" svg:y="1.9575inch"/>
-            <draw:glue-point draw:id="8" svg:x="0.5748inch" svg:y="3.3496inch"/>
-            <draw:glue-point draw:id="9" svg:x="1.9646inch" svg:y="3.937inch"/>
-            <draw:glue-point draw:id="10" svg:x="3.3547inch" svg:y="3.3496inch"/>
-            <draw:glue-point draw:id="11" svg:x="3.937inch" svg:y="1.9575inch"/>
-            <draw:glue-point draw:id="12" svg:x="3.3547inch" svg:y="0.5654inch"/>
-          </draw:ellipse>
-          <draw:g text:anchor-type="paragraph" draw:z-index="91" draw:style-name="gr2">
-            <draw:caption draw:style-name="gr9" draw:text-style-name="P123" svg:width="1.2154inch" svg:height="2.5154inch" svg:x="5.4854inch" svg:y="7.6398inch" draw:caption-point-x="-1.15inch" draw:caption-point-y="-3.5146inch"/>
-            <draw:text-box draw:style-name="gr4" draw:text-style-name="P124" svg:width="1.7902inch" svg:height="0.5008inch" svg:x="4.9102inch" svg:y="7.1398inch">
-              <text:p text:style-name="P124">
-                <text:span text:style-name="T15">
-                  Contenu en cours de rédaction.
-                </text:span>
-              </text:p>
-            </draw:text-box>
-          </draw:g>
-          <draw:ellipse text:anchor-type="paragraph" draw:z-index="90" draw:style-name="gr10" draw:text-style-name="P96" svg:width="0.3756inch" svg:height="0.2508inch" svg:x="3.3752inch" svg:y="2.75inch">
-            <draw:glue-point draw:id="5" svg:x="1.9646inch" svg:y="0inch"/>
-            <draw:glue-point draw:id="6" svg:x="0.5748inch" svg:y="0.5669inch"/>
-            <draw:glue-point draw:id="7" svg:x="0inch" svg:y="1.963inch"/>
-            <draw:glue-point draw:id="8" svg:x="0.5748inch" svg:y="3.3587inch"/>
-            <draw:glue-point draw:id="9" svg:x="1.9646inch" svg:y="3.937inch"/>
-            <draw:glue-point draw:id="10" svg:x="3.3547inch" svg:y="3.3587inch"/>
-            <draw:glue-point draw:id="11" svg:x="3.937inch" svg:y="1.963inch"/>
-            <draw:glue-point draw:id="12" svg:x="3.3547inch" svg:y="0.5669inch"/>
-          </draw:ellipse>
-          <draw:image draw:style-name="fr1" draw:name="Graphic10" text:anchor-type="as-char" svg:width="6.2925inch" svg:height="6.0898inch" draw:z-index="2" xlink:href="#Pictures/100000000000028C000002776EFA4F06.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>
-        </text:p>
-        <text:p text:style-name="P13"/>
-        <text:p text:style-name="P13">
-          Lors de la révision d
-&apos;
-          un document, est-ce que toutes ses instances de publication (internet et intranet) seront modifiées ?
-        </text:p>
-        <text:p text:style-name="P13"/>
-        <text:p text:style-name="P49">
-          Les 2 cas sont possibles :
-        </text:p>
-        <text:unordered-list text:style-name="WW8Num9">
-          <text:list-item>
-            <text:unordered-list>
-              <text:list-item>
-                <text:p text:style-name="P125">
-                  <text:span text:style-name="T3">
-                    Les contenus créés en mode «  edit /publish » et les contenus mixtes sont modifiés au même moment sur tous les sites.
-                  </text:span>
-                </text:p>
-              </text:list-item>
-              <text:list-item>
-                <text:p text:style-name="P126">
-                  Les autres contenus ont des cycles de vies différents – chaque contenu doit être validé dans chaque rubrique de chaque site.
-                </text:p>
-              </text:list-item>
-            </text:unordered-list>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P3"/>
-        <text:ordered-list text:style-name="WW8Num35" text:continue-numbering="true">
-          <text:list-item>
-            <text:p text:style-name="P8">
-              Norme JSR 170
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P13">
-          Le développement proposé s
-&apos;
-          appuie en grande partie sur la norme JSR 170 en cours de validation. Préciser l
-&apos;
-          état d
-&apos;
-          avancement de la norme à ce jour, les acteurs industriels associés, les points restant à définir, les risques et les enjeux de cette norme. Donner des exemples de travaux ou de projets réalisés s
-&apos;
-          appuyant ou exploitant les prémices ou quelques caractéristiques de cette norme. Indiquer quelle est la responsabilité effective de Jahia dans l
-&apos;
-          élaboration de cette norme
-        </text:p>
-        <text:p text:style-name="P13">
-          Indiquer les éléments de la norme qui seront utilisés dans le projet et le rôle fonctionnel porté par chacun de ces éléments.
-        </text:p>
-        <text:p text:style-name="P13">
-          Dans le cas où cette norme ne serait pas finalisée avant le démarrage du projet, préciser les solutions alternatives qui seraient retenus pour y palier
-        </text:p>
-        <text:p text:style-name="P3"/>
-        <text:p text:style-name="P13">
-          <text:span text:style-name="T3">
-            Le draft publique de la JSR est publié.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P13">
-          <text:span text:style-name="T3">
-            Jahia attend que la spécification soit adoptée. Une étude a été réalisée par Codeva permettant de vérifier que tous les concepts de Jahia entrent dans les concepts de la JSR.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P49"/>
-        <text:p text:style-name="P49">
-          Le standard permet à Jahia à minima de standardiser l’export XML réalisé pour la synchro pour répondre à la structure CMS demandées par la JSR.
-        </text:p>
-        <text:p text:style-name="P49">
-          L’implémentation de la JSR 170 n’est pas indispensable pour le projet de la DPMA.
-        </text:p>
-        <text:p text:style-name="P3"/>
-        <text:p text:style-name="P3"/>
-        <text:ordered-list text:style-name="WW8Num35" text:continue-numbering="true">
-          <text:list-item>
-            <text:p text:style-name="P8">
-              Poste de travail 
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P13">
-          Indiquer si webdav n’est pas obligatoire pour ajouter des documents dans la gestion de contenu. Dans le cas où on publie sans Webdav, les postes de travail peuvent-ils être sous windows 95, ou windows 2000 ?
-        </text:p>
-        <text:p text:style-name="P13">
-          Un poste équipé d’Open Office 1.2
-          <text:s/>
-          peut-il publier sans webdav ?
-        </text:p>
-        <text:p text:style-name="P13">
-          Un poste équipé d’Open Office 1.2 peut-il publier avec webdav ?
-        </text:p>
-        <text:p text:style-name="P13"/>
-        <text:p text:style-name="P49">
-          L’utilisation de webdav n’est pas une obligation pour mettre à disposition des fichiers sur le site. Webdav permet de simplifier la publication de fichiers car il fonctionne, sur le poste du contributeur, de la même manière qu’un répertoire partagé. Ainsi, le contributeur peut ajouter très rapidement sur le site un grand nombre de fichiers, ou restructurer l’arborescence des répertoires.
-        </text:p>
-        <text:p text:style-name="P49">
-          Concernant les contributeurs ne disposant pas d’accès webdav, ils peuvent également « uploader » de fichiers sur le site en utilisant les fonctions disponibles sur le site. Dans ce cas, ils ne peuvent mettre à disposition qu’un seul fichier à la fois.
-        </text:p>
-        <text:p text:style-name="P49">
-          Les postes équipés d’Open Office, pourront publier sans webdav à partir du site web, comme décrit ci-dessus. Pour une publication avec webdav, Open Office ne supporte pas l’implémentation fournit par Microsoft, par conséquent, il est nécessaire d’utiliser un outil externe tel que WebDrive permettant de simuler un lecteur réseau. La fourniture d’un tel outil n’est pas incluse dans l’offre de Capgemini.
-        </text:p>
-        <text:p text:style-name="P3"/>
-        <text:p text:style-name="P3"/>
-        <text:p text:style-name="P3"/>
-        <text:p text:style-name="P3"/>
-        <text:p text:style-name="P3"/>
-        <text:ordered-list text:style-name="WW8Num35" text:continue-numbering="true">
-          <text:list-item>
-            <text:p text:style-name="P8">
-              Gestion des utilisateurs déclarés
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P35">
-          Décrire les outils fournis pour administrer les utilisateurs qui sont déclarés pour bénéficier de la personnalisation (mesurer l
-&apos;
-          activité, identifier les centres d
-&apos;
-          intérêt déclarés, identifier les erreurs d
-&apos;
-          adresses courriel)
-        </text:p>
-        <text:p text:style-name="P35"/>
-        <text:p text:style-name="P32">
-          Mesurer l’activité.
-        </text:p>
-        <text:p text:style-name="P35">
-          <text:span text:style-name="T3">
-            Le suivi de l’activité peut être réalisé en utilisant Xiti et les logs produits par Apache et travaillés avec Awstat.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P32">
-          Pour un suivi plus fin, Capgemini propose d’utiliser Log4J. Ce composant permet de lever des traces dans les templates Jahia, permettant de suivre : l’utilisateur/groupe, la page demandée. Ce suivi est réalisé dans un fichier (journal).
-        </text:p>
-        <text:p text:style-name="P35">
-          <text:span text:style-name="T3">
-            La DPMA récupère les différents journaux sur les différents serveurs pour les analyser avec Excel par exemple.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P44"/>
-        <text:p text:style-name="P32">
-          Identifier les centres d’intérêt déclarés.
-        </text:p>
-        <text:p text:style-name="P32">
-          A la demande de la DPMA, Capgemini peut intégrer un développement spécifique permettant d’interroger les données de personnalisation et produire un fichier Excel.
-        </text:p>
-        <text:p text:style-name="P127"/>
-        <text:p text:style-name="P128">
-          <text:span text:style-name="T3">
-            Identifier les erreurs d’adresses courriel.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P128">
-          <text:span text:style-name="T3">
-            Le logiciel Sympa reçoit les mails en erreur lorsque l’adresse courriel est erronée. Le portail n’a pas d’action sur ces adresses.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P129"/>
-        <text:p text:style-name="P128">
-          <text:span text:style-name="T3">
-            Par expérience, il est difficile de prévoir à priori les statistiques utiles au site. Il devient donc difficile de prévoir les bons points de mesures qui permettront de produire les statistiques.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P128">
-          <text:span text:style-name="T3">
-            La solution de Capgemini intègre une technologie permettant de réaliser ces points de mesures. Une première mise en œuvre est prévue qui permet de valider les principes et les fonctionnements.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P129"/>
-        <text:p text:style-name="P129">
-          Lors du transfert de compétence, ce point est notamment traité et permettra à la DPMA de positionner de nouveaux points de mesures et d’affiner les statistiques utiles.
-        </text:p>
-        <text:p text:style-name="P129"/>
-        <text:p text:style-name="P129"/>
-        <text:p text:style-name="P35"/>
-        <text:ordered-list text:style-name="WW8Num35" text:continue-numbering="true">
-          <text:list-item>
-            <text:p text:style-name="P11">
-              Moteur de Workflow Sensei
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P35">
-          Sensei n
-&apos;
-          ayant pas été intégré dans le prototype, fournir une description détaillé de cet outil (règles de fonctionnement et d
-&apos;
-          administration, ergonomie fonctionnelle).
-        </text:p>
-        <text:p text:style-name="P35">
-          Sensei est-il inclus dans la proposition ?.
-        </text:p>
-        <text:p text:style-name="P35">
-          Dans le paragraphe 3.3.1, il est précisé que la livraison comprend trois workflow type. Le schéma qui suit ne prend pas en compte la gestion de la multi-publication. Il convient de préciser que les 3 workflow proposés prendront en compte la publication-multi-sites.
-        </text:p>
-        <text:p text:style-name="P35"/>
-        <text:p text:style-name="P19">
-          <draw:image draw:style-name="fr1" draw:name="Graphic11" text:anchor-type="as-char" svg:width="1.8228inch" svg:height="0.5937inch" draw:z-index="3" xlink:href="#Pictures/10000200000000AF000000396A124FC0.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>
-        </text:p>
-        <text:p text:style-name="P19"/>
-        <text:p text:style-name="P19">
-          Sensei est un
-          <text:s/>
-          moteur de gestion de process (BPMS - Business Process Management System) et d’orchestration de Webservices.
-        </text:p>
-        <text:p text:style-name="P19">
-          <text:s/>
-        </text:p>
-        <text:p text:style-name="P19">
-          Sensei va donc permettre de mettre en relation des systèmes hétérogènes par l’échange de messages standardisés (xml / soap) organisés selon un schéma (process) directeur défini lui aussi de façon standard (bpml).
-        </text:p>
-        <text:p text:style-name="P19"/>
-        <text:p text:style-name="P130"/>
-        <text:p text:style-name="P19"/>
-        <text:p text:style-name="P131">
-          Sensei est un logiciel fondé sur la philosophie du développement collaboratif :
-        </text:p>
-        <text:p text:style-name="P19"/>
-        <text:unordered-list text:style-name="WW8Num18">
-          <text:list-item>
-            <text:p text:style-name="P132">
-              Licence collaborative (vous ne payez pas les logiciels que vous contribuez à faire évoluer)
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P10"/>
-        <text:unordered-list text:style-name="WW8Num18">
-          <text:list-item>
-            <text:p text:style-name="P132">
-              Sources ouvertes
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P10"/>
-        <text:unordered-list text:style-name="WW8Num18">
-          <text:list-item>
-            <text:p text:style-name="P132">
-              Faible coût d’acquisition vs fonctionnalités
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P10"/>
-        <text:unordered-list text:style-name="WW8Num18">
-          <text:list-item>
-            <text:p text:style-name="P132">
-              Fédération des développements au sein de la communauté des utilisateurs
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P19"/>
-        <text:unordered-list text:style-name="WW8Num18">
-          <text:list-item>
-            <text:p text:style-name="P132">
-              Basé uniquement sur des standards : J2EE, JDO, Webservices, BPML
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P19"/>
-        <text:p text:style-name="P130">
-          <draw:image draw:style-name="fr1" draw:name="Graphic12" text:anchor-type="as-char" svg:width="3.8807inch" svg:height="3.1925inch" draw:z-index="4" xlink:href="#Pictures/100000000000038F000002E82B54F904.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>
-        </text:p>
-        <text:p text:style-name="P19"/>
-        <text:p text:style-name="P19">
-          Sensei est basé sur des standards ouverts :
-        </text:p>
-        <text:p text:style-name="P19"/>
-        <text:unordered-list text:style-name="WW8Num43">
-          <text:list-item>
-            <text:p text:style-name="P133">
-              WSDL pour la définition des interfaces Soap / Webservices (Universalité applicative : J2EE / .NET / PHP)
-            </text:p>
-          </text:list-item>
-          <text:list-item>
-            <text:p text:style-name="P133">
-              BPML pour la définition des process
-            </text:p>
-          </text:list-item>
-          <text:list-item>
-            <text:p text:style-name="P133">
-              Exécution des process réalisés entièrement par Webservices (Soap et XML) mais pouvant être étendus par l’utilisation d’autres connecteurs (JMS,…)
-            </text:p>
-          </text:list-item>
-          <text:list-item>
-            <text:p text:style-name="P133">
-              Architecturé sur les technologies J2EE (Sun ©) via des composants Servlet.
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P19"/>
-        <text:p text:style-name="P46">
-          <text:s text:c="2"/>
-        </text:p>
-        <text:p text:style-name="P134">
-          Schéma de l
-&apos;
-          architecture :
-        </text:p>
-        <text:p text:style-name="P46"/>
-        <text:p text:style-name="P46">
-          <draw:image draw:style-name="fr1" draw:name="Graphic13" text:anchor-type="as-char" svg:width="6.2917inch" svg:height="4.4591inch" draw:z-index="5" xlink:href="#Pictures/10000000000003200000023733748B69.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>
-        </text:p>
-        <text:p text:style-name="P46"/>
-        <text:p text:style-name="P46">
-          <text:s/>
-        </text:p>
-        <text:p text:style-name="P131">
-          Intégrant Sensei, la version « Enterprise » de Jahia va permettre l’ajout de processus complexes de publication définis par un fichier XML standardisé (BPML) en interaction totale avec Jahia (étapes de publication, notifications, verrouillage des objets de contenu, date de début de publication, etc…).
-        </text:p>
-        <text:p text:style-name="P19"/>
-        <text:p text:style-name="P19">
-          Par ailleurs, Sensei va permettre, au-delà de la gestion des workflow complexes de publication, de mettre en place des applications métiers au travers des templates de Jahia ou dans le cadre d’une application web déployée dans Jahia. La Webapps métier utilisera alors Sensei pour gérer des process spécifiques, sans aucun lien avec le process de publication.
-        </text:p>
-        <text:p text:style-name="P135"/>
-        <text:p text:style-name="P135"/>
-        <text:p text:style-name="P135">
-          La gestion des workflow complexes de publication
-        </text:p>
-        <text:p text:style-name="P19"/>
-        <text:p text:style-name="P19">
-          Jahia propose en version standard un workflow de publication à 2 étapes : l’auteur notifie une version de contenu sur lequel il travaille à un validateur qui acceptera ou refusera cette nouvelle version. Le contenu sera disponible en ligne, une fois validé.
-        </text:p>
-        <text:p text:style-name="P19"/>
-        <text:p text:style-name="P19">
-          La version « Entreprise » de Jahia permet, grâce à Sensei, de définir des workflow complexes de publication à plusieurs étapes.
-        </text:p>
-        <text:p text:style-name="P19"/>
-        <text:p text:style-name="P19">
-          Jahia va par ailleurs gérer les héritages de workflow : on peut à tout moment définir un process de publication différent de la page parente du contenu publié ou, inversement, avoir (option par défaut) le même workflow de publication que la page parente.
-        </text:p>
-        <text:p text:style-name="P19"/>
-        <text:p text:style-name="P19">
-          Par exemple, l’utilisateur créée une page et sélectionne sur le bouton « modifier les propriétés » :
-        </text:p>
-        <text:p text:style-name="P19"/>
-        <text:p text:style-name="P19"/>
-        <text:p text:style-name="P130">
-          <draw:image draw:style-name="fr1" draw:name="Graphic14" text:anchor-type="as-char" svg:width="5.1654inch" svg:height="3.5957inch" draw:z-index="6" xlink:href="#Pictures/10000000000003D6000002ADAA352364.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>
-        </text:p>
-        <text:p text:style-name="P19"/>
-        <text:p text:style-name="P131">
-          Il va pouvoir sélectionner dans l’onglet « workflow de publication », le type de workflow souhaité (hérité, standard, aucun workflow, externe) :
-        </text:p>
-        <text:p text:style-name="P19"/>
-        <text:p text:style-name="P19"/>
-        <text:p text:style-name="P130">
-          <draw:image draw:style-name="fr1" draw:name="Graphic15" text:anchor-type="as-char" svg:width="5.5063inch" svg:height="4.2917inch" draw:z-index="7" xlink:href="#Pictures/1000000000000280000001F4A0353879.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>
-        </text:p>
-        <text:p text:style-name="P131">
-          En sélectionnant le workflow externe, il va pouvoir choisir parmi les process de publication importés dans Sensei.
-        </text:p>
-        <text:p text:style-name="P19"/>
-        <text:p text:style-name="P19">
-          Par exemple, si l’utilisateur choisit le workflow à 3 étapes, il devra alors définir les personnes en charges de chacune des étapes :
-        </text:p>
-        <text:p text:style-name="P19"/>
-        <text:p text:style-name="P19"/>
-        <text:p text:style-name="P130">
-          <draw:image draw:style-name="fr1" draw:name="Graphic16" text:anchor-type="as-char" svg:width="5.6126inch" svg:height="7.2882inch" draw:z-index="8" xlink:href="#Pictures/10000000000002830000034228223F76.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>
-        </text:p>
-        <text:p text:style-name="P19"/>
-        <text:p text:style-name="P19">
-          Les actions possibles et leurs conséquences à chaque étapes sont gérées par Sensei selon le schéma directeur défini dans le fichier BPML : notification, choix à la disposition de la personne en charge de l’étape (par exemple définir ou non une date de début de publication), verrouillage des objets de contenus etc…
-        </text:p>
-        <text:p text:style-name="P136">
-          Application métier : Gestion de demandes
-        </text:p>
-        <text:p text:style-name="P137"/>
-        <text:p text:style-name="P137"/>
-        <text:p text:style-name="P3">
-          <text:span text:style-name="T16">
-            L’application de gestion des demandes est une véritable application basée sur Jahia, livrée avec la version « Entreprise ».
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P138"/>
-        <text:p text:style-name="P138">
-          Elle a été développé sur base du système de template de Jahia (une webapp / portlet déployée dans Jahia était une alternative) afin de bénéficier des fonctionnalités (indexation, personnalisation, gestion des fichiers) et de la souplesse de modifications des gabarits de Jahia.
-        </text:p>
-        <text:p text:style-name="P138"/>
-        <text:p text:style-name="P138">
-          Elle a été développée à la demande du Parlement Européen et redistribuée à la communauté.
-        </text:p>
-        <text:p text:style-name="P138"/>
-        <text:p text:style-name="P138">
-          Cette application permet à une personne de solliciter l’avis d’un groupe d’expert afin de répondre à une requête. Dans le cadre du projet du Parlement Européen, cette requête prend la forme d’une demande de support et de préconisation autour d’un projet informatique piloté par la Direction Informatique.
-        </text:p>
-        <text:p text:style-name="P138"/>
-        <text:p text:style-name="P138">
-          La personne va donc créer une demande et solliciter un groupe d’expert ou un expert particulier (le « dispatcher ») si elle n’est pas certaine du domaine concerné par sa demande.
-        </text:p>
-        <text:p text:style-name="P138"/>
-        <text:p text:style-name="P138">
-          Le groupe d’expert sera prévenu de cette demande et un membre du groupe devra prendre en charge cette demande sans quoi, sous 24h, le « dispatcher » sera prévenu par notification mail afin d’éventuellement désigner un responsable.
-        </text:p>
-        <text:p text:style-name="P138"/>
-        <text:p text:style-name="P138">
-          Le responsable de la demande constituera alors sont groupe de travail.
-        </text:p>
-        <text:p text:style-name="P138">
-          Le groupe travaillera de façon collaborative sur la page de la demande (créée automatiquement par le système) en publiant des informations et documents publics (visibles par le demandeur) ou privés (visibles par le groupe de travail).
-        </text:p>
-        <text:p text:style-name="P138"/>
-        <text:p text:style-name="P138">
-          La page de la demande présente donc l’historique complet du travail effectué et des évènements survenus lors du déroulement du processus de traitement de la requête.
-        </text:p>
-        <text:p text:style-name="P138"/>
-        <text:p text:style-name="P3">
-          <text:span text:style-name="T16">
-            Chaque demandeur et participant à une demande voit dans la liste personnalisée que le système présente de façon personnalisé, les demandes le concernant, son rôle et leur état d’avancement.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P138"/>
-        <text:p text:style-name="P138">
-          La composition du groupe de travail et le responsable de la demande sont modifiables à tous moment, Sensei gérant l’ensemble des conséquences issues de ces évènements.
-        </text:p>
-        <text:p text:style-name="P138"/>
-        <text:p text:style-name="P138">
-          La publication de la réponse va mettre la demande en état « clôturé », personne ne pouvant plus y participer, à moins que le demandeur ré - ouvre sa requête, non satisfait de la réponse.
-        </text:p>
-        <text:p text:style-name="P138"/>
-        <text:p text:style-name="P139">
-          Comme le montre le schéma ci-dessous, les actions issues du déroulement de l’application (création de la demande, création de la page présentant son historique, gestion des accès et des droits sur la demande, notifications mails etc…) sont gérés par Sensei selon le schéma défini en BPML en interaction avec deux Webservices :
-        </text:p>
-        <text:p text:style-name="P138"/>
-        <text:unordered-list text:style-name="WW8Num45">
-          <text:list-item>
-            <text:p text:style-name="P140">
-              Jahia Management Webservice : en charge du contrôle de Jahia (création des pages, modifications des droits, etc…)
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P138"/>
-        <text:unordered-list text:style-name="WW8Num45">
-          <text:list-item>
-            <text:p text:style-name="P140">
-              Notifier Webservice : gestion des notifications, différentes selon les nombreux évènements provenant du déroulement du process vers le serveur SMTP
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P138"/>
-        <text:p text:style-name="P137"/>
-        <text:p text:style-name="P3">
-          <text:span text:style-name="T3">
-            <draw:object-ole draw:style-name="fr6" draw:name="Object1" text:anchor-type="as-char" svg:width="6.2925inch" svg:height="3.7752inch" draw:z-index="9" xlink:href="#./Obj00DFE4A5" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>
-          </text:span>
-          <text:span text:style-name="T17"></text:span>
-        </text:p>
-        <text:p text:style-name="P137"/>
-        <text:p text:style-name="P141">
-          Illustrons les fonctionnalités et la valeur ajoutée apportée par l’utilisation de Sensei au travers du scénario suivant :
-        </text:p>
-        <text:p text:style-name="P142"/>
-        <text:p text:style-name="P143"/>
-        <text:p text:style-name="P144">
-          <text:span text:style-name="T3">
-            Une personne se connecte, le « 
-          </text:span>
-          <text:span text:style-name="T18"></text:span>
-          <text:span text:style-name="T3">
-            demandeur
-          </text:span>
-          <text:span text:style-name="T18"></text:span>
-          <text:span text:style-name="T3">
-            1 » et
-          </text:span>
-          <text:span text:style-name="T18"></text:span>
-          <text:span text:style-name="T3">
-            va créer
-          </text:span>
-          <text:span text:style-name="T18"></text:span>
-          <text:span text:style-name="T3">
-            une
-          </text:span>
-          <text:span text:style-name="T18"></text:span>
-          <text:span text:style-name="T3">
-            demande
-          </text:span>
-          <text:span text:style-name="T18"></text:span>
-          <text:span text:style-name="T3">
-            destinée
-          </text:span>
-          <text:span text:style-name="T18"></text:span>
-          <text:span text:style-name="T19">
-            au
-          </text:span>
-          <text:span text:style-name="T18"></text:span>
-          <text:span text:style-name="T19">
-            domaine
-          </text:span>
-          <text:span text:style-name="T18">
-            « 
-          </text:span>
-          <text:span text:style-name="T19">
-            A »
-          </text:span>
-          <text:span text:style-name="T18">
-            de compétence.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P145"/>
-        <text:p text:style-name="P146">
-          <text:span text:style-name="T19">
-            La
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            demande
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            apparaît
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            dans
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            le
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            tablea
-          </text:span>
-          <text:span text:style-name="T3">
-            u
-          </text:span>
-          <text:span text:style-name="T19">
-            en
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            état
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            «
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            Initialisation
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            ».
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P147"/>
-        <text:p text:style-name="P148">
-          <draw:image draw:style-name="fr1" draw:name="Graphic17" text:anchor-type="as-char" svg:width="5.2709inch" svg:height="4.0102inch" draw:z-index="10" xlink:href="#Pictures/10000000000003F400000302F37B5C42.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>
-        </text:p>
-        <text:p text:style-name="P142"/>
-        <text:p text:style-name="P142"/>
-        <text:p text:style-name="P149">
-          <text:span text:style-name="T19">
-            En
-          </text:span>
-          <text:span text:style-name="T20"></text:span>
-          <text:span text:style-name="T19">
-            cliquan
-          </text:span>
-          <text:span text:style-name="T3">
-            t
-          </text:span>
-          <text:span text:style-name="T20"></text:span>
-          <text:span text:style-name="T19">
-            sur
-          </text:span>
-          <text:span text:style-name="T20"></text:span>
-          <text:span text:style-name="T19">
-            la
-          </text:span>
-          <text:span text:style-name="T20"></text:span>
-          <text:span text:style-name="T19">
-            de
-          </text:span>
-          <text:span text:style-name="T3">
-            m
-          </text:span>
-          <text:span text:style-name="T19">
-            ande,
-          </text:span>
-          <text:span text:style-name="T20"></text:span>
-          <text:span text:style-name="T19">
-            le
-          </text:span>
-          <text:span text:style-name="T20"></text:span>
-          <text:span text:style-name="T19">
-            demandeur
-          </text:span>
-          <text:span text:style-name="T3">
-            1
-          </text:span>
-          <text:span text:style-name="T21"></text:span>
-          <text:span text:style-name="T19">
-            peut
-          </text:span>
-          <text:span text:style-name="T20"></text:span>
-          <text:span text:style-name="T19">
-            vérifier
-          </text:span>
-          <text:span text:style-name="T20"></text:span>
-          <text:span text:style-name="T19">
-            les
-          </text:span>
-          <text:span text:style-name="T20"></text:span>
-          <text:span text:style-name="T19">
-            données
-          </text:span>
-          <text:span text:style-name="T20"></text:span>
-          <text:span text:style-name="T19">
-            de
-          </text:span>
-          <text:span text:style-name="T20"></text:span>
-          <text:span text:style-name="T19">
-            sa
-          </text:span>
-          <text:span text:style-name="T20"></text:span>
-          <text:span text:style-name="T19">
-            demande mais
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            peut
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            effectuer
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            une
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            seule
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            a
-          </text:span>
-          <text:span text:style-name="T3">
-            c
-          </text:span>
-          <text:span text:style-name="T19">
-            tion
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            :
-          </text:span>
-          <text:span text:style-name="T3">
-            <text:s/>
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P150">
-          <text:span text:style-name="T19">
-            «
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            Poster
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            un
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            commentaire
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            public
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            »
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P151"/>
-        <text:p text:style-name="P147"/>
-        <text:p text:style-name="P152">
-          <draw:image draw:style-name="fr1" draw:name="Graphic18" text:anchor-type="as-char" svg:width="5.8602inch" svg:height="4.4339inch" draw:z-index="11" xlink:href="#Pictures/10000000000003FF000003067279D1F3.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>
-        </text:p>
-        <text:p text:style-name="P153"/>
-        <text:p text:style-name="P154">
-          <text:span text:style-name="T19">
-            Il
-          </text:span>
-          <text:span text:style-name="T22"></text:span>
-          <text:span text:style-name="T19">
-            peut
-          </text:span>
-          <text:span text:style-name="T22"></text:span>
-          <text:span text:style-name="T19">
-            ain
-          </text:span>
-          <text:span text:style-name="T3">
-            s
-          </text:span>
-          <text:span text:style-name="T19">
-            i
-          </text:span>
-          <text:span text:style-name="T22"></text:span>
-          <text:span text:style-name="T19">
-            préciser
-          </text:span>
-          <text:span text:style-name="T22"></text:span>
-          <text:span text:style-name="T3">
-            s
-          </text:span>
-          <text:span text:style-name="T19">
-            a
-          </text:span>
-          <text:span text:style-name="T22"></text:span>
-          <text:span text:style-name="T19">
-            demande
-          </text:span>
-          <text:span text:style-name="T22"></text:span>
-          <text:span text:style-name="T19">
-            de
-          </text:span>
-          <text:span text:style-name="T22"></text:span>
-          <text:span text:style-name="T19">
-            faço
-          </text:span>
-          <text:span text:style-name="T3">
-            n
-          </text:span>
-          <text:span text:style-name="T23"></text:span>
-          <text:span text:style-name="T19">
-            plus
-          </text:span>
-          <text:span text:style-name="T22"></text:span>
-          <text:span text:style-name="T19">
-            complè
-          </text:span>
-          <text:span text:style-name="T3">
-            t
-          </text:span>
-          <text:span text:style-name="T19">
-            e,
-          </text:span>
-          <text:span text:style-name="T22"></text:span>
-          <text:span text:style-name="T19">
-            par
-          </text:span>
-          <text:span text:style-name="T22"></text:span>
-          <text:span text:style-name="T19">
-            exemple
-          </text:span>
-          <text:span text:style-name="T22"></text:span>
-          <text:span text:style-name="T19">
-            en
-          </text:span>
-          <text:span text:style-name="T22"></text:span>
-          <text:span text:style-name="T19">
-            mettant
-          </text:span>
-          <text:span text:style-name="T22"></text:span>
-          <text:span text:style-name="T19">
-            à dispo
-          </text:span>
-          <text:span text:style-name="T3">
-            s
-          </text:span>
-          <text:span text:style-name="T19">
-            ition
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            un
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            fichier
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            de
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            référence.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P155"/>
-        <text:p text:style-name="P156">
-          <text:span text:style-name="T19">
-            Les
-          </text:span>
-          <text:span text:style-name="T18"></text:span>
-          <text:span text:style-name="T19">
-            membres
-          </text:span>
-          <text:span text:style-name="T18"></text:span>
-          <text:span text:style-name="T19">
-            du
-          </text:span>
-          <text:span text:style-name="T18"></text:span>
-          <text:span text:style-name="T19">
-            domaine
-          </text:span>
-          <text:span text:style-name="T18"></text:span>
-          <text:span text:style-name="T19">
-            A
-          </text:span>
-          <text:span text:style-name="T18"></text:span>
-          <text:span text:style-name="T19">
-            on
-          </text:span>
-          <text:span text:style-name="T3">
-            t
-          </text:span>
-          <text:span text:style-name="T24"></text:span>
-          <text:span text:style-name="T19">
-            reçu
-          </text:span>
-          <text:span text:style-name="T18"></text:span>
-          <text:span text:style-name="T19">
-            u
-          </text:span>
-          <text:span text:style-name="T3">
-            n
-          </text:span>
-          <text:span text:style-name="T18"></text:span>
-          <text:span text:style-name="T19">
-            mail
-          </text:span>
-          <text:span text:style-name="T18"></text:span>
-          <text:span text:style-name="T3">
-            d
-          </text:span>
-          <text:span text:style-name="T19">
-            e
-          </text:span>
-          <text:span text:style-name="T18"></text:span>
-          <text:span text:style-name="T19">
-            no
-          </text:span>
-          <text:span text:style-name="T3">
-            t
-          </text:span>
-          <text:span text:style-name="T19">
-            ificatio
-          </text:span>
-          <text:span text:style-name="T3">
-            n
-          </text:span>
-          <text:span text:style-name="T18"></text:span>
-          <text:span text:style-name="T19">
-            c
-          </text:span>
-          <text:span text:style-name="T3">
-            o
-          </text:span>
-          <text:span text:style-name="T19">
-            ncernant cette
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            nouvelle
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            demande.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P157"/>
-        <text:p text:style-name="P156">
-          <text:span text:style-name="T18">
-            C
-          </text:span>
-          <text:span text:style-name="T19">
-            ette
-          </text:span>
-          <text:span text:style-name="T18"></text:span>
-          <text:span text:style-name="T19">
-            demande
-          </text:span>
-          <text:span text:style-name="T18"></text:span>
-          <text:span text:style-name="T19">
-            sera prise
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            en
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            charge
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            par
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            l’expert
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            1
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            de
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            c
-          </text:span>
-          <text:span text:style-name="T3">
-            e
-          </text:span>
-          <text:span text:style-name="T19">
-            groupe
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            de
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            compétence
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            A
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            (expert1domA).
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P158"/>
-        <text:p text:style-name="P159">
-          <text:span text:style-name="T19">
-            L’expert1domA
-          </text:span>
-          <text:span text:style-name="T25"></text:span>
-          <text:span text:style-name="T19">
-            puis
-          </text:span>
-          <text:span text:style-name="T25"></text:span>
-          <text:span text:style-name="T19">
-            all
-          </text:span>
-          <text:span text:style-name="T3">
-            e
-          </text:span>
-          <text:span text:style-name="T19">
-            r
-          </text:span>
-          <text:span text:style-name="T25"></text:span>
-          <text:span text:style-name="T19">
-            sur
-          </text:span>
-          <text:span text:style-name="T25"></text:span>
-          <text:span text:style-name="T19">
-            la
-          </text:span>
-          <text:span text:style-name="T25"></text:span>
-          <text:span text:style-name="T19">
-            liste
-          </text:span>
-          <text:span text:style-name="T25"></text:span>
-          <text:span text:style-name="T19">
-            des
-          </text:span>
-          <text:span text:style-name="T25"></text:span>
-          <text:span text:style-name="T19">
-            demandes
-          </text:span>
-          <text:span text:style-name="T25"></text:span>
-          <text:span text:style-name="T19">
-            et
-          </text:span>
-          <text:span text:style-name="T25"></text:span>
-          <text:span text:style-name="T19">
-            cliq
-          </text:span>
-          <text:span text:style-name="T3">
-            u
-          </text:span>
-          <text:span text:style-name="T19">
-            er sur
-          </text:span>
-          <text:span text:style-name="T26"></text:span>
-          <text:span text:style-name="T19">
-            la
-          </text:span>
-          <text:span text:style-name="T26"></text:span>
-          <text:span text:style-name="T19">
-            demande
-          </text:span>
-          <text:span text:style-name="T26"></text:span>
-          <text:span text:style-name="T19">
-            (ou
-          </text:span>
-          <text:span text:style-name="T26"></text:span>
-          <text:span text:style-name="T3">
-            c
-          </text:span>
-          <text:span text:style-name="T19">
-            liquer
-          </text:span>
-          <text:span text:style-name="T26"></text:span>
-          <text:span text:style-name="T19">
-            sur
-          </text:span>
-          <text:span text:style-name="T26"></text:span>
-          <text:span text:style-name="T19">
-            le
-          </text:span>
-          <text:span text:style-name="T26"></text:span>
-          <text:span text:style-name="T19">
-            lien
-          </text:span>
-          <text:span text:style-name="T26"></text:span>
-          <text:span text:style-name="T19">
-            pré
-          </text:span>
-          <text:span text:style-name="T3">
-            s
-          </text:span>
-          <text:span text:style-name="T19">
-            enté
-          </text:span>
-          <text:span text:style-name="T26"></text:span>
-          <text:span text:style-name="T19">
-            dans
-          </text:span>
-          <text:span text:style-name="T26"></text:span>
-          <text:span text:style-name="T19">
-            le
-          </text:span>
-          <text:span text:style-name="T26"></text:span>
-          <text:span text:style-name="T19">
-            mail
-          </text:span>
-          <text:span text:style-name="T26"></text:span>
-          <text:span text:style-name="T19">
-            de
-          </text:span>
-          <text:span text:style-name="T26"></text:span>
-          <text:span text:style-name="T19">
-            notification
-          </text:span>
-          <text:span text:style-name="T26"></text:span>
-          <text:span text:style-name="T19">
-            et
-          </text:span>
-          <text:span text:style-name="T26"></text:span>
-          <text:span text:style-name="T19">
-            se
-          </text:span>
-          <text:span text:style-name="T3">
-            connecter avec ce profil).
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P142"/>
-        <text:p text:style-name="P160"/>
-        <text:p text:style-name="P161">
-          <text:span text:style-name="T19">
-            L’expert1domA
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            peut
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            alors
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            se
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            désigne
-          </text:span>
-          <text:span text:style-name="T3">
-            r
-          </text:span>
-          <text:span text:style-name="T27"></text:span>
-          <text:span text:style-name="T19">
-            comme
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            responsable
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            de
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            cette
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            demande.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P142"/>
-        <text:p text:style-name="P142"/>
-        <text:p text:style-name="P162"/>
-        <text:p text:style-name="P163">
-          <draw:image draw:style-name="fr1" draw:name="Graphic19" text:anchor-type="as-char" svg:width="6.2457inch" svg:height="4.7591inch" draw:z-index="12" xlink:href="#Pictures/10000000000003D7000002EDDB3B821F.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>
-        </text:p>
-        <text:p text:style-name="P142"/>
-        <text:p text:style-name="P142"/>
-        <text:p text:style-name="P147"/>
-        <text:p text:style-name="P164"/>
-        <text:p text:style-name="P165">
-          L’expert1domA peut alors :
-        </text:p>
-        <text:p text:style-name="P166"/>
-        <text:unordered-list text:style-name="WW8Num44">
-          <text:list-item>
-            <text:p text:style-name="P167">
-              <text:span text:style-name="T3">
-                Modifier
-              </text:span>
-              <text:span text:style-name="T24"></text:span>
-              <text:span text:style-name="T3">
-                <text:s/>
-                son
-              </text:span>
-              <text:span text:style-name="T24"></text:span>
-              <text:span text:style-name="T3">
-                <text:s/>
-                groupe
-              </text:span>
-              <text:span text:style-name="T24"></text:span>
-              <text:span text:style-name="T3">
-                <text:s/>
-                de
-              </text:span>
-              <text:span text:style-name="T24"></text:span>
-              <text:span text:style-name="T3">
-                <text:s/>
-                travail
-              </text:span>
-              <text:span text:style-name="T24"></text:span>
-              <text:span text:style-name="T3">
-                <text:s/>
-                (gr
-              </text:span>
-              <text:span text:style-name="T19">
-                oupe
-              </text:span>
-              <text:span text:style-name="T24"></text:span>
-              <text:span text:style-name="T3">
-                <text:s/>
-              </text:span>
-              <text:span text:style-name="T19">
-                qu’il
-              </text:span>
-              <text:span text:style-name="T24"></text:span>
-              <text:span text:style-name="T3">
-                <text:s/>
-              </text:span>
-              <text:span text:style-name="T19">
-                constitue et destiné
-              </text:span>
-              <text:span text:style-name="T24"></text:span>
-              <text:span text:style-name="T3">
-                <text:s/>
-              </text:span>
-              <text:span text:style-name="T19">
-                à
-              </text:span>
-              <text:span text:style-name="T24"></text:span>
-              <text:span text:style-name="T3">
-                <text:s/>
-              </text:span>
-              <text:span text:style-name="T19">
-                l’aide
-              </text:span>
-              <text:span text:style-name="T3">
-                r
-              </text:span>
-              <text:span text:style-name="T24"></text:span>
-              <text:span text:style-name="T3">
-                <text:s/>
-              </text:span>
-              <text:span text:style-name="T19">
-                à répondre
-              </text:span>
-              <text:span text:style-name="T3"></text:span>
-              <text:span text:style-name="T19">
-                à
-              </text:span>
-              <text:span text:style-name="T3"></text:span>
-              <text:span text:style-name="T19">
-                cette
-              </text:span>
-              <text:span text:style-name="T3"></text:span>
-              <text:span text:style-name="T19">
-                demande)
-              </text:span>
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P168"/>
-        <text:unordered-list text:style-name="WW8Num44">
-          <text:list-item>
-            <text:p text:style-name="P169">
-              <text:span text:style-name="T19">
-                Ajouter
-              </text:span>
-              <text:span text:style-name="T3"></text:span>
-              <text:span text:style-name="T19">
-                un
-              </text:span>
-              <text:span text:style-name="T3"></text:span>
-              <text:span text:style-name="T19">
-                commentaire
-              </text:span>
-              <text:span text:style-name="T3"></text:span>
-              <text:span text:style-name="T19">
-                public
-              </text:span>
-              <text:span text:style-name="T3"></text:span>
-              <text:span text:style-name="T19">
-                ou
-              </text:span>
-              <text:span text:style-name="T3"></text:span>
-              <text:span text:style-name="T19">
-                privé
-              </text:span>
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P170"/>
-        <text:unordered-list text:style-name="WW8Num44">
-          <text:list-item>
-            <text:p text:style-name="P171">
-              <text:span text:style-name="T3">
-                Ajouter
-              </text:span>
-              <text:span text:style-name="T28"></text:span>
-              <text:span text:style-name="T3">
-                <text:s/>
-                une
-              </text:span>
-              <text:span text:style-name="T28"></text:span>
-              <text:span text:style-name="T3">
-                <text:s/>
-                réponse
-              </text:span>
-              <text:span text:style-name="T28"></text:span>
-              <text:span text:style-name="T3">
-                <text:s/>
-                afin
-              </text:span>
-              <text:span text:style-name="T28">
-                <text:s/>
-              </text:span>
-              <text:span text:style-name="T3">
-                de
-              </text:span>
-              <text:span text:style-name="T28"></text:span>
-              <text:span text:style-name="T3">
-                <text:s/>
-                clôturer
-              </text:span>
-              <text:span text:style-name="T28"></text:span>
-              <text:span text:style-name="T3">
-                <text:s/>
-                à
-              </text:span>
-              <text:span text:style-name="T28"></text:span>
-              <text:span text:style-name="T3">
-                <text:s/>
-                tout
-              </text:span>
-              <text:span text:style-name="T28"></text:span>
-              <text:span text:style-name="T3">
-                <text:s/>
-                m
-              </text:span>
-              <text:span text:style-name="T19">
-                oment
-              </text:span>
-              <text:span text:style-name="T28"></text:span>
-              <text:span text:style-name="T3">
-                <text:s/>
-              </text:span>
-              <text:span text:style-name="T19">
-                cette
-              </text:span>
-              <text:span text:style-name="T28"></text:span>
-              <text:span text:style-name="T3">
-                <text:s/>
-              </text:span>
-              <text:span text:style-name="T19">
-                demande
-              </text:span>
-              <text:span text:style-name="T28"></text:span>
-              <text:span text:style-name="T3">
-                <text:s/>
-              </text:span>
-              <text:span text:style-name="T19">
-                et répondre
-              </text:span>
-              <text:span text:style-name="T3"></text:span>
-              <text:span text:style-name="T19">
-                au
-              </text:span>
-              <text:span text:style-name="T3"></text:span>
-              <text:span text:style-name="T19">
-                demandeur.
-              </text:span>
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P172"/>
-        <text:p text:style-name="P157"/>
-        <text:p text:style-name="P164">
-          <draw:image draw:style-name="fr1" draw:name="Graphic20" text:anchor-type="as-char" svg:width="6.278inch" svg:height="5.4327inch" draw:z-index="13" xlink:href="#Pictures/10000000000003DC00000357EC9CDA79.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>
-        </text:p>
-        <text:p text:style-name="P142"/>
-        <text:p text:style-name="P173"/>
-        <text:p text:style-name="P157"/>
-        <text:p text:style-name="P174"/>
-        <text:p text:style-name="P175">
-          <text:span text:style-name="T19">
-            Not
-          </text:span>
-          <text:span text:style-name="T3">
-            e
-          </text:span>
-          <text:span text:style-name="T19">
-            :
-          </text:span>
-          <text:span text:style-name="T29"></text:span>
-          <text:span text:style-name="T19">
-            L’historique
-          </text:span>
-          <text:span text:style-name="T29"></text:span>
-          <text:span text:style-name="T19">
-            de
-          </text:span>
-          <text:span text:style-name="T29"></text:span>
-          <text:span text:style-name="T19">
-            la
-          </text:span>
-          <text:span text:style-name="T29"></text:span>
-          <text:span text:style-name="T19">
-            demande
-          </text:span>
-          <text:span text:style-name="T29"></text:span>
-          <text:span text:style-name="T19">
-            fai
-          </text:span>
-          <text:span text:style-name="T3">
-            t
-          </text:span>
-          <text:span text:style-name="T30">
-            <text:s/>
-          </text:span>
-          <text:span text:style-name="T19">
-            apparaître
-          </text:span>
-          <text:span text:style-name="T29"></text:span>
-          <text:span text:style-name="T19">
-            un
-          </text:span>
-          <text:span text:style-name="T29"></text:span>
-          <text:span text:style-name="T19">
-            bloc
-          </text:span>
-          <text:span text:style-name="T29"></text:span>
-          <text:span text:style-name="T19">
-            bleu
-          </text:span>
-          <text:span text:style-name="T29"></text:span>
-          <text:span text:style-name="T19">
-            (message
-          </text:span>
-          <text:span text:style-name="T29"></text:span>
-          <text:span text:style-name="T19">
-            public)
-          </text:span>
-          <text:span text:style-name="T3">
-            signifiant la date et l’évènement (
-          </text:span>
-          <text:span text:style-name="T27">
-            «
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            Un
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            responsable
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            s’est
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            désigné
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            »)
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P157"/>
-        <text:p text:style-name="P176"/>
-        <text:p text:style-name="P177">
-          <text:span text:style-name="T19">
-            L’expert1domA
-          </text:span>
-          <text:span text:style-name="T31"></text:span>
-          <text:span text:style-name="T19">
-            va
-          </text:span>
-          <text:span text:style-name="T31"></text:span>
-          <text:span text:style-name="T19">
-            créer
-          </text:span>
-          <text:span text:style-name="T31"></text:span>
-          <text:span text:style-name="T19">
-            son
-          </text:span>
-          <text:span text:style-name="T31"></text:span>
-          <text:span text:style-name="T19">
-            groupe
-          </text:span>
-          <text:span text:style-name="T31"></text:span>
-          <text:span text:style-name="T19">
-            de
-          </text:span>
-          <text:span text:style-name="T31"></text:span>
-          <text:span text:style-name="T19">
-            trav
-          </text:span>
-          <text:span text:style-name="T3">
-            a
-          </text:span>
-          <text:span text:style-name="T19">
-            il
-          </text:span>
-          <text:span text:style-name="T31"></text:span>
-          <text:span text:style-name="T19">
-            en
-          </text:span>
-          <text:span text:style-name="T31"></text:span>
-          <text:span text:style-name="T3">
-            c
-          </text:span>
-          <text:span text:style-name="T19">
-            liquant
-          </text:span>
-          <text:span text:style-name="T31"></text:span>
-          <text:span text:style-name="T19">
-            sur
-          </text:span>
-          <text:span text:style-name="T31"></text:span>
-          <text:span text:style-name="T19">
-            le
-          </text:span>
-          <text:span text:style-name="T31"></text:span>
-          <text:span text:style-name="T19">
-            bouton
-          </text:span>
-          <text:span text:style-name="T31">
-            <text:line-break/>
-          </text:span>
-          <text:span text:style-name="T3">
-            «
-          </text:span>
-          <text:span text:style-name="T19">
-            Modifier
-          </text:span>
-          <text:span text:style-name="T31"></text:span>
-          <text:span text:style-name="T19">
-            le groupe
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            de
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            travail
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            ».
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P155"/>
-        <text:p text:style-name="P154">
-          <text:span text:style-name="T19">
-            Il
-          </text:span>
-          <text:span text:style-name="T32"></text:span>
-          <text:span text:style-name="T19">
-            verra
-          </text:span>
-          <text:span text:style-name="T32"></text:span>
-          <text:span text:style-name="T19">
-            apparaître
-          </text:span>
-          <text:span text:style-name="T32"></text:span>
-          <text:span text:style-name="T19">
-            dans
-          </text:span>
-          <text:span text:style-name="T32"></text:span>
-          <text:span text:style-name="T19">
-            la
-          </text:span>
-          <text:span text:style-name="T32"></text:span>
-          <text:span text:style-name="T3">
-            c
-          </text:span>
-          <text:span text:style-name="T19">
-            olonne
-          </text:span>
-          <text:span text:style-name="T32"></text:span>
-          <text:span text:style-name="T19">
-            d
-          </text:span>
-          <text:span text:style-name="T3">
-            e
-          </text:span>
-          <text:span text:style-name="T32"></text:span>
-          <text:span text:style-name="T3">
-            gauche
-          </text:span>
-          <text:span text:style-name="T32"></text:span>
-          <text:span text:style-name="T3">
-            l’ensemble
-          </text:span>
-          <text:span text:style-name="T32"></text:span>
-          <text:span text:style-name="T3">
-            d
-          </text:span>
-          <text:span text:style-name="T19">
-            e
-          </text:span>
-          <text:span text:style-name="T3">
-            s
-          </text:span>
-          <text:span text:style-name="T32"></text:span>
-          <text:span text:style-name="T3">
-            utilisateurs
-          </text:span>
-          <text:span text:style-name="T32"></text:span>
-          <text:span text:style-name="T3">
-            du
-          </text:span>
-          <text:span text:style-name="T19">
-            groupe
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            «
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            demandes
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            » et sélectionne les personnes susceptibles de l’aider à répondre à cette demande
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P157"/>
-        <text:p text:style-name="P142"/>
-        <text:p text:style-name="P162"/>
-        <text:p text:style-name="P178">
-          <draw:image draw:style-name="fr1" draw:name="Graphic21" text:anchor-type="as-char" svg:width="6.278inch" svg:height="5.4327inch" draw:z-index="14" xlink:href="#Pictures/10000000000003DC00000357D048FA35.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>
-        </text:p>
-        <text:p text:style-name="P142"/>
-        <text:p text:style-name="P142"/>
-        <text:p text:style-name="P142"/>
-        <text:p text:style-name="P179"/>
-        <text:p text:style-name="P180">
-          <text:span text:style-name="T19">
-            Pour
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            valider,
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            cliquer
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            sur
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            «
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            Soumettre
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            la
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            requête
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            ».
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P142"/>
-        <text:p text:style-name="P181"/>
-        <text:p text:style-name="P180">
-          <text:span text:style-name="T19">
-            Not
-          </text:span>
-          <text:span text:style-name="T3">
-            e
-          </text:span>
-          <text:span text:style-name="T19">
-            :
-          </text:span>
-          <text:span text:style-name="T33"></text:span>
-          <text:span text:style-name="T3">
-            <text:s/>
-          </text:span>
-          <text:span text:style-name="T19">
-            L’historique
-          </text:span>
-          <text:span text:style-name="T33"></text:span>
-          <text:span text:style-name="T3">
-            <text:s/>
-          </text:span>
-          <text:span text:style-name="T19">
-            de
-          </text:span>
-          <text:span text:style-name="T33"></text:span>
-          <text:span text:style-name="T3">
-            <text:s/>
-          </text:span>
-          <text:span text:style-name="T19">
-            la
-          </text:span>
-          <text:span text:style-name="T33"></text:span>
-          <text:span text:style-name="T3">
-            <text:s/>
-          </text:span>
-          <text:span text:style-name="T19">
-            demande
-          </text:span>
-          <text:span text:style-name="T33"></text:span>
-          <text:span text:style-name="T3">
-            <text:s/>
-          </text:span>
-          <text:span text:style-name="T19">
-            fai
-          </text:span>
-          <text:span text:style-name="T3">
-            t
-          </text:span>
-          <text:span text:style-name="T34">
-            <text:s/>
-          </text:span>
-          <text:span text:style-name="T19">
-            apparaître
-          </text:span>
-          <text:span text:style-name="T33"></text:span>
-          <text:span text:style-name="T3">
-            <text:s/>
-          </text:span>
-          <text:span text:style-name="T19">
-            un
-          </text:span>
-          <text:span text:style-name="T33"></text:span>
-          <text:span text:style-name="T3">
-            <text:s/>
-          </text:span>
-          <text:span text:style-name="T19">
-            blo
-          </text:span>
-          <text:span text:style-name="T3">
-            c
-          </text:span>
-          <text:span text:style-name="T33"></text:span>
-          <text:span text:style-name="T3">
-            <text:s/>
-            v
-          </text:span>
-          <text:span text:style-name="T19">
-            ert
-          </text:span>
-          <text:span text:style-name="T33"></text:span>
-          <text:span text:style-name="T3">
-            <text:s/>
-          </text:span>
-          <text:span text:style-name="T19">
-            (message
-          </text:span>
-          <text:span text:style-name="T33"></text:span>
-          <text:span text:style-name="T3">
-            <text:s/>
-          </text:span>
-          <text:span text:style-name="T19">
-            privé)
-          </text:span>
-          <text:span text:style-name="T3">
-            signifiant la date et l’évènement (
-          </text:span>
-          <text:span text:style-name="T27">
-            «
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            Le groupe de travail a été modifié
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            »)
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P182"/>
-        <text:p text:style-name="P183">
-          <text:span text:style-name="T19">
-            Les personnes concernées reçoivent alors un
-          </text:span>
-          <text:span text:style-name="T35"></text:span>
-          <text:span text:style-name="T19">
-            mail
-          </text:span>
-          <text:span text:style-name="T35"></text:span>
-          <text:span text:style-name="T19">
-            leur notifiant
-          </text:span>
-          <text:span text:style-name="T36"></text:span>
-          <text:span text:style-name="T19">
-            le
-          </text:span>
-          <text:span text:style-name="T36"></text:span>
-          <text:span text:style-name="T19">
-            fait
-          </text:span>
-          <text:span text:style-name="T36"></text:span>
-          <text:span text:style-name="T19">
-            que
-          </text:span>
-          <text:span text:style-name="T36"></text:span>
-          <text:span text:style-name="T19">
-            le
-          </text:span>
-          <text:span text:style-name="T36"></text:span>
-          <text:span text:style-name="T19">
-            g
-          </text:span>
-          <text:span text:style-name="T3">
-            r
-          </text:span>
-          <text:span text:style-name="T19">
-            oupe
-          </text:span>
-          <text:span text:style-name="T36"></text:span>
-          <text:span text:style-name="T19">
-            de
-          </text:span>
-          <text:span text:style-name="T36"></text:span>
-          <text:span text:style-name="T19">
-            travail
-          </text:span>
-          <text:span text:style-name="T36"></text:span>
-          <text:span text:style-name="T19">
-            a
-          </text:span>
-          <text:span text:style-name="T36"></text:span>
-          <text:span text:style-name="T19">
-            été
-          </text:span>
-          <text:span text:style-name="T36"></text:span>
-          <text:span text:style-name="T19">
-            con
-          </text:span>
-          <text:span text:style-name="T3">
-            s
-          </text:span>
-          <text:span text:style-name="T19">
-            titu
-          </text:span>
-          <text:span text:style-name="T3">
-            é
-          </text:span>
-          <text:span text:style-name="T37">
-            <text:s/>
-          </text:span>
-          <text:span text:style-name="T19">
-            et
-          </text:span>
-          <text:span text:style-name="T36"></text:span>
-          <text:span text:style-name="T19">
-            qu’ils
-          </text:span>
-          <text:span text:style-name="T36"></text:span>
-          <text:span text:style-name="T19">
-            sont
-          </text:span>
-          <text:span text:style-name="T36"></text:span>
-          <text:span text:style-name="T19">
-            in
-          </text:span>
-          <text:span text:style-name="T3">
-            v
-          </text:span>
-          <text:span text:style-name="T19">
-            ités
-          </text:span>
-          <text:span text:style-name="T36"></text:span>
-          <text:span text:style-name="T19">
-            à
-          </text:span>
-          <text:span text:style-name="T36"></text:span>
-          <text:span text:style-name="T19">
-            y
-          </text:span>
-          <text:span text:style-name="T3">
-            participer.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P142"/>
-        <text:p text:style-name="P180">
-          <text:span text:style-name="T19">
-            Chaque
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            membre
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            du
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            groupe
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            peut poster des commentaires
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            privés
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            et
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            publics afin de faire avancer la réponse à la demande de façon collaborative.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P184"/>
-        <text:p text:style-name="P185">
-          <text:span text:style-name="T19">
-            L’expert1domA
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            poste
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            la
-          </text:span>
-          <text:span text:style-name="T3"></text:span>
-          <text:span text:style-name="T19">
-            réponse à la demande dès qu’il estime que cette dernière est prête :
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P186"/>
-        <text:p text:style-name="P187"/>
-        <text:p text:style-name="P188">
-          <draw:image draw:style-name="fr1" draw:name="Graphic22" text:anchor-type="as-char" svg:width="6.3091inch" svg:height="5.528inch" draw:z-index="15" xlink:href="#Pictures/10000000000003E100000366B10AC83D.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>
-        </text:p>
-        <text:p text:style-name="P189">
-          Le demandeur est alors prévenu et peut décider de ré-ouvrir la demande si il n’est pas satisfait de la réponse. Passé un délai de 1 mois, la demande passe en état « archive » :
-        </text:p>
-        <text:p text:style-name="P188"/>
-        <text:p text:style-name="P190"/>
-        <text:p text:style-name="P191">
-          <draw:image draw:style-name="fr1" draw:name="Graphic23" text:anchor-type="as-char" svg:width="5.2134inch" svg:height="3.9634inch" draw:z-index="16" xlink:href="#Pictures/10000000000003E9000002F9E9CE7454.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>
-        </text:p>
-        <text:p text:style-name="P142"/>
-        <text:p text:style-name="P192"/>
-        <text:p text:style-name="P142"/>
-        <text:p text:style-name="P136">
-          Exemples d’interfaces
-        </text:p>
-        <text:p text:style-name="P130"/>
-        <text:p text:style-name="P193">
-          Mise en action / en suspens des process déclarés vers l’application de destination :
-        </text:p>
-        <text:p text:style-name="P130"/>
-        <text:p text:style-name="P130"/>
-        <text:p text:style-name="P19">
-          <draw:image draw:style-name="fr1" draw:name="Graphic24" text:anchor-type="as-char" svg:width="6.2925inch" svg:height="6.5772inch" draw:z-index="17" xlink:href="#Pictures/100000000000031D0000034100BE851B.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>
-        </text:p>
-        <text:p text:style-name="P19"/>
-        <text:p text:style-name="P19"/>
-        <text:p text:style-name="P19"/>
-        <text:p text:style-name="P19"/>
-        <text:p text:style-name="P194"/>
-        <text:p text:style-name="P195">
-          Interface de monitoring
-        </text:p>
-        <text:p text:style-name="P130"/>
-        <text:p text:style-name="P130"/>
-        <text:p text:style-name="P130">
-          <draw:image draw:style-name="fr1" draw:name="Graphic25" text:anchor-type="as-char" svg:width="6.2972inch" svg:height="6.0465inch" draw:z-index="18" xlink:href="#Pictures/100000000000038900000365D27C418F.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>
-        </text:p>
-        <text:p text:style-name="P130"/>
-        <text:p text:style-name="P131"/>
-        <text:p text:style-name="P193">
-          Monitoring d’un process sélectionné 
-        </text:p>
-        <text:p text:style-name="P193"/>
-        <text:p text:style-name="P193"/>
-        <text:p text:style-name="P196">
-          <draw:image draw:style-name="fr1" draw:name="Graphic26" text:anchor-type="as-char" svg:width="5.4146inch" svg:height="7.7244inch" draw:z-index="19" xlink:href="#Pictures/10000000000002EC0000042B0D22739E.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>
-        </text:p>
-        <text:p text:style-name="P197">
-          <draw:image draw:style-name="fr1" draw:name="Graphic27" text:anchor-type="as-char" svg:width="5.5409inch" svg:height="9.7244inch" draw:z-index="20" xlink:href="#Pictures/10000000000003DB000006C488355CF1.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>
-        </text:p>
-        <text:p text:style-name="P197"/>
-        <text:p text:style-name="P193">
-          Export BPML
-        </text:p>
-        <text:p text:style-name="P193"/>
-        <text:p text:style-name="P46"/>
-        <text:p text:style-name="P130">
-          <draw:image draw:style-name="fr1" draw:name="Graphic28" text:anchor-type="as-char" svg:width="5.3756inch" svg:height="6.948inch" draw:z-index="21" xlink:href="#Pictures/100000000000038000000486B5641CAA.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>
-        </text:p>
-        <text:p text:style-name="P130"/>
-        <text:p text:style-name="P46"/>
-        <text:p text:style-name="P3"/>
-        <text:p text:style-name="P3"/>
-        <text:p text:style-name="P3"/>
-        <text:p text:style-name="P3"/>
-        <text:p text:style-name="P3"/>
-        <text:p text:style-name="P3"/>
-        <text:p text:style-name="P3"/>
-        <text:p text:style-name="P3"/>
-        <text:p text:style-name="P3"/>
-        <text:ordered-list text:style-name="WW8Num35" text:continue-numbering="true">
-          <text:list-item>
-            <text:p text:style-name="P8">
-              Gestion des formulaires sur les portails (type formulaire d’enquête)
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P35">
-          Décrire précisément la solution qui sera retenue pour générer, paramétrer et publier des formulaires, y compris dans l
-&apos;
-          exploitation des données qui seront saisies par les utilisateurs.
-        </text:p>
-        <text:p text:style-name="P32">
-          La proposition de Capgemini n’intègre pas de composants permettant de gérer des formulaires. Néanmoins, cette fonctionnalité est prévue dans Jahia. Un client développe en mode collaboratif ce composant.
-        </text:p>
-        <text:p text:style-name="P35"/>
-        <text:p text:style-name="P3"/>
-        <text:ordered-list text:style-name="WW8Num35" text:continue-numbering="true">
-          <text:list-item>
-            <text:p text:style-name="P8">
-              Gestion des droits des internautes sur le portail
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P198">
-          Pourra-t-on auditer les droits (et éventuellement les accès) des utilisateurs déclarés sur le portail?
-        </text:p>
-        <text:p text:style-name="P199">
-          Capgemini intègre un export des droits d’un site (utilisateur/droits).
-        </text:p>
-        <text:p text:style-name="P198"/>
-        <text:p text:style-name="P200"/>
-        <text:ordered-list text:style-name="WW8Num35" text:continue-numbering="true">
-          <text:list-item>
-            <text:p text:style-name="P8">
-              Administration des portails Jahia sur Internet
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P37">
-          Le portail est administrable à travers le protocole http.
-        </text:p>
-        <text:p text:style-name="P37">
-          Néanmoins, l
-&apos;
-          instance installée sur Internet reste-t-elle administrable à partir de l’Internet ? Dans le prototype, l’accès aux outils d’administration du portail est réalisé à partir d’un contrôle de login / mot de passe. Ce type de contrôle est insuffisant en production.
-        </text:p>
-        <text:p text:style-name="P37">
-          Comment l’intégrateur est-il en mesure de garantir que les outils d’administration des outils ne seront pas attaqués ? Est-il prévu des contrôles autre que des accès protégés par login / mot de passe (accès par adresse et port TCP/IP séparée) ?
-        </text:p>
-        <text:p text:style-name="P37">
-          Il est
-          <text:s/>
-          demandé au prestataire de préciser les moyens empêchant l
-&apos;
-          accès via Internet aux interfaces d
-&apos;
-          administration.
-        </text:p>
-        <text:p text:style-name="P37"/>
-        <text:p text:style-name="P37">
-          <text:span text:style-name="T3">
-            Les fonctions d’administrations sont retirées de l’instance Jahia sur Internet (voir question 21).
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P37"/>
-        <text:p text:style-name="P37"/>
-        <text:p text:style-name="P37"/>
-        <text:p text:style-name="P37"/>
-        <text:p text:style-name="P37"/>
-        <text:p text:style-name="P37"/>
-        <text:p text:style-name="P37"/>
-        <text:p text:style-name="P37"/>
-        <text:p text:style-name="P37"/>
-        <text:p text:style-name="P37"/>
-        <text:p text:style-name="P37"/>
-        <text:p text:style-name="P37"/>
-        <text:p text:style-name="P37"/>
-        <text:p text:style-name="P37"/>
-        <text:p text:style-name="P37"/>
-        <text:p text:style-name="P37"/>
-        <text:p text:style-name="P37"/>
-        <text:p text:style-name="P37"/>
-        <text:p text:style-name="P37"/>
-        <text:ordered-list text:style-name="WW8Num35" text:continue-numbering="true">
-          <text:list-item>
-            <text:p text:style-name="P8">
-              Gestion du portail Internet
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P37">
-          La modification de structure est-elle faite par l’outil d’administration du portail Internet en s’adressant à la bonne instance de portail ou est-elle faite à partir du portail intranet ?
-        </text:p>
-        <text:p text:style-name="P201"/>
-        <text:p text:style-name="P41">
-          La modification de structure n’est pas faite uniquement par l’outil d’administration.
-        </text:p>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P37">
-          <text:span text:style-name="T3">
-            Les modifications de structures qui sont réalisées sur le portail intranet sont répliquées sur le portail Internet automatiquement : nouvelle page, nouvelle rubrique, nouveau sous site, nouveau groupe, nouvelle catégorie …
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P41"/>
-        <text:p text:style-name="P37">
-          <text:span text:style-name="T3">
-            Les modifications de structures qui nécessitent la mise à jour du logiciel (corrections Java, nouveau template – JSP, nouvelle application Java) sont réalisées grâce à un processus traditionnel de livraison d’un patch en pré production puis en production.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P37"/>
-        <text:p text:style-name="P37">
-          Question complémentaire : si la modification de structure est faite à partir de l’outil d’administration du portail Internet et que le ‘rubriquage’ est en partie géré dans la gestion de contenu intranet, comment se fait la synchronisation entre la structure définie sur le portail Internet et la gestion de contenu qui se trouve sur intranet (sachant que les flux entrants de l’Internet sont interdits).
-        </text:p>
-        <text:p text:style-name="P37"/>
-        <text:p text:style-name="P41">
-          Les modifications de structures ne sont pas faites à partir de l’outil d’administration du portail Internet.
-        </text:p>
-        <text:p text:style-name="P200"/>
-        <text:p text:style-name="P200">
-          <draw:g text:anchor-type="paragraph" draw:z-index="84" draw:style-name="gr11">
-            <draw:g draw:style-name="gr12">
-              <draw:line draw:style-name="gr13" draw:text-style-name="P202" svg:x1="1.25inch" svg:y1="1.2335inch" svg:x2="2.75inch" svg:y2="1.9835inch"/>
-              <draw:text-box draw:style-name="gr14" draw:text-style-name="P124" svg:width="1.1256inch" svg:height="0.5008inch" svg:x="0.25inch" svg:y="0.9835inch">
-                <text:p text:style-name="P124">
-                  <text:span text:style-name="T15">
-                    Flux IZ2
-                  </text:span>
-                </text:p>
-              </draw:text-box>
-            </draw:g>
-            <draw:line draw:style-name="gr13" draw:text-style-name="P202" svg:x1="1.25inch" svg:y1="2.3587inch" svg:x2="2.6252inch" svg:y2="2.2335inch"/>
-            <draw:text-box draw:style-name="gr15" draw:text-style-name="P124" svg:width="1.6256inch" svg:height="1.2508inch" svg:x="0.1252inch" svg:y="2.1063inch">
-              <text:p text:style-name="P124">
-                <text:span text:style-name="T15">
-                  Y a-t-il des flux directs pour gérer le portail ?
-                </text:span>
-              </text:p>
-              <text:p text:style-name="P124">
-                <text:span text:style-name="T15">
-                  Lesquels ? pour faire quoi
-                </text:span>
-              </text:p>
-            </draw:text-box>
-          </draw:g>
-          <draw:image draw:style-name="fr1" draw:name="Graphic29" text:anchor-type="as-char" svg:width="6.2909inch" svg:height="4.7598inch" draw:z-index="22" xlink:href="#Pictures/100000000000025C000001C9FDD56CAC.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>
-        </text:p>
-        <text:p text:style-name="P200"/>
-        <text:p text:style-name="P200">
-          Il convient de préciser s’il existe des flux dans la zone Internet sur le portail et pour faire quoi.
-        </text:p>
-        <text:p text:style-name="P200">
-          <text:span text:style-name="T38">
-            Toutes les actions
-          </text:span>
-          de gestion du portail Internet et de sites associés sont-elles réalisées à partir de l’instance Jahia intranet ? Si non préciser, les limites ?
-        </text:p>
-        <text:p text:style-name="P200"/>
-        <text:p text:style-name="P37">
-          <text:span text:style-name="T3">
-            Les actions de gestion du portail Internet sont réalisées depuis l’intranet à l’exception des :
-          </text:span>
-        </text:p>
-        <text:unordered-list text:style-name="WW8Num38">
-          <text:list-item>
-            <text:p text:style-name="P203">
-              modifications de structures qui nécessitent la mise à jour du logiciel (corrections Java, nouveau template – JSP, nouvelle application Java) sont réalisées grâce à un processus traditionnel de livraison d’un patch en pré-production puis en production.
-            </text:p>
-          </text:list-item>
-          <text:list-item>
-            <text:p text:style-name="P203">
-              actions d’administrations (sauvegardes, purges).
-            </text:p>
-          </text:list-item>
-        </text:unordered-list>
-        <text:p text:style-name="P204"/>
-        <text:p text:style-name="P200"/>
-        <text:p text:style-name="P200"/>
-        <text:p text:style-name="P200"/>
-        <text:ordered-list text:style-name="WW8Num35" text:continue-numbering="true">
-          <text:list-item>
-            <text:p text:style-name="P8">
-              <text:span text:style-name="T10">
-                (nouveau)
-              </text:span>
-              Préciser par rapport au calendrier du projet la date de début de la période de maintenance annuelle des progiciels et notamment par rapport à la VSR du projet.
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P37">
-          <text:span text:style-name="T3">
-            Effectivement les coûts de maintenances de Jahia sont prévus à l’issue de la VSR.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P41">
-          Durant la phase de développement du projet, le support de Jahia est directement réalisé au travers de l’intégration au projet en temps que sous-traitant.
-        </text:p>
-        <text:p text:style-name="P41">
-          Le poste 12 utile au projet du bordereau de prix est modifié en conséquence.
-        </text:p>
-        <text:p text:style-name="P9"/>
-        <text:ordered-list text:style-name="WW8Num35" text:continue-numbering="true">
-          <text:list-item>
-            <text:p text:style-name="P8">
-              <text:span text:style-name="T10">
-                (nouveau)
-              </text:span>
-              <text:span text:style-name="T11">
-                Le Minefi fournira des explications sur la définition des syntaxes de recherche (cf annexe)
-              </text:span>
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P205">
-          Cap Gemini indiquera s’il peut s
-&apos;
-          engager à accompagner le Minefi dans le domaine fonctionnel de la mise en place des moteurs de recherche.
-        </text:p>
-        <text:p text:style-name="P205"/>
-        <text:p text:style-name="P37">
-          <text:span text:style-name="T3">
-            Le moteur Lucerne accompagné du Thésaurus permet une grande souplesse de mise en œuvre.
-            <text:s/>
-            Capgemini propose qu’à l’issue de la mise en place des portails une enquête soit réalisée permettant de modifier le paramétrage du moteur de recherche en fonction des retours des utilisateurs.
-          </text:span>
-        </text:p>
-        <text:p text:style-name="P37"/>
-        <text:p text:style-name="P206">
-           
-        </text:p>
-        <text:p text:style-name="P207"/>
-        <text:ordered-list text:style-name="WW8Num35" text:continue-numbering="true">
-          <text:list-item>
-            <text:p text:style-name="P8">
-              <text:span text:style-name="T10">
-                (nouveau)
-              </text:span>
-              <text:span text:style-name="T11">
-                Le tableau des prix des unités d’œuvre du paragraphe 5.3.1.1 est modifié par l
-&apos;
-                ajout de 3 colonnes (10 pages, 50 pages, 200 pages). Il devient :
-              </text:span>
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P208"/>
-        <table:table table:name="Table11" table:style-name="Table11">
-          <table:table-column table:style-name="Table11.A"/>
-          <table:table-column table:style-name="Table11.B" table:number-columns-repeated="2"/>
-          <table:table-column table:style-name="Table11.D"/>
-          <table:table-row>
-            <table:table-cell table:style-name="Table11.A1" table:value-type="string">
-              <text:p text:style-name="P86">
-                Reprise d’un site statique
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:number-columns-spanned="3">
-              <table:sub-table>
-                <table:table-column table:style-name="Table11.B" table:number-columns-repeated="2"/>
-                <table:table-column table:style-name="Table11.D"/>
-                <table:table-row>
-                  <table:table-cell table:style-name="Table11.B1.1.1" table:number-columns-spanned="3" table:value-type="string">
-                    <text:p text:style-name="P2">
-                      Coût unitaire (Euros HT)
-                    </text:p>
-                  </table:table-cell>
-                  <table:covered-table-cell/>
-                  <table:covered-table-cell/>
-                </table:table-row>
-                <table:table-row>
-                  <table:table-cell table:style-name="Table11.B1.1.2" table:value-type="string">
-                    <text:p text:style-name="P2">
-                      Pour 10 pages
-                    </text:p>
-                  </table:table-cell>
-                  <table:table-cell table:style-name="Table11.B1.1.2" table:value-type="string">
-                    <text:p text:style-name="P2">
-                      Pour 50 pages
-                    </text:p>
-                  </table:table-cell>
-                  <table:table-cell table:style-name="Table11.B1.3.2" table:value-type="string">
-                    <text:p text:style-name="P2">
-                      Pour 200 pages
-                    </text:p>
-                  </table:table-cell>
-                </table:table-row>
-              </table:sub-table>
-            </table:table-cell>
-            <table:covered-table-cell/>
-            <table:covered-table-cell/>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table11.B1.1.2" table:value-type="string">
-              <text:p text:style-name="P86">
-                Page simple : uniquement de l’information
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table11.B1.1.2" table:value-type="string">
-              <text:p text:style-name="P86"/>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table11.B1.1.2" table:value-type="string">
-              <text:p text:style-name="P86"/>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table11.B1.3.2" table:value-type="string">
-              <text:p text:style-name="P86"/>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table11.B1.1.2" table:value-type="string">
-              <text:p text:style-name="P86">
-                Page complexe : information, 8 images ou liens relatifs au maximum
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table11.B1.1.2" table:value-type="string">
-              <text:p text:style-name="P86"/>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table11.B1.1.2" table:value-type="string">
-              <text:p text:style-name="P86"/>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table11.B1.3.2" table:value-type="string">
-              <text:p text:style-name="P86"/>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table11.B1.1.2" table:value-type="string">
-              <text:p text:style-name="P86">
-                Page très complexe : information, plus de 8 images ou liens relatifs au maximum
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table11.B1.1.2" table:value-type="string">
-              <text:p text:style-name="P86"/>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table11.B1.1.2" table:value-type="string">
-              <text:p text:style-name="P86"/>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table11.B1.3.2" table:value-type="string">
-              <text:p text:style-name="P86"/>
-            </table:table-cell>
-          </table:table-row>
-        </table:table>
-        <text:p text:style-name="P209">
-          Intégré.
-        </text:p>
-        <text:p text:style-name="P86">
-            
-        </text:p>
-        <text:ordered-list text:style-name="WW8Num35" text:continue-numbering="true">
-          <text:list-item>
-            <text:p text:style-name="P8">
-              <text:span text:style-name="T10">
-                (nouveau)
-              </text:span>
-              <text:span text:style-name="T11">
-                décrire les outils de back office pour la gestion et/ ou les portails qui seront proposés (exemple : rechercher les documents qui ne publiés dans aucun site, rechercher les documents qui ont plus de deux ans.
-              </text:span>
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P208"/>
-        <text:p text:style-name="P13">
-          <text:span text:style-name="T39">
-            Capgemini propose d’intégrer un agent de la DPMA qui peut développer ces fonctionnalités d’exploration des contenus de Jahia.
-          </text:span>
-        </text:p>
-        <text:ordered-list text:style-name="WW8Num35" text:continue-numbering="true">
-          <text:list-item>
-            <text:p text:style-name="P11">
-              Annexes
-            </text:p>
-          </text:list-item>
-        </text:ordered-list>
-        <text:p text:style-name="P3"/>
-        <text:p text:style-name="P3">
-          <draw:image draw:style-name="fr1" draw:name="Graphic30" text:anchor-type="as-char" svg:width="6.3inch" svg:height="4.5354inch" draw:z-index="23" xlink:href="#Pictures/100000000000032000000240A196A631.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>
-        </text:p>
-        <text:p text:style-name="P210">
-          Tableau de synthèse Méta-données
-        </text:p>
-        <text:p text:style-name="P211">
-          (document non validé)
-        </text:p>
-        <text:p text:style-name="P212"/>
-        <text:p text:style-name="P212"/>
-        <table:table table:name="Table12" table:style-name="Table12">
-          <table:table-column table:style-name="Table12.A"/>
-          <table:table-column table:style-name="Table12.B"/>
-          <table:table-column table:style-name="Table12.C"/>
-          <table:table-row>
-            <table:table-cell table:style-name="Table12.A1" table:value-type="string">
-              <text:h text:style-name="P213" text:level="1">
-                Méta-données
-              </text:h>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table12.A1" table:value-type="string">
-              <text:p text:style-name="P214">
-                Obligatoire/facultatif
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table12.C1" table:value-type="string">
-              <text:p text:style-name="P214">
-                commentaires
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table12.A2" table:value-type="string">
-              <text:p text:style-name="P215">
-                Date de création
-              </text:p>
-              <text:p text:style-name="P215"/>
-              <text:h text:style-name="P213" text:level="1"/>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table12.A2" table:value-type="string">
-              <text:p text:style-name="P214">
-                Obligatoire
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table12.C2" table:value-type="string">
-              <text:p text:style-name="P216"/>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table12.A2" table:value-type="string">
-              <text:p text:style-name="P215">
-                Date de publication
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table12.A2" table:value-type="string">
-              <text:p text:style-name="P214">
-                Obligatoire
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table12.C2" table:value-type="string">
-              <text:p text:style-name="P216">
-                cette date sera affichée par défaut avec la date du jour, modifiable par le contributeur. Cette date pourra être utilisée comme date prévisionnelle de publication
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table12.A2" table:value-type="string">
-              <text:p text:style-name="P215">
-                Date de modification
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table12.A2" table:value-type="string">
-              <text:p text:style-name="P214">
-                Obligatoire
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table12.C2" table:value-type="string">
-              <text:p text:style-name="P216">
-                cette date sera renseignée par défaut par la date système. Elle devra être modifiable par le contributeur. Le fait d’afficher cette date sur la page devra être spécifiée (case à cocher) par le contributeur.
-              </text:p>
-              <text:p text:style-name="P216"/>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table12.A2" table:value-type="string">
-              <text:p text:style-name="P215">
-                Date de fin de publication
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table12.A2" table:value-type="string">
-              <text:p text:style-name="P214">
-                Facultatif/obligatoire
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table12.C2" table:value-type="string">
-              <text:p text:style-name="P217">
-                tout ce qui est événementielle comme par exemple « le printemps des poètes , la déclaration de l’impôt.. » auront une date de fin de publication facile à définir.
-              </text:p>
-              <text:p text:style-name="P217">
-                Pour toutes les autres rubriques , ce sera le responsable éditorial qui devra gérer cette fin de publication .
-              </text:p>
-              <text:p text:style-name="P217"/>
-              <text:p text:style-name="P218">
-                <text:span text:style-name="T7">
-                  La
-                  <text:s/>
-                  date de fin de publication sera attachée non pas au document mais à la rubrique .En effet un document budgétaire peut être publié soit dans l’actualité (événement) soit dans une rubrique budget. En fonction de la rubrique, la date de fin de publication est donc différente. La date de fin de publication sera affichée par défaut modifiable par le responsable éditorial
-                </text:span>
-              </text:p>
-              <text:p text:style-name="P216"/>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table12.A2" table:value-type="string">
-              <text:p text:style-name="P215">
-                Date de révision
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table12.A2" table:value-type="string">
-              <text:p text:style-name="P214">
-                Facultative/obligatoire
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table12.C2" table:value-type="string">
-              <text:unordered-list text:style-name="WW8Num42">
-                <text:list-item>
-                  <text:p text:style-name="P219">
-                    une date de prochaine révision
-                    <text:s/>
-                    sera obligatoire pour tous les documents sauf pour les événements . Elle sera
-                    <text:s/>
-                    affichée par défaut (même date suivant la typologie des documents). Cette date sera une alerte pour le responsable éditorial qui pourra consulter tous les documents devant être « révisés c’est à dire doit il rester en ligne ? si non mettre une date de fin de publication )
-                  </text:p>
-                </text:list-item>
-              </text:unordered-list>
-              <text:p text:style-name="P220"/>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table12.A2" table:value-type="string">
-              <text:p text:style-name="P221">
-                Date de soumission
-                <text:s/>
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table12.A2" table:value-type="string">
-              <text:p text:style-name="P222"/>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table12.C2" table:value-type="string">
-              <text:p text:style-name="P220">
-                Non retenue
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table12.A2" table:value-type="string">
-              <text:p text:style-name="P223">
-                <text:s text:c="2"/>
-                -title
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table12.A2" table:value-type="string">
-              <text:p text:style-name="P222">
-                obligatoire
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table12.C2" table:value-type="string">
-              <text:p text:style-name="P220">
-                <text:s/>
-                Il a été décidé de faire remplir directement par le rédacteur à partir du formulaire de l’outil de gestion de contenu, une zone
-&quot;
-                Title
-&quot;
-                différenciée de la rubrique titre du document. Une règle de gestion a été définie : la zone title affichera par défaut le titre du document préalablement saisi, la date de création du document et la typologie du document.
-              </text:p>
-              <text:p text:style-name="P222"/>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table12.A2" table:value-type="string">
-              <text:p text:style-name="P222">
-                Description
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table12.A2" table:value-type="string">
-              <text:p text:style-name="P222">
-                <text:s/>
-                obligatoire en fonction typologies des documents
-                <text:s/>
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table12.C2" table:value-type="string">
-              <text:p text:style-name="P223">
-                elle sera obligatoire en fonction de la typologie du document (une brève pas de résumé , un rapport obligatoire).
-              </text:p>
-              <text:p text:style-name="P220"/>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table12.A2" table:value-type="string">
-              <text:p text:style-name="P222">
-                Mots clés
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table12.A2" table:value-type="string">
-              <text:p text:style-name="P222">
-                Obligatoire
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table12.C2" table:value-type="string">
-              <text:p text:style-name="P223">
-                les thésaurus ne seront pas utilisés . les mots clés seront automatiquement créés à partir du plan de classement (cumul de toutes les arborescences)
-              </text:p>
-              <text:p text:style-name="P222"/>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table12.A2" table:value-type="string">
-              <text:p text:style-name="P222">
-                Typologie des documents
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table12.A2" table:value-type="string">
-              <text:p text:style-name="P222">
-                Obligatoire
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table12.C2" table:value-type="string">
-              <text:p text:style-name="P222">
-                Normalement une typologie
-                <text:s/>
-                correspond à un gabarit . En fonction de la liste où environ 50 typologies sont prévues , une étude sur la portée sémantique devra être réalisée pour regrouper plusieurs typologies à un formulaire de saisie.
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table12.A2" table:value-type="string">
-              <text:p text:style-name="P222">
-                Créateur/auteur
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table12.A2" table:value-type="string">
-              <text:p text:style-name="P222">
-                Facultatif
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table12.C2" table:value-type="string">
-              <text:p text:style-name="P222">
-                cela correspond au nom de la personne ou propriétaire à l’origine de l’information. Sur Internet le Sircom ne souhaite pas avoir cette information là. Sur Intranet, cette information pourrait être affichée dans la page
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table12.A2" table:value-type="string">
-              <text:p text:style-name="P222">
-                Méta langage
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table12.A2" table:value-type="string">
-              <text:p text:style-name="P222">
-                Obligatoire
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table12.C2" table:value-type="string">
-              <text:p text:style-name="P220">
-                Il est décidé de mettre par défaut « Français » avec possibilité de modifier la valeur.
-              </text:p>
-              <text:p text:style-name="P222"/>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table12.A2" table:value-type="string">
-              <text:p text:style-name="P222">
-                Méta droits
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table12.A2" table:value-type="string">
-              <text:p text:style-name="P222">
-                Obligatoire
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table12.C2" table:value-type="string">
-              <text:p text:style-name="texte">
-                <text:span text:style-name="T7">
-                  Pour tous les documents qu’ils soient sur Intranet/Internet, seront renseignés automatiquement avec un copy right.
-                </text:span>
-              </text:p>
-              <text:p text:style-name="P222"/>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table12.A2" table:value-type="string">
-              <text:p text:style-name="P222">
-                Méta couverture
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table12.A2" table:value-type="string">
-              <text:p text:style-name="P222">
-                ?
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table12.C2" table:value-type="string">
-              <text:p text:style-name="P220">
-                Deux possibilités ont été présentées :
-              </text:p>
-              <text:p text:style-name="P220">
-                La saisie dans le formulaire de la couverture géographique
-                <text:s/>
-                sera renseignée
-                <text:s/>
-                mais il s’afficherait dans les métas - keyword
-                <text:tab-stop/>
-                <text:tab-stop/>
-              </text:p>
-              <text:p text:style-name="P220">
-                La saisie se ferait dans une zone méta-couverture spécifique
-              </text:p>
-              <text:p text:style-name="P222"/>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table12.A2" table:value-type="string">
-              <text:p text:style-name="P222">
-                Editeur
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table12.A2" table:value-type="string">
-              <text:p text:style-name="P222">
-                Facultatif
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table12.C2" table:value-type="string">
-              <text:p text:style-name="P222">
-                personne qui publie. Sur l’internet dans tous les cas il faudra renseigner par défaut : éditeur = minéfi-Sircom ; pour intranet cette information n’est pas utile
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-        </table:table>
-        <text:p text:style-name="P224"/>
-        <text:p text:style-name="Standard">
-          <text:s text:c="2"/>
-        </text:p>
-        <text:p text:style-name="P225">
-          Syntaxe d
-&apos;
-          interrogation
-        </text:p>
-        <table:table table:name="Table13" table:style-name="Table13">
-          <table:table-column table:style-name="Table13.A"/>
-          <table:table-column table:style-name="Table13.B"/>
-          <table:table-row>
-            <table:table-cell table:style-name="Table13.A1" table:value-type="string">
-              <text:p text:style-name="Standard">
-                Recherche approchée / recherche floue
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table13.B1" table:value-type="string">
-              <text:p text:style-name="Standard">
-                Recherche élargie :
-&quot;
-                adminstration
-&quot;
-                cherche
-&quot;
-                Administration
-&quot;
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table13.A2" table:value-type="string">
-              <text:p text:style-name="Standard">
-                Recherche phonétique
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table13.B2" table:value-type="string">
-              <text:p text:style-name="Standard">
-&quot;
-                contrefasson
-&quot;
-                cherche
-&quot;
-                contrefaçon
-&quot;
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table13.A2" table:value-type="string">
-              <text:p text:style-name="Standard">
-                Expressions exacte
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table13.B2" table:value-type="string">
-              <text:p text:style-name="Standard"/>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table13.A2" table:value-type="string">
-              <text:p text:style-name="Standard">
-                Masque de recherche
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table13.B2" table:value-type="string">
-              <text:p text:style-name="Standard">
-&quot;
-                ele.*t cherche les mots commençant par ele et finissant par t
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table13.A2" table:value-type="string">
-              <text:p text:style-name="Standard">
-                Troncature limitée / illimitée
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table13.B2" table:value-type="string">
-              <text:p text:style-name="Standard">
-&quot;
-                Impo?
-&quot;
-                cherche
-&quot;
-                Impot
-&quot;
-              </text:p>
-              <text:p text:style-name="Standard">
-&quot;
-                Cors*
-&quot;
-                cherche
-&quot;
-                Corse
-&quot;
-                ,
-&quot;
-                Corsica
-&quot;
-                ,
-&quot;
-                Corsaire
-&quot;
-                …
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table13.A2" table:value-type="string">
-              <text:p text:style-name="Standard">
-                Correction orthographique
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table13.B2" table:value-type="string">
-              <text:p text:style-name="Standard">
-                Proposition d
-&apos;
-                une orthographe alternative
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table13.A2" table:value-type="string">
-              <text:p text:style-name="Standard">
-                Lemmatisation
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table13.B2" table:value-type="string">
-              <text:p text:style-name="Standard">
-                Analyse de la racine des termes :
-&quot;
-                cheval
-&quot;
-                cherche
-&quot;
-                chevaux
-&quot;
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table13.A2" table:value-type="string">
-              <text:p text:style-name="Standard">
-                Combinaison des fonctionnalités
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table13.B2" table:value-type="string">
-              <text:p text:style-name="Standard">
-                Recherche phonétique approchée, Recherche par masque approchée, recherche par masque + troncature
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-        </table:table>
-        <text:p text:style-name="Standard"/>
-        <text:h text:style-name="Heading 1" text:level="1">
-          Personnalisation
-        </text:h>
-        <table:table table:name="Table14" table:style-name="Table14">
-          <table:table-column table:style-name="Table14.A"/>
-          <table:table-column table:style-name="Table14.B"/>
-          <table:table-row>
-            <table:table-cell table:style-name="Table14.A1" table:value-type="string">
-              <text:p text:style-name="Standard">
-                Thesaurus / dictionnaires
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table14.B1" table:value-type="string">
-              <text:p text:style-name="Standard">
-                Addition à la recherche plein texte
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table14.A2" table:value-type="string">
-              <text:p text:style-name="Standard">
-                Recherche sur champs
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table14.B2" table:value-type="string">
-              <text:p text:style-name="Standard">
-                Recherche sur des champs spécifiques (champs auteur, résumé, mots-clefs, titre…)
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-        </table:table>
-        <text:p text:style-name="Standard"/>
-        <text:h text:style-name="Heading 1" text:level="1">
-          Pondération des résultats
-        </text:h>
-        <table:table table:name="Table15" table:style-name="Table15">
-          <table:table-column table:style-name="Table15.A"/>
-          <table:table-column table:style-name="Table15.B"/>
-          <table:table-row>
-            <table:table-cell table:style-name="Table15.A1" table:value-type="string">
-              <text:p text:style-name="Standard">
-                Adéquation requête / document
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table15.B1" table:value-type="string">
-              <text:p text:style-name="Standard"/>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table15.A2" table:value-type="string">
-              <text:p text:style-name="Standard"/>
-            </table:table-cell>
-            <table:table-cell>
-              <table:sub-table>
-                <table:table-column table:style-name="Table15.B2.1"/>
-                <table:table-row>
-                  <table:table-cell table:style-name="Table15.B2.1.1" table:value-type="string">
-                    <text:p text:style-name="Standard">
-                      Opérateur de proximité par défaut
-                      <text:s/>
-                      : les documents qui contiennent les mots de la requête les plus proches les uns des autres sont favorisés
-                    </text:p>
-                  </table:table-cell>
-                </table:table-row>
-                <table:table-row>
-                  <table:table-cell table:style-name="Table15.B2.1.2" table:value-type="string">
-                    <text:p text:style-name="Standard">
-                      Les formes exactes sont favorisées par rapport aux formes lemmatisées
-                    </text:p>
-                  </table:table-cell>
-                </table:table-row>
-                <table:table-row>
-                  <table:table-cell table:style-name="Table15.B2.1.2" table:value-type="string">
-                    <text:p text:style-name="Standard">
-                      Définition d
-&apos;
-                      un espacement maximum entre les mots de la requête
-                    </text:p>
-                  </table:table-cell>
-                </table:table-row>
-              </table:sub-table>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table15.A3" table:value-type="string">
-              <text:p text:style-name="Standard">
-                Champs sur-pondérés
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table15.B2.1.2" table:value-type="string">
-              <text:p text:style-name="Standard"/>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table15.A3" table:value-type="string">
-              <text:p text:style-name="Standard"/>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table15.B2.1.2" table:value-type="string">
-              <text:p text:style-name="Standard">
-                Les champs dont la pondération est supérieure à celle du texte sont paramétrables (par défaut : titre)
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table15.A3" table:value-type="string">
-              <text:p text:style-name="Standard">
-                Indice de popularité (ranking)
-              </text:p>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table15.B2.1.2" table:value-type="string">
-              <text:p text:style-name="Standard"/>
-            </table:table-cell>
-          </table:table-row>
-          <table:table-row>
-            <table:table-cell table:style-name="Table15.A3" table:value-type="string">
-              <text:p text:style-name="Standard"/>
-            </table:table-cell>
-            <table:table-cell table:style-name="Table15.B2.1.2" table:value-type="string">
-              <text:p text:style-name="Standard">
-                Classement des documents en fonction du nombre de lien pointant vers la page.
-              </text:p>
-            </table:table-cell>
-          </table:table-row>
-        </table:table>
-        <text:p text:style-name="Standard"/>
-      </office:body>
-    </office:document-content>
diff --git a/contrib/orm-persistence/applications/test/log4j.xml b/contrib/orm-persistence/applications/test/log4j.xml
deleted file mode 100644
index fae8197..0000000
--- a/contrib/orm-persistence/applications/test/log4j.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                       as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-  -->
-<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
-
-<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
-
-    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
-        <layout class="org.apache.log4j.PatternLayout">
-             <param name="ConversionPattern"
-                            value="%6r [%t] %5p %c.%M:%L - %m%n"/>
-        </layout>
-    </appender>
-
-    <appender name="FILE" class="org.apache.log4j.FileAppender">
-        <param name="File" value="jcr.log" />	
-        <layout class="org.apache.log4j.PatternLayout">
-             <param name="ConversionPattern"
-                            value="%6r [%t] %5p %c.%M:%L - %m%n"/>
-        </layout>
-    </appender>
-
-    <category name="org.apache.jackrabbit">
-        <priority value="info"/>
-    </category>
-    <category name="org.apache.jackrabbit.test">
-        <priority value="debug"/>
-    </category>
-    <category name="org.apache.ojb">
-        <priority value="warn"/>
-    </category>
-    <category name="net.sf">
-        <priority value="warn"/>
-    </category>
-
-    <root>
-        <priority value="info"/>
-        <appender-ref ref="FILE"/>
-    </root>
-</log4j:configuration>
diff --git a/contrib/orm-persistence/applications/test/ojb/repository.dtd b/contrib/orm-persistence/applications/test/ojb/repository.dtd
deleted file mode 100644
index 6a2d466..0000000
--- a/contrib/orm-persistence/applications/test/ojb/repository.dtd
+++ /dev/null
@@ -1,950 +0,0 @@
-<!-- @version $Id: $ -->
-<!--
-#/* Copyright 2004 Apache Software Foundation
-# *
-# * Licensed under the Apache License, Version 2.0 (the "License");
-# * you may not use this file except in compliance with the License.
-# * You may obtain a copy of the License at
-# *
-# *     http://www.apache.org/licenses/LICENSE-2.0
-# *
-# * Unless required by applicable law or agreed to in writing, software
-# * distributed under the License is distributed on an "AS IS" BASIS,
-# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# * See the License for the specific language governing permissions and
-# * limitations under the License.
-# */
--->
-<!--
-	ObJectRelationalBridge - Bridging Java objects and relational dabatases
-	This DTD describes the grammar of the Descriptor repository
-	Author: Thomas Mahler, (c) 2000, 2001, 2002, 2003
-  -->
-
-<!--
-	The descriptor-repository is the root element of a
-    repository.xml file.
-	It consists of one jdbc-connection-descriptor and at least one
-	class-descriptor element.
-
-	The attribute element allows to add custom attributes.
-
-    The jdbc-connection-descriptor element specifies the default jdbc
-	connection for the repository.
-
-	class-descriptor elements specify o/r mapping information for
-	persistent classes.
-  -->
-<!ELEMENT descriptor-repository (documentation?, attribute*,
-        jdbc-connection-descriptor*, class-descriptor*)>
-
-<!--
-	The version attribute is used to bind a repository.xml
-    file to a given version of this dtd. This will help to
-    avoid versions conflicts.
-
-    The isolation attribute defines the default isolation level for
-    class-descriptor on ODMG api level that do not define a
-    specific isolation level (this does NOT touch the jdbc-level
-    of the connection).
-  -->
-<!ATTLIST descriptor-repository
-	version (1.0) #REQUIRED
-	isolation-level (read-uncommitted | read-committed | repeatable-read |
-	                 serializable | optimistic) "read-uncommitted"
-	proxy-prefetching-limit CDATA "50"
->
-
-<!--
-	The documentation element can be used to store arbitrary
-	information on all repository entries.
--->
-<!ELEMENT documentation (#PCDATA)>
-
-<!--
-	The attribute element allows to add custom attributes.
-
-    The jdbc-connection-descriptor element specifies the a jdbc
-	connection for the repository.
-
-    The object-cache element specifies the object-cache implementation
-    class associated with this class.
-
-	A connection-pool element may be used to define connection pool
-	properties for the specified JDBC connection.
-
-    A sequence-manager element may be used to
-    define which sequence manager implementation should be used within
-    the defined connection.
-  -->
-<!ELEMENT jdbc-connection-descriptor (documentation?, attribute*,
-                object-cache?, connection-pool?, sequence-manager?)>
-
-<!--
-    The jcdAlias attribute is a shortcut name for the defined connection
-    descriptor. OJB use jcdAlias as key for the defined connections.
-
-    The default-connection attribute used to define if this connection
-    should used as default connection with OJB. You could define only
-    one connection as default connection. It is also possible to set
-    the default connection at runtime using
-    PersistenceBrokerFactory#setDefaultKey(...) method.
-    If set 'true' you could use on PB-api a shortcut-method of the
-    PersistenceBrokerFactory to lookup PersistenceBroker instances.
-
-    The platform attribute is used to define the specific RDBMS
-    Platform. This attribute corresponds to a
-	org.apache.ojb.broker.platforms.PlatformXXXImpl class.
-
-	The jdbc-level attribute is used to specify the Jdbc compliance
-	level of the used Jdbc driver.
-
-    The eager-release attribute was adopt to solve a problem occured when
-    using OJB within JBoss (3.0 <= version < 3.2.2, seems to be fixed in jboss 3.2.2).
-    Only use within JBoss.
-
-    The batch-mode attribute allow to enable JDBC connection batch support
-    (if supported by used database), 'true' value allows to enable per-session
-    batch mode, whereas 'false' prohibits it.
-    PB.serviceConnectionManager.setBatchMode(...) method can be used
-    to switch on/off batch modus, if batch-mode was enabled. On PB.close()
-    OJB switch off batch modus, thus you have to do '...setBatchMode(true)' on each
-    obtained PB instance.
-
-    The useAutoCommit attribute allow to set how OJB uses
-    the autoCommit state of the used connections. The default mode
-    was 1. When using mode 0 or 2 with the PB-api, you must use PB
-    transaction demarcation.
-    0 - OJB ignores the autoCommit setting of the connection and do not
-        try to change it. This mode could be helpfully if the
-        connection don't let you set the autoCommit state
-        (e.g. using datasources from application server).
-    1 - set autoCommit explicit 'true' when connection was created
-        and temporary set to 'false' when necessary (default mode).
-    2 - set autoCommit explicit 'false' when connection was created.
-
-    If the ignoreAutoCommitExceptions attribute is set 'true', all
-    exceptions caused by setting autocommit state, will be ignored.
-    Default mode 'false'.
-
-	If a jndi-datasource-name for JNDI based lookup of Jdbc
-    connections is specified, the four attributes driver, protocol,
-    subprotocol, dbalias used for Jdbc DriverManager based construction
-    of Jdbc Connections must not be declared.
-
-    The username and password attributes are used as credentials
-    for obtaining a jdbc connections.
-    If users don't want to keep this information the
-    repository.xml file, they could pass user/password
-    using PBKey.java to obtain a PersistenceBroker
-  -->
-<!ATTLIST jdbc-connection-descriptor
-	jcd-alias CDATA #REQUIRED
-    default-connection (true | false) "false"
-    platform (Db2 | Hsqldb | Informix | MsAccess | MsSQLServer |
-	          MySQL | Oracle | PostgreSQL | Sybase | SybaseASE |
-              SybaseASA | Sapdb | Firebird | Axion | NonstopSql |
-              Oracle9i | MaxDB ) "Hsqldb"
-	jdbc-level (1.0 | 2.0 | 3.0) "1.0"
-	eager-release (true | false) "false"
-    batch-mode (true | false) "false"
-    useAutoCommit (0 | 1 | 2) "1"
-    ignoreAutoCommitExceptions (true | false) "false"
-
-	jndi-datasource-name CDATA #IMPLIED
-
-	driver CDATA #IMPLIED
-	protocol CDATA #IMPLIED
-	subprotocol CDATA #IMPLIED
-	dbalias CDATA #IMPLIED
-
-	username CDATA #IMPLIED
-	password CDATA #IMPLIED
->
-
-
-<!--
-    The object-cache element can be used to specify the ObjectCache
-    implementation used by OJB. There are three levels of
-    declaration:
-        1. in OJB.properties file, to declare the standard (default)
-        ObjectCache implementation.
-        2. on jdbc-connection-descriptor level, to declare ObjectCache implementation
-        on a per connection/user level
-        3. on class-descriptor level, to declare ObjectCache implementation
-        on a per class level
-
-    The priority of the declared object-cache elements are:
-    per class > per jdbc descriptor > standard
-
-    E.g. if you declare ObjectCache 'cacheDef' as standard, set
-    ObjectCache 'cacheA' in class-descriptor for class A and class B
-    does not declare an object-cache element. Then OJB use cacheA as ObjectCache
-    for class A and cacheDef for class B
--->
-<!ELEMENT object-cache (documentation?, attribute*)>
-
-<!--
-    Attribute 'class' specifies the full qualified class name of
-    the used ObjectCache implementation.
--->
-<!ATTLIST object-cache
-    class                          CDATA #REQUIRED
->
-
-
-<!--
-	The connection-pool element specifies the connection pooling
-	parameter.
--->
-<!ELEMENT connection-pool (documentation?)>
-
-
-<!--
-	maxActive
-	maximum number of connections that can be borrowed from the
-	pool at one time. When non-positive, there is no limit.
-
-	maxIdle
-	controls the maximum number of connections that can sit idle in the
-	pool at any time. When non-positive, there is no limit
-
-	maxWait
-	max time block to get connection instance from pool, after that exception is thrown.
-	When non-positive, block till last judgement
-
-	whenExhaustedAction
-	0 - fail when pool is exhausted
-	1 - block when pool is exhausted
-	2 - grow when pool is exhausted
-
-	testOnBorrow
-	The pool will attempt to validate each object before it is returned from the pool
-
-	testOnReturn
-	The pool will attempt to validate each object before it is returned to the pool
-
-	testWhileIdle
-	Indicates whether or not idle objects should be validated.
-	Objects that fail to validate will be dropped from the pool
-
-	timeBetweenEvictionRunsMillis
-	indicates how long the eviction thread should sleep before "runs" of examining
-	idle objects. When non-positive, no eviction thread will be launched.
-
-	minEvictableIdleTimeMillis
-	specifies the minimum amount of time that a connection may sit idle
-	in the pool before it is eligable for eviction due to idle time.
-	When non-positive, no connection will be dropped from the pool due
-	to idle time alone (depends on timeBetweenEvictionRunsMillis > 0)
-
-	numTestsPerEvictionRun
-	The number of connections to examine during each run of the
-	idle object evictor thread (if any)
-
-    validationQuery
-    Here you could specify a validation query used by pool to test a
-    obtained connection (e.g. "select 1 from dual"), else a default query was
-    used - if defined in the platform class for your database.
-
-    logAbandoned
-    Only supported when using
-    org.apache.ojb.broker.accesslayer.ConnectionFactoryDBCPImpl
-    ConnectionFactory implementation.
-    Flag to log stack traces for application code which abandoned
-    a Statement or Connection. Defaults to false. Logging of
-    abandoned Statements and Connections adds overhead for
-    every Connection open or new Statement because a
-    stack trace has to be generated.
-
-    removeAbandoned/removeAbandonedTimeout
-    Only supported when using
-    org.apache.ojb.broker.accesslayer.ConnectionFactoryDBCPImpl
-    ConnectionFactory implementation.
-    Flag to remove abandoned connections if they exceed the
-    removeAbandonedTimeout. Set to true or false, default false.
-    If set to true a connection is considered abandoned and
-    eligible for removal if it has been idle longer than the
-    removeAbandonedTimeout. Setting this to true can recover
-    db connections from poorly written applications which
-    fail to close a connection.
-
--->
-<!ATTLIST connection-pool
-    maxActive                       CDATA #IMPLIED
-    maxIdle                         CDATA #IMPLIED
-    maxWait                         CDATA #IMPLIED
-    minEvictableIdleTimeMillis      CDATA #IMPLIED
-    numTestsPerEvictionRun          CDATA #IMPLIED
-    testOnBorrow                    (true|false) #IMPLIED
-    testOnReturn                    (true|false) #IMPLIED
-    testWhileIdle                   (true|false) #IMPLIED
-    timeBetweenEvictionRunsMillis   CDATA #IMPLIED
-    whenExhaustedAction             (0|1|2) #IMPLIED
-    validationQuery                 CDATA #IMPLIED
-
-    logAbandoned                    (true|false) #IMPLIED
-    removeAbandoned                 (true|false) #IMPLIED
-    removeAbandonedTimeout          CDATA #IMPLIED
->
-
-
-
-<!--
-	The sequence-manager element specifies the sequence
-    manager implementation used for key generation. All
-    sequence manager implementations shipped with OJB
-    you will find under org.apache.ojb.broker.util.sequence
-    If no sequence-manager is defined, OJB use a default one.
-    For configuration examples please consult documentation.
-
-    Use the attribute element to pass implementation specific
-    properties. This depends on the used implementation class.
--->
-<!ELEMENT sequence-manager (documentation?, attribute*)>
-
-<!--
-    The className attribute represents the full qualified class name
-    of the desired sequence manager implementation - it is mandatory
-    when using the sequence-manager element.
-    All sequence manager implementations you find will under
-    org.apache.ojb.broker.util.sequence package named as SequenceManagerXXXImpl.
-    For configuration examples please consult documentation.
--->
-<!ATTLIST sequence-manager
-    className                       CDATA #REQUIRED
->
-
-
-
-<!--
-	For interfaces or abstract classes a class-descriptor holds a sequence of
-	extent-class elements.
-
-	For concrete classes it must have field-descriptors that describe primitive
-	typed instance variables.
-	References to other persistent entity classes are specified by
-	reference-descriptor elements.
-	Collections or arrays attributes that contain other persistent entity
-	classes are specified by collection-descriptor elements
-
-	Concrete base classes, may specify a sequence of extent-class elements,
-	naming the derived classes.
-
-	A class-descriptor may contain user defined custom attribute elements.
-
-    The insert-procedure, update-procedure and delete-procedure elements
-    identify the procedure/function that is defined in the database which
-    will handle the insertion, update or deletion of an instance of this
-    class.  These elements are all optional.  If they are absent then basic
-    sql statements (INSERT INTO xxx..., UPDATE xxx, DELETE FROM xxx) will
-    be utilized.
-
-  -->
-<!ELEMENT class-descriptor
-	((documentation?, extent-class+, attribute*) |
-	(documentation?, object-cache?, extent-class*, field-descriptor+,
-	 reference-descriptor*, collection-descriptor*,
-     index-descriptor*, attribute*,
-     insert-procedure?, update-procedure?, delete-procedure?))>
-
-
-<!--
-	The class attribute contains the full qualified name of the specified class.
-	As this attribute is of type ID there can only be one class-descriptor per
-	class.
-
-	The isolation-level attribute specifies the transactional isolation to be
-	used for this class on ODMG api level (this does NOT touch the jdbc-level
-    of the connection).
-
-	If the proxy attribute is set, proxies are used for all loading operations
-	of instances of this class. If set to "dynamic", dynamic proxies are used.
-	If set to another value this value is interpreted as the full-qualified
-	name of the proxy class to use.
-
-    If the proxy-prefetching-limit attribute (used with the proxy attribute)
-    is set to the value > 0, the collections of objects of this class are materialized
-    by groups of the specified size, say when user tries to access the first
-    object of the collection, next proxy-prefetching-limit objects are loaded
-    by one database query.
-    Set this parameter to 0 if you want to turn this feature off.
-
-	The schema attribute may contain the database schema owning the table
-	mapped to this class.
-
-	The table attribute specifies the table name this class is mapped to.
-
-	The row-reader attribute may contain a full qualified class name.
-	This class will be used as the RowReader implementation used to
-	materialize instances of the persistent class.
-
-	The accept-locks attribute specifies whether implicit locking should
-	propagate to this class.  Currently relevant for the ODMG layer only.
-
-	The optional initialization-method specifies a no-argument instance
-	method that is invoked after reading an instance from a database row.
-	It can be used to do initialization and validations.
-
-	The optional factory-class specifies a factory-class that
-	that is to be used instead of a no argument constructor.
-	If the factory-class is specified the factory-method
-	also must be defined.
-	factory-method refers to a static no-argument method
-	of the factory-class class.
-
-	The refresh attribute can be set to true to force OJB to refresh
-	instances when loaded from cache. It's set to false by default.
-  -->
-<!ATTLIST class-descriptor
-	class ID #REQUIRED
-	isolation-level (read-uncommitted | read-committed | repeatable-read |
-	                 serializable | optimistic) "read-uncommitted"
-	proxy CDATA #IMPLIED
-	proxy-prefetching-limit CDATA #IMPLIED
-	schema CDATA #IMPLIED
-	table CDATA #IMPLIED
-	row-reader CDATA #IMPLIED
-    extends IDREF #IMPLIED
-	accept-locks (true | false) "true"
-	initialization-method CDATA #IMPLIED
-	factory-class CDATA #IMPLIED
-	factory-method CDATA #IMPLIED
-	refresh (true | false) "false"
->
-
-
-<!--
-	An extent-class element is used to specify an implementing class or a
-	derived class that belongs to the extent of all instances of the interface
-	or base class.
-  -->
-<!ELEMENT extent-class (documentation?)>
-<!--
-	The class-ref attribute must contain a fully qualified classname.
-	The repository file must contain a class-descriptor for this class.
-  -->
-<!ATTLIST extent-class
-	class-ref IDREF #REQUIRED
->
-
-<!--
-  A field descriptor contains mapping info for a primitive typed
-  attribute of a persistent class.
-
-  A field descriptor may contain custom attribute elements.
-  -->
-<!ELEMENT field-descriptor (documentation?, attribute*)>
-<!--
-	<b>The id attribute is optional.</b> If not specified, OJB internally
-	sorts field-descriptors according to their order of appearance in the
-	repository file.
-	If a different sort order is intended the id attribute may be used to
-	hold a unique number identifying the decriptors position in the sequence of
-	field-descriptors.
-	The order of the numbers for the field-descriptors must correspond to
-	the order of columns in the mapped table.
-
-	The name attribute holds the name of the persistent classes attribute.
-	If the PersistentFieldDefaultImpl is used there must be an attribute
-	in the persistent class with this name.
-	If the PersistentFieldPropertyImpl is used there must be a JavaBeans
-	compliant property of this name.
-
-	The table attribute may specify a table different from the mapped
-	table for the persistent class. (currently not implemented).
-
-	The column attribute specifies the column the persistent classes field
-	is mapped to.
-
-	The optional jdbc-type attribute specifies the JDBC type of the column.
-	If not specified OJB tries to identify the JDBC type by inspecting the
-	Java attribute by reflection.
-
-	The primarykey specifies if the column is a primary key column.
-
-	The nullable attribute specifies if the column may contain null values.
-
-	The indexed attribute specifies if there is an index on this column
-
-	The autoincrement attribute specifies if the values for the persistent
-	attribute are automatically generated by OJB.
-
-    The sequence-name attribute can be used to state explicitly a sequence
-    name used by the sequence manager implementations. Check the docs/javadocs
-    of the used sequence manager implementation to get information if this
-    is a mandatory attribute. OJB standard sequence manager implementations
-    build a sequence name by its own, if the attribute was not set.
-
-	The locking attribute is set to true if the persistent attribute is
-	used for optimistic locking. can only be set for TIMESTAMP and INTEGER
-	columns.
-
-	The updatelock attribute is set to false if the persistent attribute is
-	used for optimistic locking AND the dbms should update the lock column
-    itself. The default is true which means that when locking is true then
-    OJB will update the locking fields. Can only be set for TIMESTAMP and INTEGER
-	columns.
-
-	The default-fetch attribute specifies whether the persistent attribute
-	belongs to the JDO default fetch group.
-
-	The conversion attribute contains a fully qualified class name.
-	This class must implement the interface
-	org.apache.ojb.accesslayer.conversions.FieldConversion.
-	A FieldConversion can be used to implement conversions between Java-
-	attributes and database columns.
-
-	The length attribute can be used to specify a length setting, if
-	required by the jdbc-type of the underlying database column.
-
-	The precision attribute can be used to specify a precision setting, if
-	required by the jdbc-type of the underlying database column.
-
-	The scale attribute can be used to specify a scale setting, if
-	required by the jdbc-type of the underlying database column.
-
-	The access attribute specifies the accessibility of the field.
-	"readonly" marks fields that are not to modified. "readwrite" marks
-	fields that may be read and written to. "anonymous" marks anonymous fields.
-	An anonymous field has a database representation (column) but no
-	corresponding Java attribute. Hence the name of such a field does not
-	refer to a Java attribute of the class, but is used as a unique
-	identifier only.
-
-  -->
-<!ATTLIST field-descriptor
-	id CDATA #IMPLIED
-	name CDATA #REQUIRED
-	table CDATA #IMPLIED
-	column CDATA #REQUIRED
-	jdbc-type (BIT | TINYINT | SMALLINT | INTEGER | BIGINT | DOUBLE |
-	           FLOAT | REAL | NUMERIC | DECIMAL | CHAR | VARCHAR |
-	           LONGVARCHAR | DATE | TIME | TIMESTAMP | BINARY |
-	           VARBINARY | LONGVARBINARY | CLOB | BLOB | STRUCT |
-               ARRAY | REF | BOOLEAN | DATALINK) #IMPLIED
-	primarykey (true | false) "false"
-	nullable (true | false) "true"
-	indexed (true | false) "false"
-	autoincrement (true | false) "false"
-    sequence-name CDATA #IMPLIED
-	locking (true | false) "false"
-	update-lock (true | false) "true"
-	default-fetch (true | false) "false"
-	conversion CDATA #IMPLIED
-	length CDATA #IMPLIED
-	precision CDATA #IMPLIED
-	scale CDATA #IMPLIED
-	access (readonly | readwrite | anonymous) "readwrite"
->
-
-
-<!--
-  An attribute element allows arbitrary name/value pairs to
-  be represented in the repository.
-  -->
-<!ELEMENT attribute (documentation?)>
-
-<!--
-	The attribute-name identifies the name of the attribute.
-	The attribute-value identifies the value of the attribute.
--->
-<!ATTLIST attribute
-	attribute-name CDATA #REQUIRED
-	attribute-value CDATA #REQUIRED
->
-
-<!--
-    A reference-descriptor contains mapping info for an attribute of a
-    persistent class that is not primitive but references another
-    persistent entity Object.
-
-    A foreignkey element contains information on foreign key columns that
-    implement the association on the database level.
-
-    A reference-decriptor may contain user defined attribute elements.
-  -->
-<!ELEMENT reference-descriptor (documentation?, foreignkey+, attribute*)>
-<!--
-	The name attribute holds the name of the persistent classes attribute.
-	If the PersistentFieldDefaultImpl is used there must be an attribute
-	in the persistent class with this name.
-	If the PersistentFieldPropertyImpl is used there must be a JavaBeans
-	compliant property of this name.
-
-	The class-ref attribute contains a fully qualified class name.
-	This class is the Object type of the persistent reference attribute.
-	As this is an IDREF there must be a class-descriptor for this class
-	in the repository too.
-
-	The proxy attribute can be set to true to specify that proxy based
-	lazy loading should be used for this attribute.
-
-    If the proxy-prefetching-limit attribute (used with the proxy attribute)
-    is set to the value > 0, then loading of the reference for the first
-    object of some collection causes loading of the references for
-    the next proxy-prefetching-limit objects.
-    Set this parameter to 0 if you want to turn this feature off.
-
-	The refresh attribute can be set to true to force OJB to refresh
-	object references on instance loading.
-
-	The auto-retrieve attribute specifies whether OJB automatically retrieves
-	this reference attribute on loading the persistent object.
-	If set to false the reference attribute is set to null. In this case the
-	user is responsible to fill the reference attribute.
-
-	The auto-update attribute specifies whether OJB automatically stores
-	this reference attribute on storing the persistent object or not or only
-    link the reference.
-	This attribute must be set to 'false' if using the OTM, ODMG or JDO layer.
-    More info see OJB documentation.
-
-	The auto-delete attribute specifies whether OJB automatically deletes
-	this reference attribute on deleting the persistent object or not.
-	This attribute must be set to 'false' if using the OTM, ODMG or JDO layer.
-    More info see OJB documentation.
-
-	The otm-dependent attribute specifies whether the OTM layer automatically
-    creates the referred object or deletes it if the reference field is set to null.
-    Also otm-dependent references behave as if auto-update and auto-delete
-    were set to true, but the auto-update and auto-delete attributes themself
-    must be always set to false for use with OTM layer.
-
-  -->
-<!ATTLIST reference-descriptor
-	name CDATA #REQUIRED
-	class-ref IDREF #REQUIRED
-
-	proxy (true | false) "false"
-	proxy-prefetching-limit CDATA #IMPLIED
-	refresh (true | false) "false"
-
-	auto-retrieve (true | false) "true"
-	auto-update (none | link | object | true | false) "false"
-	auto-delete (none | link | object | true | false) "false"
-	otm-dependent (true | false) "false"
->
-
-<!--
-    A foreignkey element contains information on a foreign-key persistent
-    attribute that implement the association on the database level.
-  -->
-<!ELEMENT foreignkey (documentation?)>
-<!--
-	The field-id-ref contains the id attribute of the field-descriptor
-	used as a foreign key.
-  -->
-<!ATTLIST foreignkey
-	field-id-ref CDATA #IMPLIED
-	field-ref CDATA #IMPLIED
->
-
-
-<!--
-    A collection-descriptor contains mapping info for a Collection- or
-    Array-attribute of a  persistent class that contains persistent
-    entity Objects.
-
-    The inverse-foreignkey elements contains information on foreign-key
-    attributes that implement the association on the database level.
-
-    The fk-pointing-to-this-class and fk-pointing-to-element-class elements
-    are only needed if the Collection or array implements a m:n association.
-    In this case they contain information on the foreign-key columns of
-    the intermediary table.
-
-    A collection-descriptor may contain user defined attribute elements.
-  -->
-<!ELEMENT collection-descriptor (
-    documentation?,
-    orderby*,
-    inverse-foreignkey*,
-	fk-pointing-to-this-class*,
-	fk-pointing-to-element-class*,
-	query-customizer?,
-	attribute*)>
-
-
-<!--
-	The name attribute holds the name of the persistent classes attribute.
-	If the PersistentFieldDefaultImpl is used there must be an attribute
-	in the persistent class with this name.
-	If the PersistentFieldPropertyImpl is used there must be a JavaBeans
-	compliant property of this name.
-
-	The collection-class may hold a fully qualified class name.
-	This class must be the Java type of the Collection attribute.
-	This attribute must only specified if the attribute type is not
-	a java.util.Collection (or subclass) or Array type. The declared
-    (none java.util.Collection or non Array) class must implement
-    ManageableCollection to let OJB handle this type of collection.
-
-	The element-class-ref attribute contains a fully qualified class name.
-	This class is the Object type of the elements of persistent collection
-	or Array attribute.
-	As this is an IDREF there must be a class-descriptor for this class
-	in the repository too.
-
-	The orderby attribute may specify a field of the element class.
-	The Collection or Array will be sorted according to the specified attribute.
-	The sort attribute may be used to specify ascending or descending order for
-	this operation.
-
-	The indirection-table must specify the name of an intermediary table,
-	if the persistent collection attribute implements a m:n association.
-
-	The proxy attribute can be set to true to specify that proxy based
-	lazy loading should be used for this attribute.
-
-    If the proxy-prefetching-limit attribute (used with the proxy attribute)
-    is set to the value > 0, then loading of the collection for the first
-    object of some other collection causes loading of the collections for
-    the next proxy-prefetching-limit objects.
-    Set this parameter to 0 if you want to turn this feature off.
-
-	The refresh attribute can be set to true to force OJB to refresh
-	object and collection references on instance loading.
-
-	The auto-retrieve attribute specifies whether OJB automatically retrieves
-	this attribute on loading the persistent object.
-	If set to false the persistent attribute is set to null. In this case the
-	user is responsible to fill the persistent attribute.
-
-	The auto-update attribute specifies whether OJB automatically stores
-	the referenced objects on storing the persistent object or not or only link.
-	This attribute must be set to 'false' if using the OTM, ODMG or JDO layer.
-    More info see OJB documentation.
-
-	The auto-delete attribute specifies whether OJB automatically deletes
-	the referenced objects on deleting the persistent object or not.
-	This attribute must be set to false if using the OTM, ODMG or JDO layer.
-    More info see OJB documentation.
-
-	The otm-dependent attribute specifies whether the OTM layer automatically
-    creates collection elements that were included into the collectionelements
-    and deletes collection elements that were excluded from the collection.
-    Also otm-dependent references behave as if auto-update and auto-delete
-    were set to true, but the auto-update and auto-delete attributes themself
-    must be always set to false for use with OTM layer.
-
-
-  -->
-<!ATTLIST collection-descriptor
-	name CDATA #IMPLIED
-	collection-class CDATA #IMPLIED
-	element-class-ref IDREF #REQUIRED
-	orderby CDATA #IMPLIED
-	sort (ASC | DESC) "ASC"
-
-	indirection-table CDATA #IMPLIED
-
-	proxy (true | false) "false"
-	proxy-prefetching-limit CDATA #IMPLIED
-	refresh (true | false) "false"
-
-	auto-retrieve (true | false) "true"
-	auto-update (none | link | object | true | false) "false"
-	auto-delete (none | link | object | true | false) "false"
-	otm-dependent (true | false) "false"
->
-
-<!--
-	an OrderBy elemnent contains an attribute name and a sort order
-  -->
-<!ELEMENT orderby (documentation?)>
-<!ATTLIST orderby
-	name CDATA #REQUIRED
-	sort (ASC | DESC) "ASC"
->
-
-<!--
-    A inverse-foreignkey element contains information on a foreign-key
-    persistent attribute that implement the association on the database level.
-  -->
-<!ELEMENT inverse-foreignkey (documentation?)>
-<!--
-	The field-id-ref contains the id attribute of the field-descriptor
-	in the class of the collection elements that is used as a foreign key.
-  -->
-<!ATTLIST inverse-foreignkey
-	field-id-ref CDATA #IMPLIED
-	field-ref CDATA #IMPLIED
->
-
-<!--
-    A fk-pointing-to-this-class element contains information on a foreign-key
-    column of an intermediary table in a m:n scenario.
-  -->
-<!ELEMENT fk-pointing-to-this-class (documentation?)>
-<!--
-	The column attribute specifies the foreign-key column in the intermediary
-	table that points to the class holding the collection.
-  -->
-<!ATTLIST fk-pointing-to-this-class
-	column CDATA #REQUIRED
->
-
-<!--
-    A fk-pointing-to-element-class element contains information on a foreign-key
-    column of an intermediary table in a m:n scenario.
-  -->
-<!ELEMENT fk-pointing-to-element-class (documentation?)>
-<!--
-	The column attribute specifies the foreign-key column in the intermediary
-	table that points to the class of the collection elements.
-  -->
-<!ATTLIST fk-pointing-to-element-class
-	column CDATA #REQUIRED
->
-
-
-<!--
-	a queryEnhancer element to enhance the 1:n query
-  -->
-<!ELEMENT query-customizer (
-	documentation?,
-	attribute*)>
-<!ATTLIST query-customizer
-	class CDATA #REQUIRED
->
-
-<!--
-    An index-descriptor describes an index by listing its columns.  It may be
-    unique or not.
--->
-<!ELEMENT index-descriptor (documentation?, index-column+)>
-<!ATTLIST index-descriptor
-    name CDATA #REQUIRED
-    unique (true | false) "false">
-
-<!--
-    An index-column is just the name of a column in an index.
--->
-<!ELEMENT index-column (documentation?)>
-<!ATTLIST index-column
-    name CDATA #REQUIRED>
-
-<!--
-	Identifies the procedure/function that should be used to handle
-    insertions for a specific class-descriptor.
-
-    The nested 'argument' elements define the argument list for the
-    procedure/function as well as the source for each argument.
-
-    The name attribute identifies the name of the procedure/function to use
-
-    The return-field-ref identifies the field-descriptor that will receive
-    the value that is returned by the procedure/function.  If the procedure/
-    function does not include a return value, then do not specify a value
-    for this attribute.
-
-    The include-all-fields attribute indicates if all field-descriptors in
-    the corresponding class-descriptor are to be passed to the procedure/
-    function.  If include-all-fields is 'true', any nested 'argument'
-    elements will be ignored.  In this case, values for all field-descriptors
-    will be passed to the procedure/function.  The order of values that are
-    passed to the procedure/function will match the order of field-descriptors
-    on the corresponding class-descriptor.  If include-all-fields is false,
-    then values will be passed to the procedure/function based on the
-    information in the nested 'argument' elements.
-  -->
-<!ELEMENT insert-procedure
-	(documentation?, (runtime-argument | constant-argument)*, attribute*)>
-<!ATTLIST insert-procedure
-	name CDATA #REQUIRED
-    return-field-ref CDATA #IMPLIED
-    include-all-fields (true | false) "false"
->
-
-<!--
-	Identifies the procedure/function that should be used to handle
-    updates for a specific class-descriptor.
-
-    The nested 'argument' elements define the argument list for the
-    procedure/function as well as the source for each argument.
-
-    The name attribute identifies the name of the procedure/function to use
-
-    The return-field-ref identifies the field-descriptor that will receive
-    the value that is returned by the procedure/function.  If the procedure/
-    function does not include a return value, then do not specify a value
-    for this attribute.
-
-    The include-all-fields attribute indicates if all field-descriptors in
-    the corresponding class-descriptor are to be passed to the procedure/
-    function.  If include-all-fields is 'true', any nested 'argument'
-    elements will be ignored.  In this case, values for all field-descriptors
-    will be passed to the procedure/function.  The order of values that are
-    passed to the procedure/function will match the order of field-descriptors
-    on the corresponding class-descriptor.  If include-all-fields is false,
-    then values will be passed to the procedure/function based on the
-    information in the nested 'argument' elements.
-  -->
-<!ELEMENT update-procedure
-	(documentation?, (runtime-argument | constant-argument)*, attribute*)>
-<!ATTLIST update-procedure
-	name CDATA #REQUIRED
-    return-field-ref CDATA #IMPLIED
-    include-all-fields (true | false) "false"
->
-
-<!--
-	Identifies the procedure/function that should be used to handle
-    deletions for a specific class-descriptor.
-
-    The nested 'runtime-argument' and 'constant-argument' elements define
-    the argument list for the procedure/function as well as the source
-    for each argument.
-
-    The name attribute identifies the name of the procedure/function to use
-
-    The return-field-ref identifies the field-descriptor that will receive
-    the value that is returned by the procedure/function.  If the procedure/
-    function does not include a return value, then do not specify a value
-    for this attribute.
-
-    The include-pk-only attribute indicates if all field-descriptors in
-    the corresponding class-descriptor that are identified as being part of
-    the primary key are to be passed to the procedure/function.  If
-    include-pk-only is 'true', any nested 'argument' elements will be
-    ignored.  In this case, values for all field-descriptors that are identified
-    as being part of the primary key will be passed to the procedure/function.
-    The order of values that are passed to the procedure/function will match
-    the order of field-descriptors on the corresponding class-descriptor.
-    If include-pk-only is false, then values will be passed to the procedure/
-    function based on the information in the nested 'argument' elements.
-  -->
-<!ELEMENT delete-procedure
-	(documentation?, (runtime-argument | constant-argument)*, attribute*)>
-<!ATTLIST delete-procedure
-	name CDATA #REQUIRED
-    return-field-ref CDATA #IMPLIED
-    include-pk-only (true | false) "false"
->
-<!--
-    Defines an argument that is passed to a procedure/function.  Each argument
-    will be set to a value from a field-descriptor or null.
-
-    The field-ref attribute identifies the field-descriptor in the corresponding
-    class-descriptor that provides the value for this argument.  If this attribute
-    is unspecified, then this argument will be set to null.
--->
-<!ELEMENT runtime-argument
-	(documentation?, attribute*)>
-<!ATTLIST runtime-argument
-	field-ref CDATA #IMPLIED
-    return (true | false) "false"
->
-<!--
-    Defines a constant value that is passed to a procedure/function.
-
-    The value attribute identifies the value that is passed to the procedure/
-    function.
--->
-<!ELEMENT constant-argument
-	(documentation?, attribute*)>
-<!ATTLIST constant-argument
-    value CDATA #REQUIRED
->
-
diff --git a/contrib/orm-persistence/applications/test/ojb/repository.xml b/contrib/orm-persistence/applications/test/ojb/repository.xml
deleted file mode 100644
index 43c4c53..0000000
--- a/contrib/orm-persistence/applications/test/ojb/repository.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-#/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 is a sample metadata repository for the
-     Apache ObJectRelationalBridge (OJB) System.
-     Use this file as a template for building your own mappings.
--->
-
-<!-- doctype definition
-     By default we are using a local DTD that is expected to reside
-     in the same directory as this repository.xml file.
-     If you intend to validate your repository.xml against
-     the public dtd at the Apache site, please replace the string
-     "repository.dtd"
-     by the public adress
-     "http://db.apache.org/ojb/dtds/1.0/repository.dtd".
-     In this case validation will only work if the machine you
-     run your application on can connect to the internet!
--->
-
-<!DOCTYPE descriptor-repository PUBLIC
-       "-//Apache Software Foundation//DTD OJB Repository//EN"
-       "repository.dtd"
-[
-
-<!ENTITY database SYSTEM "repository_database.xml">
-<!ENTITY internal SYSTEM "repository_internal.xml">
-
-<!ENTITY user SYSTEM "repository_user.xml">
-]>
-
-
-<descriptor-repository version="1.0" isolation-level="read-uncommitted"
-        proxy-prefetching-limit="50">
-
-    <!-- include all used database connections -->
-    &database;
-
-    <!-- include ojb internal mappings here -->
-    &internal;
-
-    <!-- include user defined mappings here -->
-    &user;
-
-</descriptor-repository>
diff --git a/contrib/orm-persistence/applications/test/ojb/repository_database.xml b/contrib/orm-persistence/applications/test/ojb/repository_database.xml
deleted file mode 100644
index d7a1f19..0000000
--- a/contrib/orm-persistence/applications/test/ojb/repository_database.xml
+++ /dev/null
@@ -1,203 +0,0 @@
-<!-- @version $Id: repository_database.xml,v 1.22 2004/06/24 10:02:46 arminw Exp $ -->
-<!--
-#/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
--->
-<!--
-Define here all used connections.
-One defined connection should be defined as the default one,
-by set default-connection="true" - this could be done at runtime too.
-
-It is possible to set user/password at
-runtime or let login different users at runtime using the same
-database. Use different PBKey with same jcdAlias name but
-different user/password.
-
-Ditto it is possible to add jdbc-connection-descriptor at runtime
-using the MetadataManager.
--->
-   <jdbc-connection-descriptor
-            jcd-alias="default"
-		default-connection="true"
-   		platform="Hsqldb"
-   		jdbc-level="2.0"
-   		driver="org.hsqldb.jdbcDriver"
-   		protocol="jdbc"
-   		subprotocol="hsqldb"
-   		dbalias="hsql://localhost"
-   		username="sa"
-   		password=""/>
-<!--
-<jdbc-connection-descriptor
-    jcd-alias="default"
-	default-connection="true"
-	platform="MySQL"
-	jdbc-level="3.0"
-	driver="com.mysql.jdbc.Driver"
-    protocol="jdbc"
-	subprotocol="mysql"
-	batch-mode="true"
-    dbalias="//localhost/jackrabbit"
-	username="root"
-	password=""/>
-	-->
-    <!-- this connection was used as the default one within OJB -->
-    <!--
-    <jdbc-connection-descriptor
-   		jcd-alias="@JCD_ALIAS@"
-   		default-connection="true"
-   		platform="@DBMS_NAME@"
-   		jdbc-level="@JDBC_LEVEL@"
-   		driver="@DRIVER_NAME@"
-   		protocol="@URL_PROTOCOL@"
-   		subprotocol="@URL_SUBPROTOCOL@"
-   		dbalias="@URL_DBALIAS@"
-   		username="@USER_NAME@"
-   		password="@USER_PASSWD@"
-   		batch-mode="false"
-        useAutoCommit="1"
-        ignoreAutoCommitExceptions="false"
-     >
-
-        <object-cache class="org.apache.ojb.broker.cache.ObjectCacheDefaultImpl">
-            <attribute attribute-name="timeout" attribute-value="900"/>
-            <attribute attribute-name="autoSync" attribute-value="true"/>
-        </object-cache>
-
-        <connection-pool
-            maxActive="21"
-            validationQuery="@VALIDATION_QUERY@"
-            testOnBorrow="@TEST_ON_BORROW@"
-            testOnReturn="@TEST_ON_RETURN@"
-        />
-
-        <sequence-manager className="org.apache.ojb.broker.util.sequence.SequenceManagerHighLowImpl">
-            <attribute attribute-name="grabSize" attribute-value="20"/>
-            <attribute attribute-name="autoNaming" attribute-value="true"/>
-            <attribute attribute-name="globalSequenceId" attribute-value="false"/>
-            <attribute attribute-name="globalSequenceStart" attribute-value="10000"/>
-        </sequence-manager>
-   </jdbc-connection-descriptor>
-   -->
-
-   <!-- Datasource example -->
-    <!-- jdbc-connection-descriptor
-        jcd-alias="default"
-        default-connection="true"
-   		platform="Hsqldb"
-   		jdbc-level="2.0"
-   		jndi-datasource-name="java:DefaultDS"
-   		username="sa"
-   		password=""
-		eager-release="false"
-        batch-mode="false"
-        useAutoCommit="0"
-        ignoreAutoCommitExceptions="false"
-   >
-        <sequence-manager className="org.apache.ojb.broker.util.sequence.SequenceManagerNextValImpl">
-            <attribute attribute-name="autoNaming" attribute-value="true"/>
-        </sequence-manager>
-
-   </jdbc-connection-descriptor -->
-
-
-
-    <!--
-        NOTE: This is a test descriptor used within
-        the junit test suite, do not change any value.
-        A test db connections used for junit tests.
-        This connection match a hsql database called 'OJB_FarAway'
-        If you do not use the test suite, you could delete
-        this descriptor.
-        This descriptor was used to check multiple database
-        use.
-    -->
-    <jdbc-connection-descriptor
-        jcd-alias="farAway"
-        platform="Hsqldb"
-        jdbc-level="2.0"
-        driver="org.hsqldb.jdbcDriver"
-        protocol="jdbc"
-        subprotocol="hsqldb"
-        dbalias="../OJB_FarAway"
-        username="sa"
-        password=""
-        batch-mode="false"
-    >
-
-        <connection-pool
-            maxActive="6"
-            whenExhaustedAction="0"
-            validationQuery="select count(*) from OJB_HL_SEQ"
-        />
-
-        <sequence-manager className="org.apache.ojb.broker.util.sequence.SequenceManagerHighLowImpl">
-            <attribute attribute-name="grabSize" attribute-value="5"/>
-        </sequence-manager>
-    </jdbc-connection-descriptor>
-
-    <!--
-        NOTE: This is a test descriptor used within
-        the junit test suite, do not change any value.
-        If you do not use the test suite, you could
-        delete this descriptor.
-        In the the test directory under
-        org.apache.ojb.broker.metadata.MetadataTest#testReadConnectionDescriptor
-        this descriptor will be evaluated.
-    -->
-    <jdbc-connection-descriptor
-        jcd-alias="testConnection"
-        default-connection="false"
-        platform="Oracle"
-        jdbc-level="1.0"
-        driver="a driver"
-        protocol="a protocol"
-        subprotocol="a subprotocol"
-        dbalias="myDbalias"
-        username="a user"
-        password="a password"
-        eager-release="true"
-        batch-mode="true"
-        useAutoCommit="0"
-        ignoreAutoCommitExceptions="true"
-    >
-
-        <object-cache class="org.apache.ojb.broker.cache.ObjectCacheEmptyImpl">
-            <attribute attribute-name="cacheKey1" attribute-value="cacheValue1"/>
-            <attribute attribute-name="cacheKey2" attribute-value="cacheValue2"/>
-        </object-cache>
-
-        <connection-pool
-            maxActive="1"
-            maxIdle="2"
-            maxWait="3"
-            minEvictableIdleTimeMillis="4"
-            numTestsPerEvictionRun="5"
-            testOnBorrow="true"
-            testOnReturn="true"
-            testWhileIdle="true"
-            timeBetweenEvictionRunsMillis="6"
-            whenExhaustedAction="2"
-            validationQuery="a query"
-            logAbandoned="true"
-            removeAbandoned="true"
-            removeAbandonedTimeout="8"
-        />
-
-        <sequence-manager className="org.apache.ojb.broker.util.sequence.SequenceManagerHighLowImpl">
-            <attribute attribute-name="key1" attribute-value="value1"/>
-            <attribute attribute-name="key2" attribute-value="value2"/>
-        </sequence-manager>
-    </jdbc-connection-descriptor>
diff --git a/contrib/orm-persistence/applications/test/ojb/repository_internal.xml b/contrib/orm-persistence/applications/test/ojb/repository_internal.xml
deleted file mode 100644
index f7ff25a..0000000
--- a/contrib/orm-persistence/applications/test/ojb/repository_internal.xml
+++ /dev/null
@@ -1,362 +0,0 @@
-<!-- OJB INTERNAL MAPPINGS START HERE, DO NOT EDIT -->
-<!--
-#/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
--->
-<!-- The OJB HIGH/LOW SequenceManagerTable -->
-   <class-descriptor
-      class="org.apache.ojb.broker.util.sequence.HighLowSequence"
-      table="OJB_HL_SEQ"
-   >
-
-       <object-cache class="org.apache.ojb.broker.cache.ObjectCacheEmptyImpl">
-       </object-cache>
-
-       <field-descriptor
-         name="tableName"
-         column="TABLENAME"
-         jdbc-type="VARCHAR"
-         primarykey="true"
-      />
-      <field-descriptor
-         name="fieldName"
-         column="FIELDNAME"
-         jdbc-type="VARCHAR"
-         primarykey="true"
-      />
-      <field-descriptor
-         name="maxKey"
-         column="MAX_KEY"
-         jdbc-type="BIGINT"
-      />
-      <field-descriptor
-         name="grabSize"
-         column="GRAB_SIZE"
-         jdbc-type="INTEGER"
-      />
-      <field-descriptor
-         name="version"
-         column="VERSION"
-         jdbc-type="INTEGER"
-         locking="true"
-      />
-   </class-descriptor>
-
-
-<!-- The OJB Lock Table -->
-   <class-descriptor
-   	  class="org.apache.ojb.odmg.locking.LockEntry"
-   	  table="OJB_LOCKENTRY"
-   >
-      <field-descriptor
-         name="oidString"
-         column="OID_"
-         jdbc-type="VARCHAR"
-         primarykey="true"
-      />
-      <field-descriptor
-         name="transactionId"
-         column="TX_ID"
-         jdbc-type="VARCHAR"
-         primarykey="true"
-      />
-      <field-descriptor
-         name="timestamp"
-         column="TIMESTAMP_"
-         jdbc-type="BIGINT"
-      />
-      <field-descriptor
-         name="isolationLevel"
-         column="ISOLATIONLEVEL"
-         jdbc-type="INTEGER"
-      />
-      <field-descriptor
-         name="lockType"
-         column="LOCKTYPE"
-         jdbc-type="INTEGER"
-      />
-   </class-descriptor>
-
-
-<!-- THIS IS THE OJB NAMED ROOTS TABLE, DO NOT EDIT-->
-   <class-descriptor
-   	  class="org.apache.ojb.odmg.NamedRootsEntry"
-   	  table="OJB_NRM"
-   >
-      <field-descriptor
-         name="name"
-         column="NAME"
-         jdbc-type="VARCHAR"
-         primarykey="true"
-      />
-      <field-descriptor
-         name="oid"
-         column="OID_"
-         jdbc-type="LONGVARBINARY"
-      />
-   </class-descriptor>
-
-<!-- THIS IS THE OJB DLIST IMPLEMENTATION, DO NOT EDIT-->
-   <class-descriptor
-   	  class="org.apache.ojb.odmg.collections.DListImpl"
-   	  table="OJB_DLIST"
-   >
-      <field-descriptor
-         name="id"
-         column="ID"
-         jdbc-type="INTEGER"
-         primarykey="true"
-         autoincrement="true"
-      />
-      <field-descriptor
-         name="size"
-         column="SIZE_"
-         jdbc-type="INTEGER"
-      />
-      <collection-descriptor
-         name="elements"
-         element-class-ref="org.apache.ojb.odmg.collections.DListEntry"
-      >
-         <inverse-foreignkey field-ref="dlistId"/>
-      </collection-descriptor>
-   </class-descriptor>
-
-<!-- THIS IS THE OJB DLIST ENTRY IMPLEMENTATION, DO NOT EDIT-->
-   <class-descriptor
-      class="org.apache.ojb.odmg.collections.DListEntry"
-      table="OJB_DLIST_ENTRIES"
-   >
-      <field-descriptor
-         name="id"
-         column="ID"
-         jdbc-type="INTEGER"
-         primarykey="true"
-         autoincrement="true"
-      />
-      <field-descriptor
-         name="dlistId"
-         column="DLIST_ID"
-         jdbc-type="INTEGER"
-      />
-      <field-descriptor
-         name="position"
-         column="POSITION_"
-         jdbc-type="INTEGER"
-      />
-      <field-descriptor
-         name="oid"
-         column="OID_"
-         jdbc-type="LONGVARBINARY"
-         conversion="org.apache.ojb.broker.accesslayer.conversions.Object2ByteArrFieldConversion"
-      />
-   </class-descriptor>
-
-   <!-- THIS IS THE OJB DLIST IMPLEMENTATION, DO NOT EDIT-->
-   <!-- alternative implementation of DList -->
-   <class-descriptor
-   	  class="org.apache.ojb.odmg.collections.DListImpl_2"
-   	  table="OJB_DLIST"
-   >
-      <field-descriptor
-         name="id"
-         column="ID"
-         jdbc-type="INTEGER"
-         primarykey="true"
-         autoincrement="true"
-      />
-      <field-descriptor
-         name="size"
-         column="SIZE_"
-         jdbc-type="INTEGER"
-      />
-      <collection-descriptor
-         name="elements"
-         element-class-ref="org.apache.ojb.odmg.collections.DListEntry_2"
-         auto-retrieve = "true"
-      >
-         <inverse-foreignkey field-ref="dlistId"/>
-      </collection-descriptor>
-   </class-descriptor>
-
-<!-- THIS IS THE OJB DLIST ENTRY IMPLEMENTATION, DO NOT EDIT-->
-   <class-descriptor
-      class="org.apache.ojb.odmg.collections.DListEntry_2"
-      table="OJB_DLIST_ENTRIES"
-   >
-      <field-descriptor
-         name="id"
-         column="ID"
-         jdbc-type="INTEGER"
-         primarykey="true"
-         autoincrement="true"
-      />
-      <field-descriptor
-         name="dlistId"
-         column="DLIST_ID"
-         jdbc-type="INTEGER"
-      />
-      <field-descriptor
-         name="position"
-         column="POSITION_"
-         jdbc-type="INTEGER"
-      />
-      <field-descriptor
-         name="oid"
-         column="OID_"
-         jdbc-type="LONGVARBINARY"
-         conversion="org.apache.ojb.broker.accesslayer.conversions.Object2ByteArrFieldConversion"
-      />
-   </class-descriptor>
-
-   <!-- THIS IS THE OJB DBAG IMPLEMENTATION, DO NOT EDIT-->
-   <class-descriptor
-   	  class="org.apache.ojb.odmg.collections.DBagImpl"
-   	  table="OJB_DLIST"
-   >
-      <field-descriptor
-         name="id"
-         column="ID"
-         jdbc-type="INTEGER"
-         primarykey="true"
-         autoincrement="true"
-      />
-      <field-descriptor
-         name="size"
-         column="SIZE_"
-         jdbc-type="INTEGER"
-      />
-      <collection-descriptor
-         name="elements"
-         element-class-ref="org.apache.ojb.odmg.collections.DListEntry"
-      >
-         <inverse-foreignkey field-ref="dlistId"/>
-      </collection-descriptor>
-   </class-descriptor>
-
-<!-- THIS IS THE OJB DSET IMPLEMENTATION, DO NOT EDIT-->
-   <class-descriptor
-   	  class="org.apache.ojb.odmg.collections.DSetImpl"
-   	  table="OJB_DSET"
-   >
-      <field-descriptor
-         name="id"
-         column="ID"
-         jdbc-type="INTEGER"
-         primarykey="true"
-         autoincrement="true"
-      />
-      <field-descriptor
-         name="size"
-         column="SIZE_"
-         jdbc-type="INTEGER"
-      />
-      <collection-descriptor
-         name="elements"
-         element-class-ref="org.apache.ojb.odmg.collections.DSetEntry"
-      >
-         <inverse-foreignkey field-ref="dlistId"/>
-      </collection-descriptor>
-   </class-descriptor>
-
-<!-- THIS IS THE OJB DSET ENTRY IMPLEMENTATION, DO NOT EDIT-->
-   <class-descriptor
-   	  class="org.apache.ojb.odmg.collections.DSetEntry"
-   	  table="OJB_DSET_ENTRIES"
-   >
-      <field-descriptor
-         name="id"
-         column="ID"
-         jdbc-type="INTEGER"
-         primarykey="true"
-         autoincrement="true"
-      />
-      <field-descriptor
-         name="dlistId"
-         column="DLIST_ID"
-         jdbc-type="INTEGER"
-      />
-      <field-descriptor
-         name="position"
-         column="POSITION_"
-         jdbc-type="INTEGER"
-      />
-      <field-descriptor
-         name="oid"
-         column="OID_"
-         jdbc-type="LONGVARBINARY"
-         conversion="org.apache.ojb.broker.accesslayer.conversions.Object2ByteArrFieldConversion"
-      />
-   </class-descriptor>
-
-<!-- THIS IS THE OJB DMAP IMPLEMENTATION, DO NOT EDIT-->
-   <class-descriptor
-   	  class="org.apache.ojb.odmg.collections.DMapImpl"
-   	  table="OJB_DMAP"
-   >
-      <field-descriptor
-         name="id"
-         column="ID"
-         jdbc-type="INTEGER"
-         primarykey="true"
-         autoincrement="true"
-      />
-      <field-descriptor
-         name="size"
-         column="SIZE_"
-         jdbc-type="INTEGER"
-      />
-      <collection-descriptor
-         name="entries"
-         element-class-ref="org.apache.ojb.odmg.collections.DMapEntry"
-         collection-class="org.apache.ojb.broker.util.collections.ManageableHashSet"
-      >
-         <inverse-foreignkey field-ref="dmapId"/>
-      </collection-descriptor>
-   </class-descriptor>
-
-<!-- THIS IS THE OJB DMAP ENTRY IMPLEMENTATION, DO NOT EDIT-->
-   <class-descriptor
-   	  class="org.apache.ojb.odmg.collections.DMapEntry"
-   	  table="OJB_DMAP_ENTRIES"
-   >
-      <field-descriptor
-         name="id"
-         column="ID"
-         jdbc-type="INTEGER"
-         primarykey="true"
-         autoincrement="true"
-      />
-      <field-descriptor
-         name="dmapId"
-         column="DMAP_ID"
-         jdbc-type="INTEGER"
-      />
-      <field-descriptor
-         name="keyOID"
-         column="KEY_OID"
-         jdbc-type="LONGVARBINARY"
-         conversion="org.apache.ojb.broker.accesslayer.conversions.Object2ByteArrFieldConversion"
-      />
-      <field-descriptor
-         name="valueOID"
-         column="VALUE_OID"
-         jdbc-type="LONGVARBINARY"
-         conversion="org.apache.ojb.broker.accesslayer.conversions.Object2ByteArrFieldConversion"
-      />
-   </class-descriptor>
-
-
-
-   <!-- END OF OJB INTERNAL MAPPINGS-->
diff --git a/contrib/orm-persistence/applications/test/ojb/repository_user.xml b/contrib/orm-persistence/applications/test/ojb/repository_user.xml
deleted file mode 100644
index 7b47c01..0000000
--- a/contrib/orm-persistence/applications/test/ojb/repository_user.xml
+++ /dev/null
@@ -1,291 +0,0 @@
-<!-- Please keep user defined mappings in this file only
-     to avoid mixing user defined and system mappings. -->
-<!-- Mapping of User defined classes starts here -->
-<!--
-#/* Copyright 2002-2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 file usually contains the mappings for the application classes. -->
-
-<!-- Mapping of User defined classes ends here -->
-   <class-descriptor
-      class="org.apache.jackrabbit.core.state.orm.ojb.OJBNodeState"
-      table="JCR_NODE"
-   >
-
-       <field-descriptor
-         name="uuid"
-         column="UUID"
-         jdbc-type="VARCHAR"
-         primarykey="true"
-      />
-
-       <field-descriptor
-         name="parentUUID"
-         column="PARENT_UUID"
-         jdbc-type="VARCHAR"
-      />
-
-       <field-descriptor
-         name="nodeTypeName"
-         column="NODE_TYPE"
-         jdbc-type="VARCHAR"
-      />
-
-       <field-descriptor
-         name="definitionId"
-         column="DEFINITION_ID"
-         jdbc-type="VARCHAR"
-      />
-      
-    <collection-descriptor
-       name="awareChildNodeEntries"
-       element-class-ref="org.apache.jackrabbit.core.state.orm.ORMChildNodeEntry"
-       auto-update="true"
-       auto-delete="true"
-       orderby="childrenIndex"
-       sort="ASC"
-    >
-       <inverse-foreignkey field-ref="parentUUID"/>
-    </collection-descriptor>
-
-    <collection-descriptor
-       name="awarePropertyEntries"
-       element-class-ref="org.apache.jackrabbit.core.state.orm.ORMPropertyEntry"
-       auto-update="true"
-       auto-delete="true"
-       orderby="name"
-       sort="ASC"
-    >
-       <inverse-foreignkey field-ref="parentUUID"/>
-    </collection-descriptor>
-
-    <collection-descriptor
-       name="awareMixinTypeNames"
-       element-class-ref="org.apache.jackrabbit.core.state.orm.ORMNodeMixinType"
-       auto-update="true"
-       auto-delete="true"
-    >
-       <inverse-foreignkey field-ref="nodeUUID"/>
-    </collection-descriptor>
-
-    <collection-descriptor
-       name="awareParentUUIDs"
-       element-class-ref="org.apache.jackrabbit.core.state.orm.ORMNodeParent"
-       auto-update="true"
-       auto-delete="true"
-    >
-       <inverse-foreignkey field-ref="nodeUUID"/>
-    </collection-descriptor>
-      
-   </class-descriptor>
-
-   <class-descriptor
-      class="org.apache.jackrabbit.core.state.orm.ORMPropertyState"
-      table="JCR_PROPERTY"
-   >
-       <field-descriptor
-         name="itemId"
-         column="ITEM_ID"
-         jdbc-type="VARCHAR"
-         primarykey="true"
-      />
-       <field-descriptor
-         name="name"
-         column="NAME"
-         jdbc-type="VARCHAR"
-      />
-       <field-descriptor
-         name="parentUUID"
-         column="PARENT_UUID"
-         jdbc-type="VARCHAR"
-      />
-       <field-descriptor
-         name="values"
-         column="VALUE"
-         jdbc-type="VARCHAR"
-      />
-       <field-descriptor
-         name="type"
-         column="PROP_TYPE"
-         jdbc-type="INTEGER"
-      />
-       <field-descriptor
-         name="definitionId"
-         column="DEFINITION_ID"
-         jdbc-type="VARCHAR"
-      />
-       <field-descriptor
-         name="multiValued"
-         column="MULTI_VALUED"
-         jdbc-type="INTEGER"
-         conversion="org.apache.ojb.broker.accesslayer.conversions.Boolean2IntFieldConversion"
-      />
-      
-   </class-descriptor>
-
-   <class-descriptor
-      class="org.apache.jackrabbit.core.state.orm.ORMChildNodeEntry"
-      table="JCR_CHILD_NODE"
-   >
-
-       <field-descriptor
-         name="parentUUID"
-         column="PARENT_UUID"
-         jdbc-type="VARCHAR"
-         primarykey="true"
-      />
-       <field-descriptor
-         name="uuid"
-         column="UUID"
-         jdbc-type="VARCHAR"
-         primarykey="true"
-      />
-       <field-descriptor
-         name="name"
-         column="name"
-         jdbc-type="VARCHAR"
-         primarykey="true"
-      />
-       <field-descriptor
-         name="sameNameIndex"
-         column="SAMENAME_INDEX"
-         jdbc-type="INTEGER"
-         primarykey="true"
-      />
-       <field-descriptor
-         name="childrenIndex"
-         column="CHILDREN_INDEX"
-         jdbc-type="INTEGER"
-         primarykey="true"
-      />
-      
-   </class-descriptor>
-
-   <class-descriptor
-      class="org.apache.jackrabbit.core.state.orm.ORMPropertyEntry"
-      table="JCR_NODE_PROPERTY"
-   >
-       <field-descriptor
-         name="parentUUID"
-         column="PARENT_UUID"
-         jdbc-type="VARCHAR"
-         primarykey="true"
-      />
-       <field-descriptor
-         name="name"
-         column="name"
-         jdbc-type="VARCHAR"
-         primarykey="true"
-      />      
-   </class-descriptor>
-
-   <class-descriptor
-      class="org.apache.jackrabbit.core.state.orm.ORMNodeReference"
-      table="JCR_NODE_REF"
-   >
-       <field-descriptor
-         name="targetId"
-         column="TARGET_UUID"
-         jdbc-type="VARCHAR"
-         primarykey="true"
-      />
-       <field-descriptor
-         name="propertyParentUUID"
-         column="PROP_UUID"
-         jdbc-type="VARCHAR"
-         primarykey="true"
-      />
-       <field-descriptor
-         name="propertyName"
-         column="PROP_NAME"
-         jdbc-type="VARCHAR"
-         primaryKey="true"
-      />      
-   </class-descriptor>
-
-   <class-descriptor
-      class="org.apache.jackrabbit.core.state.orm.ORMNodeMixinType"
-      table="JCR_NODE_MIXIN_TYPE"
-   >
-       <field-descriptor
-         name="nodeUUID"
-         column="NODE_UUID"
-         jdbc-type="VARCHAR"
-         primarykey="true"
-      />
-       <field-descriptor
-         name="mixinTypeName"
-         column="MIXIN_TYPE"
-         jdbc-type="VARCHAR"
-         primaryKey="true"
-      />      
-   </class-descriptor>
-
-   <class-descriptor
-      class="org.apache.jackrabbit.core.state.orm.ORMNodeParent"
-      table="JCR_NODE_PARENT"
-   >
-       <field-descriptor
-         name="nodeUUID"
-         column="NODE_UUID"
-         jdbc-type="VARCHAR"
-         primarykey="true"
-      />
-       <field-descriptor
-         name="parentUUID"
-         column="PARENT_UUID"
-         jdbc-type="VARCHAR"
-         primaryKey="true"
-      />      
-   </class-descriptor>
-
-   <class-descriptor
-      class="org.apache.jackrabbit.core.state.orm.ORMBlobValue"
-      table="JCR_BLOB"
-   >
-       <field-descriptor
-         name="dbId"
-         column="BLOB_ID"
-         jdbc-type="INTEGER"
-         primarykey="true"
-      />
-       <field-descriptor
-         name="parentUUID"
-         column="PARENT_UUID"
-         jdbc-type="VARCHAR"
-      />
-       <field-descriptor
-         name="propertyName"
-         column="PROP_NAME"
-         jdbc-type="VARCHAR"
-      />
-       <field-descriptor
-         name="index"
-         column="VALUE_INDEX"
-         jdbc-type="INTEGER"
-      />
-       <field-descriptor
-         name="size"
-         column="BLOB_SIZE"
-         jdbc-type="BIGINT"
-      />
-       <field-descriptor
-         name="blobValue"
-         column="BLOB_VALUE"
-         jdbc-type="LONGVARBINARY"
-      />
-      
-   </class-descriptor>
diff --git a/contrib/orm-persistence/applications/test/repository.xml b/contrib/orm-persistence/applications/test/repository.xml
deleted file mode 100644
index 5a00206..0000000
--- a/contrib/orm-persistence/applications/test/repository.xml
+++ /dev/null
@@ -1,253 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE Repository [
-    <!--
-        the Repository element configures a repository instance;
-        individual workspaces of the repository are configured through
-        separate configuration files called workspace.xml which are
-        located in a subfolder of the workspaces root directory
-        (see Workspaces element).
-
-        it consists of
-
-            a FileSystem element (the virtual file system
-            used by the repository to persist global state such as
-            registered namespaces, custom node types, etc..
-
-            a Security element that specifies the name of the app-entry
-            in the JAAS config and the access manager
-
-            a Workspaces element that specifies to the location of
-            workspaces root directory and the name of default workspace
-
-            a Workspace element that is used as a workspace configuration
-            template; it is used to create the initial workspace if there's
-            no workspace yet and for creating additional workspaces through
-            the api
-
-            a SearchIndex element that is used for configuring per workspace
-            Indexing-related settings
-
-            a Versioning element that is used for configuring
-            versioning-related settings
-    -->
-    <!ELEMENT Repository (FileSystem,Security,Workspaces,Workspace,Versioning,SearchIndex?)>
-
-    <!--
-        a virtual file system
-    -->
-    <!ELEMENT FileSystem (param*)>
-    <!ATTLIST FileSystem
-      class CDATA #REQUIRED>
-
-    <!--
-        the Security element specifies the name (appName attribute)
-        of the JAAS configuration app-entry for this repository. 
-
-        it also specifies the access manager to be used (AccessManager element).
-    -->
-    <!ELEMENT Security (AccessManager, LoginModule?)>
-    <!ATTLIST Security
-      appName CDATA #REQUIRED>
-
-    <!--
-        the AccessManager element configures the access manager to be used by
-        this repository instance; the class attribute specifies the FQN of the
-        class implementing the AccessManager interface
-    -->
-    <!ELEMENT AccessManager (param*)>
-    <!ATTLIST AccessManager
-      class CDATA #REQUIRED>
-
-    <!--
-        generic parameter (name/value pair)
-    -->
-    <!ELEMENT param EMPTY>
-    <!ATTLIST param
-      name CDATA #REQUIRED
-      value CDATA #REQUIRED>
-
-     <!--
-        the LoginModule element optionally specifies a JAAS login module to
-        authenticate users. This feature allows the use of Jackrabbit in a
-        non-JAAS environment.
-    -->
-    <!ELEMENT LoginModule (param*)>
-    <!ATTLIST LoginModule
-      class CDATA #REQUIRED>
-
-   <!--
-        the Workspaces element specifies the workspaces root directory
-        (rootPath attribute) and the name of the default workspace
-        (defaultWorkspace attribute).
-
-        individual workspaces are configured through individual workspace.xml
-        files located in a subfolder each of the workspaces root directory.
-    -->
-    <!ELEMENT Workspaces EMPTY>
-    <!ATTLIST Workspaces
-      rootPath CDATA #REQUIRED
-      defaultWorkspace CDATA #REQUIRED>
-
-    <!--
-        the Workspace element serves as a workspace configuration template;
-        it is used to create the initial workspace if there's no workspace yet
-        and for creating additional workspaces through the api
-    -->
-    <!ELEMENT Workspace (FileSystem,PersistenceManager,SearchIndex?)>
-    <!ATTLIST Workspace
-      name CDATA #REQUIRED>
-
-    <!--
-        the PersistenceManager element configures the persistence manager
-        to be used for the workspace; the class attribute specifies the
-        FQN of the class implementing the PersistenceManager interface
-    -->
-    <!ELEMENT PersistenceManager (param*)>
-    <!ATTLIST PersistenceManager
-      class CDATA #REQUIRED>
-
-    <!--
-        the SearchIndex element specifies the locaction of the search index
-        (used by the QueryHandler); the class attribute specifies the
-        FQN of the class implementing the QueryHandler interface.
-    -->
-    <!ELEMENT SearchIndex (param*,FileSystem?)>
-    <!ATTLIST SearchIndex
-      class CDATA #REQUIRED>
-
-    <!--
-        the Versioning element configures the persistence manager
-        to be used for persisting version state
-    -->
-    <!ELEMENT Versioning (FileSystem, PersistenceManager)>
-    <!ATTLIST Versioning
-      rootPath CDATA #REQUIRED
-    >
-]>
-<!-- Example Repository Configuration File -->
-<Repository>
-    <!--
-        virtual file system where the repository stores global state
-        (e.g. registered namespaces, custom node types, etc.)
-    -->
-    <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
-        <param name="path" value="${rep.home}/repository"/>
-    </FileSystem>
-
-    <!--
-        security configuration
-    -->
-    <Security appName="Jackrabbit">
-        <!--
-            access manager:
-            class: FQN of class implementing the AccessManager interface
-        -->
-        <AccessManager class="org.apache.jackrabbit.core.security.SimpleAccessManager">
-            <!-- <param name="config" value="${rep.home}/access.xml"/> -->
-        </AccessManager>
-
-        <LoginModule class="org.apache.jackrabbit.core.security.SimpleLoginModule">
-           <!-- anonymous user name ('anonymous' is the default value) -->
-           <param name="anonymousId" value="anonymous"/>
-        </LoginModule>
-    </Security>
-
-    <!--
-        location of workspaces root directory and name of default workspace
-    -->
-    <Workspaces rootPath="${rep.home}/workspaces" defaultWorkspace="default"/>
-    <!--
-        workspace configuration template:
-        used to create the initial workspace if there's no workspace yet
-    -->
-    <Workspace name="${wsp.name}">
-        <!--
-            virtual file system of the workspace:
-            class: FQN of class implementing the FileSystem interface
-        -->
-        <FileSystem class="com.day.jackrabbit.fs.cq.CQFileSystem">
-            <param name="path" value="${wsp.home}/wspStore.dat"/>
-            <param name="autoRepair" value="false"/>
-            <param name="blockSize" value="128"/>
-            <param name="autoSync" value="false"/>
-        </FileSystem>
-        <!--
-        <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
-            <param name="path" value="${wsp.home}"/>
-        </FileSystem>
-        -->
-        <!--
-            persistence manager of the workspace:
-            class: FQN of class implementing the PersistenceManager interface
-        -->
-        <!--
-        <PersistenceManager class="org.apache.jackrabbit.core.state.xml.XMLPersistenceManager"/>
-        -->
-        <!--
-        <PersistenceManager class="org.apache.jackrabbit.core.state.mem.InMemPersistenceManager">
-            <param name="initialCapacity" value="100000"/>
-            <param name="loadFactor" value="0.3"/>
-            <param name="persistent" value="true"/>
-        </PersistenceManager>
-        -->
-        <!-- <PersistenceManager class="org.apache.jackrabbit.core.state.obj.ObjectPersistenceManager"/> -->
-        <PersistenceManager class="org.apache.jackrabbit.core.state.orm.ojb.OJBPersistenceManager" />
-        <!--PersistenceManager class="org.apache.jackrabbit.core.state.orm.hibernate.HibernatePersistenceManager" /-->
-
-        <!--
-            Search index and the file system it uses.
-            class: FQN of class implementing the QueryHandler interface
-        -->
-        <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
-            <param name="path" value="${wsp.home}/index"/>
-            <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
-                <param name="path" value="${wsp.home}/index"/>
-            </FileSystem>
-        </SearchIndex>
-    </Workspace>
-
-    <!--
-        Configures the versioning
-    -->
-    <Versioning rootPath="${rep.home}/version">
-        <!--
-            Configures the filesystem to use for versioning for the respective
-            persistence manager
-        -->
-        <FileSystem class="com.day.jackrabbit.fs.cq.CQFileSystem">
-            <param name="path" value="${rep.home}/version/version.dat"/>
-            <param name="autoRepair" value="false"/>
-            <param name="blockSize" value="128"/>
-            <param name="autoSync" value="false"/>
-        </FileSystem>
-    
-        <!--
-            <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
-                <param name="path" value="${rep.home}/version"/>
-            </FileSystem>
-        -->
-        
-        <!--
-            Configures the perisistence manager to be used for persisting version state.
-            Please note that the current versioning implementation is based on
-            a 'normal' persistence manager, but this could change in future
-            implementations.
-        -->
-        <PersistenceManager class="org.apache.jackrabbit.core.state.obj.ObjectPersistenceManager"/>
-
-    </Versioning>
-
-    <!--
-        Search index for content that is shared repository wide
-        (/jcr:system tree, contains mainly versions)
-        
-        The same parameters are supported as in the search index configuration
-        inside the workspace definition element.
-        
-        This element is optional. If omitted, the /jcr:system tree will not be
-        indexed and no results will be returned for that tree!
-    -->
-    <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
-        <param name="path" value="${rep.home}/repository/index"/>
-    </SearchIndex>
-</Repository>
diff --git a/contrib/orm-persistence/applications/test/repository/nodetypes/custom_nodetypes.xml b/contrib/orm-persistence/applications/test/repository/nodetypes/custom_nodetypes.xml
deleted file mode 100644
index 491bab6..0000000
--- a/contrib/orm-persistence/applications/test/repository/nodetypes/custom_nodetypes.xml
+++ /dev/null
@@ -1,248 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-<nodeTypes xmlns:nt="http://www.jcp.org/jcr/nt/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:rep="internal" xmlns:sv="http://www.jcp.org/jcr/sv/1.0" xmlns:test="http://www.apache.org/jackrabbit/test" xmlns:mix="http://www.jcp.org/jcr/mix/1.0">
-  <nodeType name="test:versionable" isMixin="false" hasOrderableChildNodes="false" primaryItemName="">
-    <supertypes>
-      <supertype>mix:versionable</supertype>
-      <supertype>nt:base</supertype>
-    </supertypes>
-    <propertyDefinition name="*" requiredType="undefined" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false" />
-    <propertyDefinition name="test:copyOnParentVersionProp" requiredType="String" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false" />
-    <propertyDefinition name="test:versionOnParentVersionProp" requiredType="String" autoCreated="false" mandatory="false" onParentVersion="VERSION" protected="false" multiple="false" />
-    <propertyDefinition name="test:initializeOnParentVersionProp" requiredType="String" autoCreated="false" mandatory="false" onParentVersion="INITIALIZE" protected="false" multiple="false" />
-    <propertyDefinition name="test:computeOnParentVersionProp" requiredType="String" autoCreated="false" mandatory="false" onParentVersion="COMPUTE" protected="false" multiple="false" />
-    <propertyDefinition name="test:ignoreOnParentVersionProp" requiredType="String" autoCreated="false" mandatory="false" onParentVersion="IGNORE" protected="false" multiple="false" />
-    <propertyDefinition name="test:abortOnParentVersionProp" requiredType="String" autoCreated="false" mandatory="false" onParentVersion="ABORT" protected="false" multiple="false" />
-    <childNodeDefinition name="*" defaultPrimaryType="test:versionable" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" sameNameSiblings="false">
-      <requiredPrimaryTypes>
-        <requiredPrimaryType>nt:base</requiredPrimaryType>
-      </requiredPrimaryTypes>
-    </childNodeDefinition>
-    <childNodeDefinition name="test:copyOnParentVersion" defaultPrimaryType="nt:unstructured" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" sameNameSiblings="false">
-      <requiredPrimaryTypes>
-        <requiredPrimaryType>nt:base</requiredPrimaryType>
-      </requiredPrimaryTypes>
-    </childNodeDefinition>
-    <childNodeDefinition name="test:versionOnParentVersion" defaultPrimaryType="nt:unstructured" autoCreated="false" mandatory="false" onParentVersion="VERSION" protected="false" sameNameSiblings="false">
-      <requiredPrimaryTypes>
-        <requiredPrimaryType>nt:base</requiredPrimaryType>
-      </requiredPrimaryTypes>
-    </childNodeDefinition>
-    <childNodeDefinition name="test:initializeOnParentVersion" defaultPrimaryType="nt:unstructured" autoCreated="false" mandatory="false" onParentVersion="INITIALIZE" protected="false" sameNameSiblings="false">
-      <requiredPrimaryTypes>
-        <requiredPrimaryType>nt:base</requiredPrimaryType>
-      </requiredPrimaryTypes>
-    </childNodeDefinition>
-    <childNodeDefinition name="test:computeOnParentVersion" defaultPrimaryType="nt:unstructured" autoCreated="false" mandatory="false" onParentVersion="COMPUTE" protected="false" sameNameSiblings="false">
-      <requiredPrimaryTypes>
-        <requiredPrimaryType>nt:base</requiredPrimaryType>
-      </requiredPrimaryTypes>
-    </childNodeDefinition>
-    <childNodeDefinition name="test:ignoreOnParentVersion" defaultPrimaryType="nt:unstructured" autoCreated="false" mandatory="false" onParentVersion="IGNORE" protected="false" sameNameSiblings="false">
-      <requiredPrimaryTypes>
-        <requiredPrimaryType>nt:base</requiredPrimaryType>
-      </requiredPrimaryTypes>
-    </childNodeDefinition>
-    <childNodeDefinition name="test:abortOnParentVersion" defaultPrimaryType="nt:unstructured" autoCreated="false" mandatory="false" onParentVersion="ABORT" protected="false" sameNameSiblings="false">
-      <requiredPrimaryTypes>
-        <requiredPrimaryType>nt:base</requiredPrimaryType>
-      </requiredPrimaryTypes>
-    </childNodeDefinition>
-  </nodeType>
-  
-  <!-- Defines a referenceable nodetype for testing purposes -->
-  <nodeType name="test:refTargetNode" isMixin="false" hasOrderableChildNodes="false" primaryItemName="">
-    <supertypes>
-      <supertype>mix:versionable</supertype>
-      <supertype>nt:base</supertype>
-    </supertypes>
-    <propertyDefinition name="*" requiredType="undefined" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false"/>
-  </nodeType>
-
-  <!-- Defines a nodetype for tests of NodeType.canSetProperty(), Property.setValue() and Node.setProperty() -->
-  <nodeType name="test:canSetProperty" isMixin="false" hasOrderableChildNodes="false" primaryItemName="">
-    <supertypes>
-      <supertype>nt:base</supertype>
-    </supertypes>
-    <propertyDefinition name="String" requiredType="String" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false"/>
-    <propertyDefinition name="StringMultiple" requiredType="String" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="true"/>
-    <propertyDefinition name="StringConstraints" requiredType="String" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false">
-      <valueConstraints>
-        <valueConstraint>abc</valueConstraint>
-        <valueConstraint>def</valueConstraint>
-        <valueConstraint>ghi</valueConstraint>
-      </valueConstraints>
-    </propertyDefinition>
-    <propertyDefinition name="StringMultipleConstraints" requiredType="String" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="true">
-      <valueConstraints>
-        <valueConstraint>abc</valueConstraint>
-        <valueConstraint>def</valueConstraint>
-        <valueConstraint>ghi</valueConstraint>
-      </valueConstraints>
-    </propertyDefinition>
-    <propertyDefinition name="Binary" requiredType="Binary" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false"/>
-    <propertyDefinition name="BinaryMultiple" requiredType="Binary" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="true"/>
-    <propertyDefinition name="BinaryConstraints" requiredType="Binary" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false">
-      <valueConstraints>
-        <valueConstraint>(,100)</valueConstraint>
-      </valueConstraints>
-    </propertyDefinition>
-    <propertyDefinition name="BinaryMultipleConstraints" requiredType="Binary" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="true">
-      <valueConstraints>
-        <valueConstraint>(,100)</valueConstraint>
-      </valueConstraints>
-    </propertyDefinition>
-    <propertyDefinition name="Date" requiredType="Date" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false"/>
-    <propertyDefinition name="DateMultiple" requiredType="Date" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="true"/>
-    <propertyDefinition name="DateConstraints" requiredType="Date" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false">
-      <valueConstraints>
-        <valueConstraint>(1974-02-15T00:00:00.000Z,)</valueConstraint>
-      </valueConstraints>
-    </propertyDefinition>
-    <propertyDefinition name="DateMultipleConstraints" requiredType="Date" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="true">
-      <valueConstraints>
-        <valueConstraint>(,1974-02-15T00:00:00.000Z)</valueConstraint>
-      </valueConstraints>
-    </propertyDefinition>
-    <propertyDefinition name="Double" requiredType="Double" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false"/>
-    <propertyDefinition name="DoubleMultiple" requiredType="Double" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="true"/>
-    <propertyDefinition name="DoubleConstraints" requiredType="Double" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false">
-      <valueConstraints>
-        <valueConstraint>(100,)</valueConstraint>
-      </valueConstraints>
-    </propertyDefinition>
-    <propertyDefinition name="DoubleMultipleConstraints" requiredType="Double" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="true">
-      <valueConstraints>
-        <valueConstraint>(,100)</valueConstraint>
-      </valueConstraints>
-    </propertyDefinition>
-    <propertyDefinition name="Long" requiredType="Long" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false"/>
-    <propertyDefinition name="LongMultiple" requiredType="Long" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="true"/>
-    <propertyDefinition name="LongConstraints" requiredType="Long" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false">
-      <valueConstraints>
-        <valueConstraint>(100,)</valueConstraint>
-      </valueConstraints>
-    </propertyDefinition>
-    <propertyDefinition name="LongMultipleConstraints" requiredType="Long" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="true">
-      <valueConstraints>
-        <valueConstraint>(,100)</valueConstraint>
-      </valueConstraints>
-    </propertyDefinition>
-    <propertyDefinition name="Boolean" requiredType="Boolean" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false"/>
-    <propertyDefinition name="BooleanMultiple" requiredType="Boolean" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="true"/>
-    <propertyDefinition name="BooleanConstraints" requiredType="Boolean" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false">
-      <valueConstraints>
-        <valueConstraint>true</valueConstraint>
-      </valueConstraints>
-    </propertyDefinition>
-    <propertyDefinition name="BooleanMultipleConstraints" requiredType="Boolean" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="true">
-      <valueConstraints>
-        <valueConstraint>true</valueConstraint>
-      </valueConstraints>
-    </propertyDefinition>
-    <propertyDefinition name="Name" requiredType="Name" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false"/>
-    <propertyDefinition name="NameMultiple" requiredType="Name" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="true"/>
-    <propertyDefinition name="NameConstraints" requiredType="Name" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false">
-      <valueConstraints>
-        <valueConstraint>abc</valueConstraint>
-      </valueConstraints>
-    </propertyDefinition>
-    <propertyDefinition name="NameMultipleConstraints" requiredType="Name" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="true">
-      <valueConstraints>
-        <valueConstraint>abc</valueConstraint>
-      </valueConstraints>
-    </propertyDefinition>
-    <propertyDefinition name="Path" requiredType="Path" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false"/>
-    <propertyDefinition name="PathMultiple" requiredType="Path" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="true"/>
-    <propertyDefinition name="PathConstraints" requiredType="Path" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false">
-      <valueConstraints>
-        <valueConstraint>/abc</valueConstraint>
-      </valueConstraints>
-    </propertyDefinition>
-    <propertyDefinition name="PathMultipleConstraints" requiredType="Path" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="true">
-      <valueConstraints>
-        <valueConstraint>/abc</valueConstraint>
-      </valueConstraints>
-    </propertyDefinition>
-    <propertyDefinition name="ReferenceConstraints" requiredType="Reference" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false">
-      <valueConstraints>
-        <valueConstraint>test:canSetProperty</valueConstraint>
-      </valueConstraints>
-    </propertyDefinition>
-    <propertyDefinition name="ReferenceMultipleConstraints" requiredType="Reference" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="true">
-      <valueConstraints>
-        <valueConstraint>test:canSetProperty</valueConstraint>
-      </valueConstraints>
-    </propertyDefinition>
-  </nodeType>
-
-  <!-- Defines a nodetype for testing NodeType.canAddChildNode() -->
-  <nodeType name="test:canAddChildNode" isMixin="false" hasOrderableChildNodes="false" primaryItemName="">
-    <supertypes>
-      <supertype>nt:base</supertype>
-    </supertypes>
-    <childNodeDefinition name="testChildWithDefaultType" defaultPrimaryType="nt:base" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" sameNameSiblings="false">
-      <requiredPrimaryTypes>
-        <requiredPrimaryType>nt:base</requiredPrimaryType>
-      </requiredPrimaryTypes>
-    </childNodeDefinition>
-    <childNodeDefinition name="testChildWithoutDefaultType" defaultPrimaryType="" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" sameNameSiblings="false">
-      <requiredPrimaryTypes>
-        <requiredPrimaryType>nt:base</requiredPrimaryType>
-      </requiredPrimaryTypes>
-    </childNodeDefinition>
-  </nodeType>
-
-  <!-- Defines a nodetype for testing Node.setProperty(). -->
-  <nodeType name="test:setProperty" isMixin="false" hasOrderableChildNodes="false" primaryItemName="">
-    <supertypes>
-      <supertype>nt:base</supertype>
-      <supertype>mix:referenceable</supertype>
-    </supertypes>
-    <propertyDefinition name="*" requiredType="undefined" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false" />
-    <propertyDefinition name="test:multiProperty" requiredType="undefined" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="true" />
-    <childNodeDefinition name="*" defaultPrimaryType="test:setProperty" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" sameNameSiblings="false" />
-  </nodeType>
-  
-  <!-- Defines a nodetype to test assuming the PropertyType at Node.setProperty(). -->
-  <nodeType name="test:setPropertyAssumingType" isMixin="false" hasOrderableChildNodes="false" primaryItemName="">
-    <supertypes>
-      <supertype>nt:base</supertype>
-    </supertypes>
-    <propertyDefinition name="test:singleProperty" requiredType="undefined" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false" />
-    <propertyDefinition name="test:multiProperty" requiredType="undefined" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="true" />
-    <childNodeDefinition name="*" defaultPrimaryType="test:setPropertyAssumingType" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" sameNameSiblings="false" />
-  </nodeType>
-
-  <!-- Defines a nodetype with a childNodeDefinition that does not allow same name siblings -->
-  <nodeType name="test:sameNameSibsFalseChildNodeDefinition" isMixin="false" hasOrderableChildNodes="false" primaryItemName="">
-    <supertypes>
-      <supertype>nt:base</supertype>
-    </supertypes>
-    <propertyDefinition name="*" requiredType="undefined" autoCreated="false" mandatory="false" onParentVersion="COPY" protected="false" multiple="false"/>
-    <childNodeDefinition name="*" defaultPrimaryType="test:sameNameSibsFalseChildNodeDefinition" autoCreated="false" mandatory="false" onParentVersion="COMPUTE" protected="false" sameNameSiblings="false">
-      <requiredPrimaryTypes>
-        <requiredPrimaryType>nt:base</requiredPrimaryType>
-      </requiredPrimaryTypes>
-    </childNodeDefinition>
-  </nodeType>  
-
-</nodeTypes>
-
diff --git a/contrib/orm-persistence/applications/test/repositoryStubImpl.properties b/contrib/orm-persistence/applications/test/repositoryStubImpl.properties
deleted file mode 100644
index a6deaa6..0000000
--- a/contrib/orm-persistence/applications/test/repositoryStubImpl.properties
+++ /dev/null
@@ -1,405 +0,0 @@
-#

-# This is the configuration file for the jackrabbit repository test stub.

-#

-

-# Stub implementation class

-javax.jcr.tck.repository_stub_impl=org.apache.jackrabbit.core.JackrabbitRepositoryStub

-

-# repository specific configuration

-org.apache.jackrabbit.repository.config=applications/test/repository.xml

-org.apache.jackrabbit.repository.name=repo

-org.apache.jackrabbit.repository.home=applications/test

-org.apache.jackrabbit.repository.jaas.config=applications/test/jaas.config

-

-# credential configuration

-javax.jcr.tck.superuser.name=superuser

-javax.jcr.tck.superuser.pwd=

-javax.jcr.tck.readwrite.name=user

-javax.jcr.tck.readwrite.pwd=

-javax.jcr.tck.readonly.name=anonymous

-javax.jcr.tck.readonly.pwd=

-

-# global test configuration

-javax.jcr.tck.testroot=/testroot

-javax.jcr.tck.nodetype=nt:unstructured

-javax.jcr.tck.nodename1=node1

-javax.jcr.tck.nodename2=node2

-javax.jcr.tck.nodename3=node3

-javax.jcr.tck.nodename4=node4

-javax.jcr.tck.propertyname1=prop1

-javax.jcr.tck.propertyname2=prop2

-javax.jcr.tck.workspacename=test

-

-# namespace configuration

-javax.jcr.tck.namespaces=test

-javax.jcr.tck.namespaces.test=http://www.apache.org/jackrabbit/test

-

-# sample for per test case config overriding

-# Test class: AddNodeText

-# Test method: testName

-javax.jcr.tck.AddNodeTest.testName.nodename1=myname

-

-# ==============================================================================

-# JAVAX.JCR CONFIGURATION

-# ==============================================================================

-

-# Test class: ItemDefTest

-javax.jcr.tck.ItemDefTest.testroot=/testdata

-

-# Test class: ItemReadMethodsTest

-javax.jcr.tck.ItemReadMethodsTest.testroot=/testdata

-

-# Test class: NodeReadMethodsTest

-javax.jcr.tck.NodeReadMethodsTest.testroot=/testdata

-

-# Test class: PropertyTypeTest

-javax.jcr.tck.PropertyTypeTest.testroot=/testdata

-

-# Test class: BinaryPropertyTest

-javax.jcr.tck.BinaryPropertyTest.testroot=/testdata

-

-# Test class: BooleanPropertyTest

-javax.jcr.tck.BooleanPropertyTest.testroot=/testdata

-

-# Test class: DatePropertyTest

-javax.jcr.tck.DatePropertyTest.testroot=/testdata

-

-# Test class: DoublePropertyTest

-javax.jcr.tck.DoublePropertyTest.testroot=/testdata

-

-# Test class: LongPropertyTest

-javax.jcr.tck.LongPropertyTest.testroot=/testdata

-

-# Test class: NamePropertyTest

-javax.jcr.tck.NamePropertyTest.testroot=/testdata

-

-# Test class: PathPropertyTest

-javax.jcr.tck.PathPropertyTest.testroot=/testdata

-

-# Test class: ReferencePropertyTest

-javax.jcr.tck.ReferencePropertyTest.testroot=/testdata

-

-# Test class: StringPropertyTest

-javax.jcr.tck.StringPropertyTest.testroot=/testdata

-

-# Test class: UndefinedPropertyTest

-javax.jcr.tck.UndefinedPropertyTest.testroot=/testdata

-

-# Test class: PropertyReadMethodsTest

-javax.jcr.tck.PropertyReadMethodsTest.testroot=/testdata

-

-# Test class: NodeIteratorTest

-javax.jcr.tck.NodeIteratorTest.testroot=/testdata

-

-# Test class: NodeDiscoveringNodeTypesTest

-javax.jcr.tck.NodeDiscoveringNodeTypesTest.testroot=/testdata

-

-# Test class: RepositoryDescriptorTest

-javax.jcr.tck.RepositoryDescriptorTest.testroot=/testdata

-

-# Test class: WorkspaceReadMethodsTest

-javax.jcr.tck.WorkspaceReadMethodsTest.testroot=/testdata

-

-# Test class: SessionReadMethodsTest

-javax.jcr.tck.SessionReadMethodsTest.testroot=/testdata

-

-# Test class: NamespaceRegistryReadMethodsTest

-javax.jcr.tck.NamespaceRegistryReadMethodsTest.testroot=/testdata

-

-# Test class: NamespaceRemappingTest

-javax.jcr.tck.NamespaceRemappingTest.testroot=/testdata

-

-# Test class: SessionTest

-# Test method: testMoveItemExistsException

-# nodetype that does not allow same name siblings

-javax.jcr.tck.SessionTest.testMoveItemExistsException.nodetype2=nt:folder

-# valid node type that can be added as child of nodetype2

-javax.jcr.tck.SessionTest.testMoveItemExistsException.nodetype3=nt:hierarchyNode

-

-# Test class: SessionTest

-# Test method: testSaveContstraintViolationException

-# nodetype that has a property that is mandatory but not autocreated

-javax.jcr.tck.SessionTest.testSaveContstraintViolationException.nodetype2=nt:file

-

-# Test class: SessionUUIDTest

-# node type that has a property of type PropertyType.REFERENCE

-javax.jcr.tck.SessionUUIDTest.nodetype=nt:unstructured

-# name of the property that is of type PropertyType.REFERENCE

-javax.jcr.tck.SessionUUIDTest.propertyname1=foobar

-# nodetype that has nodetype mix:referenceable assigned

-javax.jcr.tck.SessionUUIDTest.nodetype2=test:refTargetNode

-

-# Test class: SessionUUIDTest

-# Test method: testSaveMovedRefNode

-# name of the property that can be modified

-javax.jcr.tck.SessionUUIDTest.testSaveMovedRefNode.propertyname1=foobar

-

-# Test class: NodeTest

-# Test method: testAddNodeItemExistsException

-# nodetype that does not allow same name siblings and allows child nodes of

-# the same type

-javax.jcr.tck.NodeTest.testAddNodeItemExistsException.nodetype=nt:folder

-

-# Test class: NodeTest

-# Test method: testRemoveMandatoryNode

-# nodetype that has a mandatory child node definition

-javax.jcr.tck.NodeTest.testRemoveMandatoryNode.nodetype2=nt:file

-# nodetype of the  mandatory child

-javax.jcr.tck.NodeTest.testRemoveMandatoryNode.nodetype3=nt:base

-# name of the mandatory node

-javax.jcr.tck.NodeTest.testRemoveMandatoryNode.nodename3=jcr:content

-

-# Test class: NodeTest

-# Test method: testSaveContstraintViolationException

-# nodetype that has a property that is mandatory but not autocreated

-javax.jcr.tck.NodeTest.testSaveContstraintViolationException.nodetype2=nt:file

-

-# Test class: NodeUUIDTest

-# node type that has a property of type PropertyType.REFERENCE

-javax.jcr.tck.NodeUUIDTest.nodetype=nt:unstructured

-# name of the property that is of type PropertyType.REFERENCE

-javax.jcr.tck.NodeUUIDTest.propertyname1=ref

-# nodetype that has nodetype mix:referenceable assigned

-javax.jcr.tck.NodeUUIDTest.nodetype2=test:refTargetNode

-

-# Test class: NodeUUIDTest

-# Test method: testSaveMovedRefNode

-# name of the property that can be modified

-javax.jcr.tck.NodeUUIDTest.testSaveMovedRefNode.propertyname1=foobar

-# nodetype that has nodetype mix:referenceable assigned

-

-# Test class: NodeOrderableChildNodesTest

-# nodetype that supports orderable child nodes

-javax.jcr.tck.NodeOrderableChildNodesTest.nodetype2=nt:unstructured

-# valid node type that can be added as child of nodetype 2

-javax.jcr.tck.NodeOrderableChildNodesTest.nodetype3=nt:unstructured

-

-# Test class: NodeOrderableChildNodesTest

-# Test method: testOrderBeforeUnsupportedRepositoryOperationException

-# nodetype that does not allow ordering of child nodes

-javax.jcr.tck.NodeOrderableChildNodesTest.testOrderBeforeUnsupportedRepositoryOperationException.nodetype2=nt:folder

-# valid node type that can be added as child of nodetype 2

-javax.jcr.tck.NodeOrderableChildNodesTest.testOrderBeforeUnsupportedRepositoryOperationException.nodetype3=nt:hierarchyNode

-

-# Test class: SetPropertyNodeTest

-# nodetype which is referenceable

-javax.jcr.tck.SetPropertyNodeTest.nodetype=test:setProperty

-

-# Test class: SetPropertyValueTest

-# property that allows multiple values

-javax.jcr.tck.SetPropertyValueTest.propertyname2=test:multiProperty

-javax.jcr.tck.SetPropertyValueTest.nodetype=test:setProperty

-

-# Test class: SetPropertyStringTest

-# property that allows multiple values

-javax.jcr.tck.SetPropertyStringTest.propertyname2=test:multiProperty

-javax.jcr.tck.SetPropertyStringTest.nodetype=test:setProperty

-

-# Test class: WorkspaceCloneSameNameSibsTest

-javax.jcr.tck.WorkspaceCloneSameNameSibsTest.sameNameSibsFalseNodeType=test:sameNameSibsFalseChildNodeDefinition

-javax.jcr.tck.WorkspaceCloneSameNameSibsTest.sameNameSibsTrueNodeType=nt:unstructured

-

-# Test class: WorkspaceCopyBetweenWorkspacesSameNameSibsTest

-javax.jcr.tck.WorkspaceCopyBetweenWorkspacesSameNameSibsTest.sameNameSibsFalseNodeType=test:sameNameSibsFalseChildNodeDefinition

-javax.jcr.tck.WorkspaceCopyBetweenWorkspacesSameNameSibsTest.sameNameSibsTrueNodeType=nt:unstructured

-

-# Test class: WorkspaceCopySameNameSibsTest

-javax.jcr.tck.WorkspaceCopySameNameSibsTest.sameNameSibsFalseNodeType=test:sameNameSibsFalseChildNodeDefinition

-javax.jcr.tck.WorkspaceCopySameNameSibsTest.sameNameSibsTrueNodeType=nt:unstructured

-

-# Test class: WorkspaceMoveSameNameSibsTest

-javax.jcr.tck.WorkspaceMoveSameNameSibsTest.sameNameSibsFalseNodeType=test:sameNameSibsFalseChildNodeDefinition

-javax.jcr.tck.WorkspaceMoveSameNameSibsTest.sameNameSibsTrueNodeType=nt:unstructured

-

-# Test class: RepositoryLoginTest

-javax.jcr.tck.RepositoryLoginTest.testroot=/testdata

-

-# Test class: ReferenceableRootNodesTest

-javax.jcr.tck.ReferenceableRootNodesTest.testroot=/testdata

-

-# Test class: ExportDocViewTest

-javax.jcr.tck.ExportDocViewTest.testroot=/testdata

-

-# ------------------------------------------------------------------------------

-# observation configuration

-# ------------------------------------------------------------------------------

-

-# Test class: AddEventListenerTest

-# Test method: testNodeType

-javax.jcr.tck.AddEventListenerTest.testNodeType.nodetype2=nt:folder

-

-# Configuration settings for the serialization.

-# Note that the serialization test tries to use as many features of the repository

-# as possible, but fails silently if a feature is not available. You have to

-# specify all of the following configuration entries, even if your repository does

-# not support the feature that is associated with them.

-

-# Root node for the example tree

-javax.jcr.tck.SerializationTest.testroot=/testdata/serialization

-

-# Node type to use for the example tree. Specify a node type that allows complex trees and all property types if possible

-javax.jcr.tck.SerializationTest.nodetype=nt:unstructured

-

-# Name of the nodes for source and target tree

-javax.jcr.tck.SerializationTest.sourceFolderName=source

-javax.jcr.tck.SerializationTest.targetFolderName=target

-javax.jcr.tck.SerializationTest.rootNodeName=test

-

-# List the properties whose values may change during serialization/deserialization. For example,

-# the UUID of a node is unique in the repository, so it will have to change when you re-import

-# a tree at a different location.

-javax.jcr.tck.SerializationTest.propertyValueMayChange= jcr:created jcr:uuid jcr:versionHistory jcr:baseVersion jcr:predecessors P_Reference

-

-# List all properties which are skipped during xml import according specification chapter 7.3.3

-javax.jcr.tck.SerializationTest.propertySkipped=

-

-# The name of the test node types. For easier diagnostics, the node types have names

-# that tell you the kind of information they store

-javax.jcr.tck.SerializationTest.nodeTypesTestNode=NodeTypes

-javax.jcr.tck.SerializationTest.mixinTypeTestNode=MixinTypes

-javax.jcr.tck.SerializationTest.propertyTypesTestNode=PropertyTypes

-javax.jcr.tck.SerializationTest.sameNameChildrenTestNode=SameNameChildren

-javax.jcr.tck.SerializationTest.multiValuePropertiesTestNode=MultiValueProperties

-javax.jcr.tck.SerializationTest.referenceableNodeTestNode=ReferenceableNode

-javax.jcr.tck.SerializationTest.orderChildrenTestNode=OrderChildren

-javax.jcr.tck.SerializationTest.namespaceTestNode=Namespace

-

-# The name of the test property types.

-javax.jcr.tck.SerializationTest.stringTestProperty=P_String

-javax.jcr.tck.SerializationTest.binaryTestProperty=P_Binary

-javax.jcr.tck.SerializationTest.dateTestProperty=P_Date

-javax.jcr.tck.SerializationTest.longTestProperty=P_Long

-javax.jcr.tck.SerializationTest.doubleTestProperty=P_Double

-javax.jcr.tck.SerializationTest.booleanTestProperty=P_Boolean

-javax.jcr.tck.SerializationTest.nameTestProperty=P_Name

-javax.jcr.tck.SerializationTest.pathTestProperty=P_Path

-javax.jcr.tck.SerializationTest.referenceTestProperty=P_Reference

-javax.jcr.tck.SerializationTest.multiValueTestProperty=P_MultiValue

-

-# node type not allowing same name sibs

-javax.jcr.tck.SerializationTest.sameNameSibsFalseChildNodeDefinition=test:sameNameSibsFalseChildNodeDefinition

-

-# Test method: testVersioningExceptionSessionFileChild

-# specified nodetype must be versionable and allow child nodes of the same type.

-javax.jcr.tck.SerializationTest.testVersioningExceptionSessionFileChild.nodetype=test:versionable

-

-# Test method: testVersioningExceptionSessionFileParent

-# specified nodetype must be versionable and allow child nodes of the same type.

-javax.jcr.tck.SerializationTest.testVersioningExceptionSessionFileParent.nodetype=test:versionable

-

-# Test method: testSessionImportXmlOverwriteException

-# requires a node type that does not allow same name siblings

-javax.jcr.tck.SerializationTest.testSessionImportXmlOverwriteException.nodetype=nt:folder

-

-# Test class: ExportSysViewTest

-javax.jcr.tck.ExportSysViewTest.testroot=/testdata

-

-# ==============================================================================

-# JAVAX.JCR.QUERY CONFIGURATION

-# ==============================================================================

-

-# Test class: SaveTest

-# Test method: testConstraintViolationException

-# Specified node type must not allow child nodes.

-javax.jcr.tck.SaveTest.testConstraintViolationException.nodetype=nt:query

-

-# Test class: XPathQueryLevel1Test

-javax.jcr.tck.XPathQueryLevel1Test.testroot=/testdata/query

-

-# Test class: XPathDocOrderTest

-javax.jcr.tck.XPathDocOrderTest.testroot=/testdata/query

-

-# Test class: XPathPosIndexTest

-javax.jcr.tck.XPathPosIndexTest.testroot=/testdata/query

-

-# Test class: XPathOrderByTest

-javax.jcr.tck.XPathOrderByTest.testroot=/testdata/query

-

-# Test class: XPathSyntaxTest

-javax.jcr.tck.XPathSyntaxTest.testroot=/testdata/query

-

-# Test class: XPathJcrPathTest

-javax.jcr.tck.XPathJcrPathTest.testroot=/testdata

-

-# Test class: SQLQueryLevel1Test

-javax.jcr.tck.SQLQueryLevel1Test.testroot=/testdata/query

-

-# Test class: SQLSyntaxTest

-javax.jcr.tck.SQLSyntaxTest.testroot=/testdata/query

-

-# Test class: SQLOrderByTest

-javax.jcr.tck.SQLOrderByTest.testroot=/testdata/query

-

-# Test class: DerefQueryLevel1Test

-javax.jcr.tck.DerefQueryLevel1Test.testroot=/testdata

-

-# Test class: GetPropertyNamesTest

-javax.jcr.tck.GetPropertyNamesTest.testroot=/testdata

-

-# Test class: SQLJcrPathTest

-javax.jcr.tck.SQLJcrPathTest.testroot=/testdata

-

-# Test class: SQLPathTest

-javax.jcr.tck.SQLPathTest.testroot=/testdata

-

-# Test class: PredicatesTest

-javax.jcr.tck.PredicatesTest.testroot=/testdata

-

-# Test class: SimpleSelectionTest

-javax.jcr.tck.SimpleSelectionTest.testroot=/testdata

-

-# ==============================================================================

-# JAVAX.JCR.VERSIONING CONFIGURATION

-# ==============================================================================

-

-# nodetye that is versionable. if it is not, an attempt is made to create versionable nodes

-# by adding a mix:versionable mixin-type.

-# NOTE: javax.jcr.tck.nodetype must define a non-versionable nodetype!

-javax.jcr.tck.version.versionableNodeType=test:versionable

-javax.jcr.tck.version.propertyValue=aPropertyValue

-

-# testroot for the version package

-# the test root must allow versionable and non-versionable nodes being created below

-javax.jcr.tck.version.testroot=/testroot

-

-# 3 nodes (nodeName1, nodeName2, nodeName3 with nt=versionableNodeType / nt=nonVersionableNodeType will be cloned to 2nd workspace

-# nodename1 > used to persistently create versionable node below testroot

-# nodename2 > used to create second versionable node below testroot (used for restore/workspace.restore with uuid-conflict)

-# nodename3 > used to persistently create non-versionable node below testroot

-javax.jcr.tck.version.nodename1=versionableNodeName1

-javax.jcr.tck.version.nodename2=versionableNodeName2

-javax.jcr.tck.version.nodename3=nonVersionableNodeName1

-

-# nodename 4: versionabel child-node of the first versionable node with nodeName1 and nodetype 'versionableNodeType'

-# used for:

-# + creation of a node in the 2nd workspace, that does not exist in the first workspace

-# + creation of a node in the 2nd workspace, in order to test uuid-conflicts with Workspace.restore.

-# + creation of a sub-node in the default workspace, in order to test uuid-conflicts with Node.restore.

-# + NOTE: the nodetype with 'versionableNodeType' must define its children nodes to either have COPY or VERSION

-#         OPV behaviour in order to successfully test Node.restore and Workspace.restore with uuid conflict.

-javax.jcr.tck.version.nodename4=childNodeName

-

-# path to existing String-properties and a new value for the property, that allows to test the indicated OPV behaviour

-javax.jcr.tck.OnParentVersionAbortTest.propertyname1=test:abortOnParentVersionProp

-javax.jcr.tck.OnParentVersionComputeTest.propertyname1=test:computeOnParentVersionProp

-javax.jcr.tck.OnParentVersionCopyTest.propertyname1=test:copyOnParentVersionProp

-javax.jcr.tck.OnParentVersionIgnoreTest.propertyname1=test:ignoreOnParentVersionProp

-javax.jcr.tck.OnParentVersionInitializeTest.propertyname1=test:initializeOnParentVersionProp

-

-# Test class: RestoreTest

-# Test method: testRestoreWithUUIDConflict

-# nodename4 must be the name of a child node with a OPV definition COPY or VERSION

-javax.jcr.tck.RestoreTest.testRestoreWithUUIDConflict.nodename4=test:versionOnParentVersion

-

-# config for nodes that show the indicated OPV behaviour:

-# nodes are added in order to test the versioning behaviour indicated by the test-class name.

-# NOTE:

-# - nodename4 is uses as name for the childnode

-# - nodetype is used as nodetype name for the childnode

-# - the specified child node is created below nodename1 with versionableNodeType

-#   the versionableNodeType and/or nodename1 may be overwritten with the individual

-#   testclass below.

-javax.jcr.tck.OnParentVersionCopyTest.nodename4=test:copyOnParentVersion

-javax.jcr.tck.OnParentVersionCopyTest.nodetype=nt:unstructured

-javax.jcr.tck.OnParentVersionAbortTest.nodename4=test:abortOnParentVersion

-javax.jcr.tck.OnParentVersionAbortTest.nodetype=nt:unstructured

diff --git a/contrib/orm-persistence/applications/test/workspaces/default/workspace.xml b/contrib/orm-persistence/applications/test/workspaces/default/workspace.xml
deleted file mode 100644
index cd2aae8..0000000
--- a/contrib/orm-persistence/applications/test/workspaces/default/workspace.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<Workspace name="default">

-  <!--

-      virtual file system of the workspace:

-      class: FQN of class implementing FileSystem interface

-  -->

-  <FileSystem class="com.day.jackrabbit.fs.cq.CQFileSystem">

-    <param name="path" value="${wsp.home}/data/wspStore.dat"/>

-    <param name="autoRepair" value="false"/>

-    <param name="blockSize" value="128"/>

-    <param name="autoSync" value="false"/>

-  </FileSystem>

-  <!--

-      persistence of the workspace:

-      class: FQN of class implementing PersistenceManager interface

-  -->

-        <!--PersistenceManager class="org.apache.jackrabbit.core.state.orm.ojb.OJBPersistenceManager" /-->

-        <PersistenceManager class="org.apache.jackrabbit.core.state.orm.hibernate.HibernatePersistenceManager" />

-  <!--

-      Search index and the file system it uses.

-  -->

-  <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">

-    <param name="path" value="${wsp.home}/index" />

-    <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">

-      <param name="path" value="${wsp.home}/index" />

-    </FileSystem>

-  </SearchIndex>

-</Workspace>

-

diff --git a/contrib/orm-persistence/applications/test/workspaces/test/workspace.xml b/contrib/orm-persistence/applications/test/workspaces/test/workspace.xml
deleted file mode 100644
index cb29b3f..0000000
--- a/contrib/orm-persistence/applications/test/workspaces/test/workspace.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Workspace name="test">
-  <!--
-      virtual file system of the workspace:
-      class: FQN of class implementing FileSystem interface
-  -->
-  <FileSystem class="com.day.jackrabbit.fs.cq.CQFileSystem">
-    <param name="path" value="${wsp.home}/data/wspStore.dat"/>
-    <param name="autoRepair" value="false"/>
-    <param name="blockSize" value="128"/>
-    <param name="autoSync" value="false"/>
-  </FileSystem>
-  <!--
-      persistence of the workspace:
-      class: FQN of class implementing PersistenceManager interface
-  -->
-        <!--PersistenceManager class="org.apache.jackrabbit.core.state.orm.ojb.OJBPersistenceManager" /-->
-        <PersistenceManager class="org.apache.jackrabbit.core.state.orm.hibernate.HibernatePersistenceManager" />
-  <!--
-      Search index and the file system it uses.
-  -->
-  <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
-    <param name="path" value="${wsp.home}/index" />
-    <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
-      <param name="path" value="${wsp.home}/index" />
-    </FileSystem>
-  </SearchIndex>
-</Workspace>
-
diff --git a/contrib/orm-persistence/checkstyle.xml b/contrib/orm-persistence/checkstyle.xml
deleted file mode 100644
index 9a2d448..0000000
--- a/contrib/orm-persistence/checkstyle.xml
+++ /dev/null
@@ -1,168 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                       as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-  -->
-  
-<!DOCTYPE module PUBLIC
-    "-//Puppy Crawl//DTD Check Configuration 1.1//EN"
-    "http://www.puppycrawl.com/dtds/configuration_1_1.dtd">
-
-<!--
-  Checkstyle checks configured for Maven.
--->
-
-<module name="Checker">
-
-    <!-- Checks that a package.html file exists for each package.     -->
-    <!-- See http://checkstyle.sf.net/config_javadoc.html#PackageHtml -->
-    <module name="PackageHtml"/>
-
-    <!-- Checks whether files end with a new line.                        -->
-    <!-- See http://checkstyle.sf.net/config_misc.html#NewlineAtEndOfFile -->
-    <module name="NewlineAtEndOfFile"/>
-
-    <!-- Checks that property files contain the same keys.         -->
-    <!-- See http://checkstyle.sf.net/config_misc.html#Translation -->
-    <module name="Translation"/>
-
-    <module name="TreeWalker">
-
-        <property name="cacheFile" value="${checkstyle.cache.file}"/>
-
-        <!-- ************************************************************** -->
-        <!-- Checks that are different from the sun coding conventions ones -->
-        <!-- ************************************************************** -->
-
-        <module name="Header">
-            <property name="headerFile" value="${basedir}/HEADER.txt"/>
-        </module>
-        <!-- <property name="tabWidth" value="4"/> -->
-        <module name="LeftCurly">
-          <property name="option" value="eol"/>
-        </module>
-        <module name="LineLength">
-          <property name="max" value="132"/>
-          <property name="ignorePattern" value="\* \$"/>
-        </module>
-        <module name="MethodLength">
-          <property name="max" value="175"/>
-        </module>
-        <module name="ConstantName">
-          <property name="format" value="log|^[a-zA-Z][a-zA-Z0-9_]*$"/>
-        </module>
-
-        <!-- ************************************************************** -->
-        <!-- Default Sun coding conventions checks                          -->
-        <!-- ************************************************************** -->
-
-        <!-- Checks for Javadoc comments.                     -->
-        <!-- See http://checkstyle.sf.net/config_javadoc.html -->
-        <module name="JavadocMethod"/>
-        <module name="JavadocType"/>
-        <module name="JavadocVariable"/>
-
-        <!-- Checks for Naming Conventions.                  -->
-        <!-- See http://checkstyle.sf.net/config_naming.html -->
-        <module name="LocalFinalVariableName"/>
-        <module name="LocalVariableName"/>
-        <module name="MethodName"/>
-        <module name="PackageName"/>
-        <module name="ParameterName"/>
-        <module name="StaticVariableName"/>
-        <module name="TypeName"/>
-        <module name="MemberName"/>
-
-        <!-- Checks for imports                              -->
-        <!-- See http://checkstyle.sf.net/config_import.html -->
-        <module name="AvoidStarImport"/>
-        <module name="IllegalImport"/> <!-- defaults to sun.* packages -->
-        <module name="RedundantImport"/>
-        <module name="UnusedImports"/>
-
-
-        <!-- Checks for Size Violations.                    -->
-        <!-- See http://checkstyle.sf.net/config_sizes.html -->
-        <module name="FileLength"/>
-        <module name="ParameterNumber"/>
-
-
-        <!-- Checks for whitespace                               -->
-        <!-- See http://checkstyle.sf.net/config_whitespace.html -->
-        <module name="EmptyForIteratorPad"/>
-        <module name="NoWhitespaceAfter"/>
-        <module name="NoWhitespaceBefore"/>
-        <module name="OperatorWrap"/>
-        <module name="TabCharacter"/>
-        <module name="WhitespaceAfter"/>
-        <module name="WhitespaceAround"/>
-
-
-        <!-- Modifier Checks                                    -->
-        <!-- See http://checkstyle.sf.net/config_modifiers.html -->
-        <module name="ModifierOrder"/>
-        <module name="RedundantModifier"/>
-
-
-        <!-- Checks for blocks. You know, those {}'s         -->
-        <!-- See http://checkstyle.sf.net/config_blocks.html -->
-        <module name="AvoidNestedBlocks"/>     
-        <module name="NeedBraces"/>
-
-        <!-- Checks for common coding problems               -->
-        <!-- See http://checkstyle.sf.net/config_coding.html -->
-        <module name="AvoidInlineConditionals"/>
-        <module name="DoubleCheckedLocking"/>
-        <module name="EqualsHashCode"/>
-        <module name="IllegalInstantiation"/>
-        <module name="InnerAssignment"/>
-        <module name="MissingSwitchDefault"/>
-        <module name="RedundantThrows">
-            <property name="allowUnchecked" value="true"/>   <!-- DISABLED -->
-            <property name="allowSubclasses" value="true"/>   <!-- DISABLED -->
-        </module>
-        <module name="SimplifyBooleanExpression"/>
-        <module name="SimplifyBooleanReturn"/>
-
-        <!-- Checks for class design                         -->
-        <!-- See http://checkstyle.sf.net/config_design.html -->
-        <module name="DesignForExtension">
-            <property name="severity" value="ignore"/>   <!-- DISABLED -->
-        </module>
-        <module name="HideUtilityClassConstructor"/>
-        <module name="InterfaceIsType"/>
-        <module name="VisibilityModifier"/>
-
-
-        <!-- Miscellaneous other checks.                   -->
-        <!-- See http://checkstyle.sf.net/config_misc.html -->
-        <module name="ArrayTypeStyle"/>
-        <module name="FinalParameters">
-            <property name="severity" value="ignore"/>   <!-- DISABLED -->
-        </module>
-        <module name="GenericIllegalRegexp">
-            <property name="format" value="\s+$"/>
-            <property name="message" value="Line has trailing spaces."/>
-        </module>
-        <module name="TodoComment"/>
-        <module name="UpperEll"/>
-
-    </module>
-    
-    <module name="SuppressionFilter">
-        <property name="file" value="checkstyle-suppressions.xml"/>
-    </module>    
-
-</module>
diff --git a/contrib/orm-persistence/create_db_hsqldb.sql b/contrib/orm-persistence/create_db_hsqldb.sql
deleted file mode 100644
index f209d3d..0000000
--- a/contrib/orm-persistence/create_db_hsqldb.sql
+++ /dev/null
@@ -1,20 +0,0 @@
-CREATE TABLE JCR_NODE(UUID VARCHAR(36) NOT NULL,PARENT_UUID VARCHAR(36),DEFINITION_ID VARCHAR(100),NODE_TYPE VARCHAR(100),PRIMARY KEY(UUID))

-CREATE TABLE JCR_PROPERTY(ITEM_ID VARCHAR(200) NOT NULL,NAME VARCHAR(100),VALUE VARCHAR(100),PARENT_UUID VARCHAR(36),PROP_TYPE INTEGER,DEFINITION_ID VARCHAR(100),MULTI_VALUED CHAR(1),PRIMARY KEY (ITEM_ID))

-CREATE TABLE JCR_NODE_MIXIN_TYPE(NODE_UUID VARCHAR(36) NOT NULL,MIXIN_TYPE VARCHAR(100))

-CREATE TABLE JCR_NODE_PARENT(NODE_UUID VARCHAR(36) NOT NULL,PARENT_UUID VARCHAR(36))

-CREATE TABLE JCR_CHILD_NODE(PARENT_UUID VARCHAR(36),UUID VARCHAR(36),NAME VARCHAR(100),SAMENAME_INDEX INTEGER,CHILDREN_INDEX INTEGER)

-CREATE TABLE JCR_NODE_PROPERTY(PARENT_UUID VARCHAR(36) NOT NULL,NAME VARCHAR(100))

-CREATE TABLE JCR_NODE_REF(NREF_ID IDENTITY,TARGET_UUID VARCHAR(36) NOT NULL,PROP_UUID VARCHAR(36),PROP_NAME VARCHAR(100))

-CREATE TABLE JCR_BLOB(BLOB_ID IDENTITY, PARENT_UUID VARCHAR(36), PROP_NAME VARCHAR(100), VALUE_INDEX INTEGER, BLOB_SIZE INTEGER, BLOB_VALUE LONGVARBINARY)

-CREATE INDEX JCR_NODE_PROPERTY_INDEX1 ON JCR_NODE_PROPERTY(PARENT_UUID, NAME)

-CREATE INDEX JCR_NODE_PROPERTY_INDEX2 ON JCR_NODE_PROPERTY(PARENT_UUID)

-CREATE INDEX JCR_CHILD_NODE_INDEX1 ON JCR_CHILD_NODE (PARENT_UUID, UUID, NAME, SAMENAME_INDEX)

-CREATE INDEX JCR_CHILD_NODE_INDEX2 ON JCR_CHILD_NODE (PARENT_UUID, CHILDREN_INDEX)

-CREATE INDEX JCR_NODE_MIXIN_TYPE_INDEX1 ON JCR_NODE_MIXIN_TYPE (NODE_UUID, MIXIN_TYPE)

-CREATE INDEX JCR_NODE_MIXIN_TYPE_INDEX2 ON JCR_NODE_MIXIN_TYPE (NODE_UUID)

-CREATE INDEX JCR_NODE_PARENT_INDEX1 ON JCR_NODE_PARENT (NODE_UUID, PARENT_UUID)

-CREATE INDEX JCR_NODE_PARENT_INDEX2 ON JCR_NODE_PARENT (NODE_UUID)

-CREATE INDEX JCR_NODE_REF_INDEX1 ON JCR_NODE_REF(TARGET_UUID, PROP_UUID, PROP_NAME)

-CREATE INDEX JCR_NODE_REF_INDEX2 ON JCR_NODE_REF(TARGET_UUID)

-CREATE INDEX JCR_BLOB_INDEX1 ON JCR_BLOB(PARENT_UUID, PROP_NAME, VALUE_INDEX)

-CREATE USER SA PASSWORD "" ADMIN

diff --git a/contrib/orm-persistence/create_db_mysql.sql b/contrib/orm-persistence/create_db_mysql.sql
deleted file mode 100644
index bcaecdd..0000000
--- a/contrib/orm-persistence/create_db_mysql.sql
+++ /dev/null
@@ -1,83 +0,0 @@
-DROP DATABASE IF EXISTS jackrabbit  ;

-

-CREATE DATABASE jackrabbit  ;

-

-USE jackrabbit  ;

-

-CREATE TABLE JCR_NODE(

-  UUID VARCHAR(36) NOT NULL,

-  PARENT_UUID VARCHAR(36),

-  DEFINITION_ID VARCHAR(100),

-  NODE_TYPE VARCHAR(100), 

-  PRIMARY KEY (UUID)

-) TYPE=InnoDB;

-

-CREATE TABLE JCR_PROPERTY(

-  ITEM_ID VARCHAR(200) NOT NULL, 

-  NAME VARCHAR(100),

-  VALUE VARCHAR(100),

-  PARENT_UUID VARCHAR(36),

-  PROP_TYPE INTEGER,

-  DEFINITION_ID VARCHAR(100), 

-  MULTI_VALUED CHAR(1), 

-  PRIMARY KEY (ITEM_ID)

-) TYPE=InnoDB;

-

-CREATE TABLE JCR_NODE_MIXIN_TYPE(

-  NODE_UUID VARCHAR(36) NOT NULL,

-  MIXIN_TYPE VARCHAR(100)

-) TYPE=InnoDB;

-

-CREATE TABLE JCR_NODE_PARENT(

-  NODE_UUID VARCHAR(36) NOT NULL,

-  PARENT_UUID VARCHAR(36)

-) TYPE=InnoDB;

-

-CREATE TABLE JCR_CHILD_NODE(

-  PARENT_UUID VARCHAR(36) NOT NULL,

-  UUID VARCHAR(36),

-  NAME VARCHAR(100),

-  SAMENAME_INDEX INTEGER,

-  CHILDREN_INDEX INTEGER

-) TYPE=InnoDB;

-

-CREATE TABLE JCR_NODE_PROPERTY(

-  PARENT_UUID VARCHAR(36) NOT NULL,

-  NAME VARCHAR(100)

-) TYPE=InnoDB;

-

-CREATE TABLE JCR_NODE_REF(

-  NREF_ID INTEGER NOT NULL AUTO_INCREMENT, 

-  TARGET_UUID VARCHAR(36) NOT NULL,

-  PROP_UUID VARCHAR(36),

-  PROP_NAME VARCHAR(100), 

-  PRIMARY KEY (NREF_ID)

-) TYPE=InnoDB;

-

-CREATE TABLE JCR_BLOB(

-  BLOB_ID INTEGER NOT NULL AUTO_INCREMENT, 

-  PARENT_UUID VARCHAR(36),

-  PROP_NAME VARCHAR(100), 

-  VALUE_INDEX INTEGER, 

-  BLOB_SIZE BIGINT, 

-  BLOB_VALUE BLOB,

-  PRIMARY KEY(BLOB_ID)

-) TYPE=InnoDB;

-

-

-CREATE INDEX JCR_NODE_PROPERTY_INDEX1 ON JCR_NODE_PROPERTY(PARENT_UUID, NAME);

-CREATE INDEX JCR_NODE_PROPERTY_INDEX2 ON JCR_NODE_PROPERTY(PARENT_UUID);

-

-CREATE INDEX JCR_CHILD_NODE_INDEX1 ON JCR_CHILD_NODE (PARENT_UUID, UUID, NAME, SAMENAME_INDEX);

-CREATE INDEX JCR_CHILD_NODE_INDEX2 ON JCR_CHILD_NODE (PARENT_UUID, CHILDREN_INDEX);

-

-CREATE INDEX JCR_NODE_MIXIN_TYPE_INDEX1 ON JCR_NODE_MIXIN_TYPE (NODE_UUID, MIXIN_TYPE);

-CREATE INDEX JCR_NODE_MIXIN_TYPE_INDEX2 ON JCR_NODE_MIXIN_TYPE (NODE_UUID);

-

-CREATE INDEX JCR_NODE_PARENT_INDEX1 ON JCR_NODE_PARENT (NODE_UUID, PARENT_UUID);

-CREATE INDEX JCR_NODE_PARENT_INDEX2 ON JCR_NODE_PARENT (NODE_UUID);

-

-CREATE INDEX JCR_NODE_REF_INDEX1 ON JCR_NODE_REF(TARGET_UUID, PROP_UUID, PROP_NAME);

-CREATE INDEX JCR_NODE_REF_INDEX2 ON JCR_NODE_REF(TARGET_UUID);

-

-CREATE INDEX JCR_BLOB_INDEX1 ON JCR_BLOB(PARENT_UUID, PROP_NAME, VALUE_INDEX);

diff --git a/contrib/orm-persistence/maven.xml b/contrib/orm-persistence/maven.xml
deleted file mode 100644
index 4a45b94..0000000
--- a/contrib/orm-persistence/maven.xml
+++ /dev/null
@@ -1,100 +0,0 @@
-<!--
-   Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                       as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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
-  default="jar"
-  xmlns:j="jelly:core"
-  xmlns:maven="jelly:maven"
-  xmlns:ant="jelly:ant">
-
-  <preGoal name="test:compile">
-   <ant:path
-       id="parent.test.src.dir"
-       location="${basedir}/../../src/test"/>
-   <maven:addPath
-       id="maven.test.compile.src.set"
-       refid="parent.test.src.dir"/>
-  </preGoal>
-  
-  <postGoal name="test:compile">
-    <copy todir="${maven.test.dest}">
-      <fileset dir="${basedir}/../../src/test">
-        <exclude name="**/*.java"/>
-      </fileset>
-    </copy>  
-  </postGoal>
-
-   <!-- Additionally cleans the test data created -->
-   <postGoal name="clean">
-      <attainGoal name="test:clean"/>
-   </postGoal>
-   
-   <!-- deletes the test data -->
-   <goal name="test:clean">
-        <ant:delete includeEmptyDirs="true">
-            <ant:fileset dir="applications/test/repository">
-                <ant:include name="**/*"/>
-                <ant:exclude name="**/custom_nodetypes.xml"/>
-            </ant:fileset>
-        </ant:delete>
-        <ant:delete includeEmptyDirs="true">
-            <ant:fileset dir="applications/test/workspaces">
-                <ant:include name="**/*"/>
-                <ant:exclude name="**/workspace.xml"/>
-            </ant:fileset>
-        </ant:delete>
-        <ant:delete dir="applications/test/tx"/>
-        <ant:delete dir="applications/test/version"/>
-
-      <ant:delete file="jackrabbitdb.script" />
-      <ant:delete file="jackrabbitdb.data" />
-      <ant:delete file="jackrabbitdb.properties" />
-      <ant:copy file="create_db_hsqldb.sql" tofile="jackrabbitdb.script" overwrite="true" />
-   </goal>
-   
-  <!--
-  <goal name="profile" prereqs="jar:jar" >
-         <java classname="org.apache.jackrabbit.test.ImportBenchmark" fork="yes" maxmemory="1024M">
-          <classpath>
-            <path refid="maven.dependency.classpath"/>
-            <pathelement path="${maven.build.dest}"/>
-          </classpath>
-        </java>
-  </goal>
-  -->
-  
-  <goal name="start.test.server">
-  	<echo message="====================================" />
-  	<echo message="        Testing Database            " />
-  	<echo message="====================================" />
-         <java classname="org.hsqldb.Server" fork="yes" maxmemory="1024M">
-          <classpath>
-            <path refid="maven.dependency.classpath"/>
-            <pathelement path="${maven.build.dest}"/>
-          </classpath>
-            <arg value="-database" />
-            <arg value="jackrabbitdb" />
-            <arg value="-port" />
-            <arg value="9001" />
-            <arg value="-silent" />
-            <arg value="true" />
-            <arg value="-trace" />
-            <arg value="false" />
-        </java>
-  </goal>
-  
-</project>
diff --git a/contrib/orm-persistence/project.properties b/contrib/orm-persistence/project.properties
deleted file mode 100644
index 23aa714..0000000
--- a/contrib/orm-persistence/project.properties
+++ /dev/null
@@ -1,96 +0,0 @@
-#  Copyright 2003-2005 The Apache Software Foundation or its licensors,

-#                      as applicable

-#

-#  Licensed under the Apache License, Version 2.0 (the "License");

-#  you may not use this file except in compliance with the License.

-#  You may obtain a copy of the License at

-#

-#      http://www.apache.org/licenses/LICENSE-2.0

-#

-#  Unless required by applicable law or agreed to in writing, software

-#  distributed under the License is distributed on an "AS IS" BASIS,

-#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-#  See the License for the specific language governing permissions and

-#  limitations under the License.

-

-######################################################################

-# Apache Central Repository

-######################################################################

-maven.repo.central=www.apache.org

-maven.repo.central.directory=/www/www.apache.org/dist/java-repository

-maven.remote.group=apcvs

-maven.changelog.factory = org.apache.maven.svnlib.SvnChangeLogFactory

-

-######################################################################

-# JUnit Testing

-######################################################################

-maven.test.failure = false

-maven.junit.fork=true

-maven.test.search.classdir=true

-maven.junit.jvmargs=-Xmx1024M

-maven.junit.sysproperties=org.xml.sax.driver java.security.auth.login.config

-org.xml.sax.driver=org.apache.xerces.parsers.SAXParser

-java.security.auth.login.config=applications/test/jaas.config

-

-

-#If you wish to skip tests when doing builds, uncomment

-#maven.test.skip = true

-

-######################################################################

-# Checkstyle

-######################################################################

-maven.checkstyle.properties= checkstyle.xml

-maven.linkcheck.enable=false 

-

-######################################################################

-# JavaDoc

-#

-# javadoc urls can be added here, multiple urls are appended using a comma

-#

-# maven.javadoc.links = http://foo/bar/api,\

-#                       http://flim/flam/api/

-######################################################################

-maven.javadoc.links=http://java.sun.com/j2se/1.4.2/docs/api/,\

-                    http://incubator.apache.org/jackrabbit/apidocs/,\

-                    http://www.day.com/maven/jsr170/javadocs/jcr-0.16.1-pfd/

-maven.javadoc.author=false

-maven.javadoc.version=false

-

-######################################################################

-# Other opts

-######################################################################

-# uncomment the next line to work in offline mode (no jar download & no linkcheck)

-#maven.mode.online=

-

-maven.compile.debug=on

-maven.compile.deprecation=off

-maven.compile.optimize=off

-

-maven.jarResources.basedir=src/java

-maven.jar.excludes=**/package.html

-

-# specifying additional remote repository for downloading dependencies 

-# not available at www.ibiblio.org/maven/

-maven.repo.remote = http://www.ibiblio.org/maven/,http://www.day.com/maven/

-

-######################################################################

-# Site L&F

-######################################################################

-# maven.xdoc.jsl=

-maven.xdoc.date=

-maven.xdoc.poweredby.image=maven-feather.png

-maven.xdoc.version=${pom.currentVersion}

-maven.xdoc.developmentProcessUrl=http://incubator.apache.org/projects/jackrabbit.html

-maven.changelog.range=60

-maven.changelog.factory=org.apache.maven.svnlib.SvnChangeLogFactory

-

-# ------------------------------------------------------------------------

-# M A V E N  J A R  O V E R R I D E

-# ------------------------------------------------------------------------

-#maven.jar.override = on

-#maven.jar.jcr = ${basedir}/lib/jcr.jar

-

-######################################################################

-# Site Deploy (into ../jackrabbit-site for checkout on incubator.apache.org)

-######################################################################

-maven.site.deploy.method=fs

diff --git a/contrib/orm-persistence/project.xml b/contrib/orm-persistence/project.xml
deleted file mode 100644
index 1b7c50d..0000000
--- a/contrib/orm-persistence/project.xml
+++ /dev/null
@@ -1,245 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                       as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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>
-  <artifactId>jackrabbit-orm</artifactId>
-  <groupId>org.apache.jackrabbit</groupId>
-  <name>JackRabbit ORM Persistence Managers</name>
-  <currentVersion>0.16.4-dev</currentVersion>
-  <organization>
-    <name>The Apache Software Foundation</name>
-    <url>http://incubator.apache.org/projects/jackrabbit.html</url>
-    <logo>http://incubator.apache.org/images/apache-incubator-logo.png</logo>
-  </organization>
-  <inceptionYear>2004</inceptionYear>
-  <package>org.apache.jackrabbit.*</package>
-  <logo>/images/jackrabbitlogo.gif</logo>
-  <description>
-    ORM implementation of Jackrabbit persistence managers. This sub-projects of Jackrabbit adds two 
-    persistence manager implementations that use Object - Relational mapping technology : OJB 
-    (http://db.apache.org/ojb) and Hibernate (http://www.hibernate.org).
-  </description>
-  <shortDescription>ORM persistence managers for Jackrabbit</shortDescription>
-  
-  <developers>
-    <developer>
-      <name>Serge Huber</name>
-      <email/>
-      <organization/>
-      <roles>
-        <role>Java Developer</role>
-      </roles>
-      <timezone>+1</timezone>
-    </developer>
-  </developers>
-  
-  <dependencies>
-    <dependency>
-        <groupId>org.apache.jackrabbit</groupId>
-        <artifactId>jackrabbit</artifactId>
-        <version>1.0-SNAPSHOT</version>
-    </dependency>
-    <dependency>
-      <groupId>concurrent</groupId>
-      <artifactId>concurrent</artifactId>
-      <version>1.3.4</version>
-    </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <version>3.8.1</version>
-    </dependency>
-    <dependency>
-      <groupId>commons-collections</groupId>
-      <artifactId>commons-collections</artifactId>
-      <version>3.1</version>
-    </dependency>
-    <dependency>
-      <groupId>jdom</groupId>
-      <artifactId>jdom</artifactId>
-      <version>1.0</version>
-    </dependency>
-    <dependency>
-      <groupId>geronimo-spec</groupId>
-      <artifactId>geronimo-spec-jta</artifactId>
-      <version>1.0-M1</version>
-    </dependency>
-    <dependency>
-      <groupId>jsr170</groupId>
-      <artifactId>jcr</artifactId>
-      <version>1.0</version>
-      <url>http://www.day.com/maven/jsr170/jars/jcr-0.16.4.1.jar</url>
-    </dependency>
-    <dependency>
-      <groupId>log4j</groupId>
-      <artifactId>log4j</artifactId>
-      <version>1.2.8</version>
-    </dependency>
-    <dependency>
-      <groupId>lucene</groupId>
-      <artifactId>lucene</artifactId>
-      <version>1.4.3</version>
-    </dependency>
-    <dependency>
-      <groupId>xerces</groupId>
-      <artifactId>xercesImpl</artifactId>
-      <version>2.6.2</version>
-    </dependency>
-    <dependency>
-      <groupId>xerces</groupId>
-      <artifactId>xmlParserAPIs</artifactId>
-      <version>2.6.2</version>
-    </dependency>
-    <dependency>
-      <groupId>commons-logging</groupId>
-      <artifactId>commons-logging</artifactId>
-      <version>1.0</version>
-    </dependency>
-    
-    <!-- OJB dependencies -->
-    <dependency>
-      <groupId>ojb</groupId>
-      <artifactId>db-ojb</artifactId>
-      <version>1.0.3</version>
-    </dependency>
-    <dependency>
-      <groupId>hsqldb</groupId>
-      <artifactId>hsqldb</artifactId>
-      <version>1.7.1</version>
-    </dependency>
-    <dependency>
-      <groupId>commons-lang</groupId>
-      <artifactId>commons-lang</artifactId>
-      <version>2.0</version>
-    </dependency>
-    <dependency>
-      <groupId>commons-pool</groupId>
-      <artifactId>commons-pool</artifactId>
-      <version>1.2</version>
-    </dependency>
-     <dependency>
-      <id>commons-dbcp</id>
-      <version>1.2.1</version>
-    </dependency>
-    <dependency>
-      <groupId>mysql</groupId>
-      <artifactId>mysql-connector-java</artifactId>
-      <version>3.0.10-stable-bin</version>
-    </dependency>
-
-    <!-- Hibernate dependencies -->
-     <dependency>
-      <groupId>hibernate</groupId>
-      <artifactId>hibernate</artifactId>
-      <version>2.1.7c</version>
-    </dependency>
-     <dependency>
-      <groupId>dom4j</groupId>
-      <artifactId>dom4j</artifactId>
-      <version>1.4</version>
-    </dependency>
-     <dependency>
-      <groupId>ehcache</groupId>
-      <artifactId>ehcache</artifactId>
-      <version>0.9</version>
-    </dependency>
-     <dependency>
-      <groupId>cglib</groupId>
-      <artifactId>cglib-full</artifactId>
-      <version>2.0.2</version>
-    </dependency>
-     <dependency>
-      <groupId>odmg</groupId>
-      <artifactId>odmg</artifactId>
-      <version>3.0</version>
-    </dependency>
-    
-    <!--
-      cqfs-jackrabbit and cqfs are optional runtime dependencies 
-      (an alternative FileSystem implementation); 
-    -->
-    <dependency>
-      <groupId>cqfs</groupId>
-      <artifactId>cqfs-jackrabbit</artifactId>
-      <version>3.5.6-SNAPSHOT</version>
-      <url>http://www.day.com/maven/cqfs/jars/cqfs-jackrabbit-3.5.6-SNAPSHOT.jar</url>
-    </dependency>
-    <dependency>
-      <groupId>cqfs</groupId>
-      <artifactId>cqfs</artifactId>
-      <version>3.5.6-SNAPSHOT</version>
-      <url>http://www.day.com/maven/cqfs/jars/cqfs-3.5.6-SNAPSHOT.jar</url>
-    </dependency>
-    
-  </dependencies>
-
-    <build>
-      <sourceDirectory>src/java</sourceDirectory>
-      <unitTestSourceDirectory>src/test</unitTestSourceDirectory>
-      <unitTest>
-        <includes>
-          <include>**/*TestAll.class</include>
-        </includes>
-      <resources>
-        <resource>
-          <directory>applications/test</directory>
-          <includes>
-            <include>*.properties</include>
-            <include>*.xml</include>
-            <include>ojb/*.xml</include>
-            <include>ojb/*.dtd</include>
-            <include>hibernate/*.xml</include>
-            <include>hibernate/*.dtd</include>
-          </includes>
-        </resource>
-      </resources>
-      </unitTest>
-      <resources>
-          <resource>
-              <!--directory>src/conf</directory-->
-            <directory>applications/test</directory>
-            <includes>
-              <include>*.properties</include>
-              <include>*.xml</include>
-              <include>ojb/*.xml</include>
-              <include>ojb/*.dtd</include>
-              <include>hibernate/*.xml</include>
-              <include>hibernate/*.dtd</include>
-            </includes>
-          </resource>
-      </resources>
-    </build>
-
-  <reports>
-     <report>maven-changelog-plugin</report>
-     <report>maven-changes-plugin</report>
-     <report>maven-checkstyle-plugin</report>
-     <!-- <report>maven-clover-plugin</report> -->
-     <!-- <report>maven-developer-activity-plugin</report> -->
-     <!-- <report>maven-file-activity-plugin</report> -->
-     <report>maven-javadoc-plugin</report>
-     <!-- <report>maven-jellydoc-plugin</report> -->
-     <report>maven-junit-report-plugin</report>
-     <report>maven-jxr-plugin</report>
-     <report>maven-license-plugin</report>
-     <!-- <report>maven-linkcheck-plugin</report> -->
-     <!-- <report>maven-statcvs-plugin</report> -->
-     <report>maven-tasklist-plugin</report>
-  </reports>
-
-</project>
diff --git a/contrib/orm-persistence/reset_db_mysql.bat b/contrib/orm-persistence/reset_db_mysql.bat
deleted file mode 100644
index 0ad795a..0000000
--- a/contrib/orm-persistence/reset_db_mysql.bat
+++ /dev/null
@@ -1,3 +0,0 @@
-mysqladmin -f -uroot drop jackrabbit

-mysqladmin -uroot create jackrabbit

-mysql -uroot jackrabbit < create_db_mysql.sql
\ No newline at end of file
diff --git a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ORMBlobValue.java b/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ORMBlobValue.java
deleted file mode 100644
index c797c74..0000000
--- a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ORMBlobValue.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.state.orm;
-
-import java.io.Serializable;
-
-/**
- * BLOB value ORM object
- */
-public class ORMBlobValue
-    implements Serializable {
-
-    private Integer dbId;
-    private String parentUUID;
-    private String propertyName;
-    private Integer index;
-    private Long size;
-    private byte[] blobValue;
-    public ORMBlobValue() {
-    }
-
-    public void setDbId(Integer dbId) {
-        this.dbId = dbId;
-    }
-
-    public void setParentUUID(String parentUUID) {
-        this.parentUUID = parentUUID;
-    }
-
-    public void setPropertyName(String propertyName) {
-        this.propertyName = propertyName;
-    }
-
-    public void setIndex(Integer index) {
-        this.index = index;
-    }
-
-    public void setSize(Long size) {
-
-        this.size = size;
-    }
-
-    public void setBlobValue(byte[] blobValue) {
-
-        this.blobValue = blobValue;
-    }
-
-    public Integer getDbId() {
-        return dbId;
-    }
-
-    public String getParentUUID() {
-        return parentUUID;
-    }
-
-    public String getPropertyName() {
-        return propertyName;
-    }
-
-    public Integer getIndex() {
-        return index;
-    }
-
-    public Long getSize() {
-
-        return size;
-    }
-
-    public byte[] getBlobValue() {
-
-        return blobValue;
-    }
-
-    public boolean equals(Object obj) {
-        if (!(obj instanceof ORMBlobValue)) {
-            return false;
-        }
-        ORMBlobValue right = (ORMBlobValue) obj;
-        if (dbId == null) {
-            if (right.getDbId() == null) {
-                return true;
-            }
-            // let's test other values.
-            if (parentUUID.equals(right.getParentUUID()) &&
-                propertyName.equals(right.getPropertyName()) &&
-                index.equals(right.getIndex())) {
-                return true;
-            }
-            return false;
-        }
-        if (dbId.equals(right.getDbId())) {
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-    public int hashCode() {
-        return getDbId().hashCode();
-    }
-
-}
diff --git a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ORMChildNodeEntry.java b/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ORMChildNodeEntry.java
deleted file mode 100644
index 7a908d7..0000000
--- a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ORMChildNodeEntry.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.state.orm;
-
-import java.io.Serializable;
-
-import org.apache.jackrabbit.core.state.NodeState.ChildNodeEntry;
-
-/**
- * <p>This class represents a child node entry row in the ORM object graph.</p>
- */
-public class ORMChildNodeEntry
-    implements Serializable, Comparable {
-    private String uuid;
-    private String parentUUID;
-    private String name;
-    // this is the index used for same name siblings
-    private Integer sameNameIndex;
-    private Integer dbId;
-    private ORMNodeState parent;
-    // this is the index used for conserving the order of child nodes.
-    private Integer childrenIndex;
-    public ORMChildNodeEntry() {
-    }
-
-    public ORMChildNodeEntry(ORMNodeState parent, ChildNodeEntry childNodeEntry, String parentUUID, int childrenIndex) {
-        this.parent = parent;
-        uuid = childNodeEntry.getUUID();
-        this.parentUUID = parentUUID;
-        name = childNodeEntry.getName().toString();
-        sameNameIndex = new Integer(childNodeEntry.getIndex());
-        this.childrenIndex = new Integer(childrenIndex);
-    }
-
-    public void setUuid(String uuid) {
-        this.uuid = uuid;
-    }
-
-    public void setParentUUID(String parentUUID) {
-        this.parentUUID = parentUUID;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public void setSameNameIndex(Integer sameNameIndex) {
-
-        this.sameNameIndex = sameNameIndex;
-    }
-
-    public void setDbId(Integer dbId) {
-        this.dbId = dbId;
-    }
-
-    public void setParent(ORMNodeState parent) {
-        this.parent = parent;
-    }
-
-    public void setChildrenIndex(Integer childrenIndex) {
-        this.childrenIndex = childrenIndex;
-    }
-
-    public String getUuid() {
-        return uuid;
-    }
-
-    public String getParentUUID() {
-        return parentUUID;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public Integer getSameNameIndex() {
-
-        return sameNameIndex;
-    }
-
-    public Integer getDbId() {
-        return dbId;
-    }
-
-    public ORMNodeState getParent() {
-        return parent;
-    }
-
-    public Integer getChildrenIndex() {
-        return childrenIndex;
-    }
-
-    public boolean equals(Object obj) {
-        if (!(obj instanceof ORMChildNodeEntry)) {
-            return false;
-        }
-        ORMChildNodeEntry right = (ORMChildNodeEntry) obj;
-            if (getUuid().equals(right.getUuid()) &&
-                getName().equals(right.getName()) &&
-                (getSameNameIndex().equals(right.getSameNameIndex())) &&
-                (getChildrenIndex().equals(right.getChildrenIndex()))) {
-                return true;
-            } else {
-                return false;
-            }
-    }
-
-    public int compareTo(Object obj) {
-        if (equals(obj)) {
-            return 0;
-        }
-        ORMChildNodeEntry right = (ORMChildNodeEntry) obj;
-        return (getChildrenIndex() + getUuid() + getName() + getSameNameIndex()).compareTo(right.getChildrenIndex() + right.getUuid() + right.getName() + right.getSameNameIndex());
-    }
-
-    public int hashCode() {
-        return (getChildrenIndex() + getUuid() + getName() + getSameNameIndex()).hashCode();
-    }
-}
diff --git a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ORMNodeMixinType.java b/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ORMNodeMixinType.java
deleted file mode 100644
index cf0355d..0000000
--- a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ORMNodeMixinType.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.state.orm;
-
-import java.io.Serializable;
-
-/**
- * <p>This class represents a single entry of a mixin type for a node.</p>
- */
-public class ORMNodeMixinType
-    implements Serializable {
-    private String nodeUUID;
-    private String mixinTypeName;
-    private Integer dbId;
-    private ORMNodeState node;
-    public ORMNodeMixinType() {
-    }
-
-    public ORMNodeMixinType(ORMNodeState node, String nodeUUID, String mixinTypeName) {
-        this.node = node;
-        this.nodeUUID = nodeUUID;
-        this.mixinTypeName = mixinTypeName;
-    }
-
-    public void setNodeUUID(String nodeUUID) {
-        this.nodeUUID = nodeUUID;
-    }
-
-    public void setMixinTypeName(String mixinTypeName) {
-
-        this.mixinTypeName = mixinTypeName;
-    }
-
-    public void setDbId(Integer dbId) {
-        this.dbId = dbId;
-    }
-
-    public void setNode(ORMNodeState node) {
-        this.node = node;
-    }
-
-    public String getNodeUUID() {
-        return nodeUUID;
-    }
-
-    public String getMixinTypeName() {
-
-        return mixinTypeName;
-    }
-
-    public Integer getDbId() {
-        return dbId;
-    }
-
-    public ORMNodeState getNode() {
-        return node;
-    }
-
-    public boolean equals(Object obj) {
-        if (!(obj instanceof ORMChildNodeEntry)) {
-            return false;
-        }
-        ORMNodeMixinType right = (ORMNodeMixinType) obj;
-        if (getMixinTypeName().equals(right.getMixinTypeName())) {
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-    public int hashCode() {
-        return getMixinTypeName().hashCode();
-    }
-
-}
diff --git a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ORMNodeParent.java b/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ORMNodeParent.java
deleted file mode 100644
index 23e8965..0000000
--- a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ORMNodeParent.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.state.orm;
-
-import java.io.Serializable;
-
-/**
- * <p>This class represents a single entry of a node's parents.</p>
- */
-public class ORMNodeParent
-    implements Serializable {
-    private String nodeUUID;
-    private String parentUUID;
-    private Integer dbId;
-    private ORMNodeState node;
-    public ORMNodeParent() {
-    }
-
-    public ORMNodeParent(ORMNodeState node, String nodeUUID, String parentUUID) {
-        this.node = node;
-        this.nodeUUID = nodeUUID;
-        this.parentUUID = parentUUID;
-    }
-
-    public void setNodeUUID(String nodeUUID) {
-        this.nodeUUID = nodeUUID;
-    }
-
-    public void setParentUUID(String parentUUID) {
-        this.parentUUID = parentUUID;
-    }
-
-    public void setDbId(Integer dbId) {
-        this.dbId = dbId;
-    }
-
-    public void setNode(ORMNodeState node) {
-        this.node = node;
-    }
-
-    public String getNodeUUID() {
-        return nodeUUID;
-    }
-
-    public String getParentUUID() {
-        return parentUUID;
-    }
-
-    public Integer getDbId() {
-        return dbId;
-    }
-
-    public ORMNodeState getNode() {
-        return node;
-    }
-
-    public boolean equals(Object obj) {
-        if (!(obj instanceof ORMNodeParent)) {
-            return false;
-        }
-        ORMNodeParent right = (ORMNodeParent) obj;
-        if (getParentUUID().equals(right.getParentUUID())) {
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-    public int hashCode() {
-        return getParentUUID().hashCode();
-    }
-}
diff --git a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ORMNodeReference.java b/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ORMNodeReference.java
deleted file mode 100644
index a4f1dc9..0000000
--- a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ORMNodeReference.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.state.orm;
-
-import java.io.Serializable;
-
-/**
- * <p>This class represents a node reference, that is to say a property that
- * points to a specific node.</p>
- */
-public class ORMNodeReference
-    implements Serializable {
-    private String targetId;
-    private String propertyParentUUID;
-    private String propertyName;
-    private Integer dbId;
-    public ORMNodeReference() {
-    }
-
-    public ORMNodeReference(String targetId, String propertyParentUUID, String propertyName) {
-        this.targetId = targetId;
-        this.propertyParentUUID = propertyParentUUID;
-        this.propertyName = propertyName;
-    }
-
-    public void setTargetId(String targetId) {
-        this.targetId = targetId;
-    }
-
-    public void setPropertyParentUUID(String propertyParentUUID) {
-        this.propertyParentUUID = propertyParentUUID;
-    }
-
-    public void setPropertyName(String propertyName) {
-        this.propertyName = propertyName;
-    }
-
-    public void setDbId(Integer dbId) {
-        this.dbId = dbId;
-    }
-
-    public String getTargetId() {
-        return targetId;
-    }
-
-    public String getPropertyParentUUID() {
-        return propertyParentUUID;
-    }
-
-    public String getPropertyName() {
-        return propertyName;
-    }
-
-    public Integer getDbId() {
-        return dbId;
-    }
-
-    public boolean equals(Object obj) {
-        if (!(obj instanceof ORMNodeParent)) {
-            return false;
-        }
-        ORMNodeReference right = (ORMNodeReference) obj;
-        if (getTargetId().equals(right.getTargetId()) &&
-            getPropertyParentUUID().equals(right.getPropertyParentUUID()) &&
-            getPropertyName().equals(right.getPropertyName()) ) {
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-    public int hashCode() {
-        return (getTargetId() + getPropertyParentUUID() + getPropertyName()).hashCode();
-    }
-}
diff --git a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ORMNodeState.java b/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ORMNodeState.java
deleted file mode 100644
index b606d1f..0000000
--- a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ORMNodeState.java
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.state.orm;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.jackrabbit.core.ItemId;
-import org.apache.jackrabbit.name.QName;
-import org.apache.jackrabbit.core.nodetype.NodeDefId;
-import org.apache.jackrabbit.core.state.NodeState;
-import org.apache.jackrabbit.core.state.NodeState.ChildNodeEntry;
-import org.apache.log4j.Logger;
-
-/**
- * <p>This class represents an copy of Jackrabbit's node state, in an ORM
- * compatible format.</p>
- */
-public abstract class ORMNodeState implements Serializable {
-
-    private static Logger log = Logger.getLogger(ORMNodeState.class);
-
-    protected String uuid;
-    protected String parentUUID;
-    protected String nodeTypeName;
-    protected String definitionId;
-
-    public ORMNodeState() {
-
-    }
-
-    public ORMNodeState(ItemId id) {
-        uuid = id.toString();
-    }
-
-    public ORMNodeState(NodeState state) {
-        fromPersistentNodeState(state);
-    }
-
-    public void fromPersistentNodeState(NodeState state) {
-        getChildNodeEntries().clear();
-        getPropertyEntries().clear();
-        getMixinTypeNames().clear();
-        getParentUUIDs().clear();
-        uuid = state.getUUID();
-        parentUUID = state.getParentUUID();
-        if (state.getNodeTypeName() != null) {
-            nodeTypeName = state.getNodeTypeName().toString();
-        }
-        if (state.getDefinitionId() != null) {
-            definitionId = state.getDefinitionId().toString();
-        }
-        Iterator childNodeEntriesIter = state.getChildNodeEntries().iterator();
-        int i=0;
-        while (childNodeEntriesIter.hasNext()) {
-            ChildNodeEntry curChildNodeEntry = (ChildNodeEntry) childNodeEntriesIter.next();
-            log.debug("childNodeEntry " + curChildNodeEntry.getIndex() + " name=" + curChildNodeEntry.getName() + " uuid=" + curChildNodeEntry.getUUID());
-            ORMChildNodeEntry childNode = new ORMChildNodeEntry(this, curChildNodeEntry, uuid, i);
-            getChildNodeEntries().add(childNode);
-            i++;
-        }
-        Iterator propertyNameIter = state.getPropertyNames().iterator();
-        while (propertyNameIter.hasNext()) {
-            QName curPropertyName = (QName) propertyNameIter.next();
-            log.debug("propertyEntry " + curPropertyName);
-            ORMPropertyEntry propertyEntry = new ORMPropertyEntry(this, curPropertyName, uuid);
-            getPropertyEntries().add(propertyEntry);
-        }
-        Iterator mixinTypeIter = state.getMixinTypeNames().iterator();
-        while (mixinTypeIter.hasNext()) {
-            QName curName = (QName) mixinTypeIter.next();
-            getMixinTypeNames().add(new ORMNodeMixinType(this, uuid, curName.toString()));
-        }
-    }
-
-    public String getUuid() {
-        return uuid;
-    }
-
-    public String getParentUUID() {
-        return parentUUID;
-    }
-
-    public String getNodeTypeName() {
-        return nodeTypeName;
-    }
-
-    public String getDefinitionId() {
-
-        return definitionId;
-    }
-
-    public abstract Collection getChildNodeEntries();
-
-    public abstract Collection getPropertyEntries();
-
-    public abstract Collection getMixinTypeNames();
-
-    public abstract Collection getParentUUIDs();
-
-    public void setUuid(String uuid) {
-        this.uuid = uuid;
-    }
-
-    public void setParentUUID(String parentUUID) {
-        this.parentUUID = parentUUID;
-    }
-
-    public void setNodeTypeName(String nodeTypeName) {
-        this.nodeTypeName = nodeTypeName;
-    }
-
-    public void setDefinitionId(String definitionId) {
-
-        this.definitionId = definitionId;
-    }
-
-    public abstract void setChildNodeEntries(Collection childNodeEntries);
-
-    public abstract void setPropertyEntries(Collection propertyEntries);
-
-    public abstract void setMixinTypeNames(Collection mixinTypeNames);
-
-    public abstract void setParentUUIDs(Collection parentUUIDs);
-
-    public void toPersistentNodeState(NodeState state) {
-        state.setDefinitionId(NodeDefId.valueOf(getDefinitionId()));
-        state.setNodeTypeName(QName.valueOf(getNodeTypeName()));
-        state.setParentUUID(getParentUUID());
-
-        Iterator childNodeEntryIter = getChildNodeEntries().iterator();
-        while (childNodeEntryIter.hasNext()) {
-            ORMChildNodeEntry curChildNodeEntry = (ORMChildNodeEntry) childNodeEntryIter.next();
-            log.debug("  Loaded child node " + QName.valueOf(curChildNodeEntry.getName()) + " uuid=" + curChildNodeEntry.getUuid());
-            state.addChildNodeEntry(QName.valueOf(curChildNodeEntry.getName()), curChildNodeEntry.getUuid());
-        }
-        Iterator propertyEntryIter = getPropertyEntries().iterator();
-        while (propertyEntryIter.hasNext()) {
-            ORMPropertyEntry curPropertyEntry = (ORMPropertyEntry) propertyEntryIter.next();
-            log.debug("  Loaded property " + QName.valueOf(curPropertyEntry.getName()));
-            state.addPropertyName(QName.valueOf(curPropertyEntry.getName()));
-        }
-        Iterator mixinTypeNameIter = getMixinTypeNames().iterator();
-        Set mixinTypeQNames = new HashSet();
-        while (mixinTypeNameIter.hasNext()) {
-            ORMNodeMixinType curMixinType = (ORMNodeMixinType) mixinTypeNameIter.next();
-            mixinTypeQNames.add(QName.valueOf(curMixinType.getMixinTypeName()));
-        }
-        state.setMixinTypeNames(mixinTypeQNames);
-    }
-
-    public boolean equals(Object obj) {
-        if (!(obj instanceof ORMNodeState)) {
-            return false;
-        }
-        ORMNodeState right = (ORMNodeState) obj;
-        if (getUuid().equals(right.getUuid())) {
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-    public int hashCode() {
-        return getUuid().hashCode();
-    }
-}
diff --git a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ORMPropertyEntry.java b/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ORMPropertyEntry.java
deleted file mode 100644
index d455cb3..0000000
--- a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ORMPropertyEntry.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.state.orm;
-
-import java.io.Serializable;
-import org.apache.jackrabbit.name.QName;
-
-/**
- * <p>This class represents a single entry of a property in a node. This
- * class only stores the name of the property, the actual property and it's
- * values are stored in the ORMPropertyState class.</p>
- */
-public class ORMPropertyEntry
-    implements Serializable {
-    private String parentUUID;
-    private String name;
-    private Integer dbId;
-    private ORMNodeState parent;
-    public ORMPropertyEntry() {
-    }
-
-    public ORMPropertyEntry(ORMNodeState parent, QName propertyName, String parentUUID) {
-        this.parent = parent;
-        this.parentUUID = parentUUID;
-        this.name = propertyName.toString();
-    }
-
-    public void setParentUUID(String parentUUID) {
-        this.parentUUID = parentUUID;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public void setDbId(Integer dbId) {
-
-        this.dbId = dbId;
-    }
-
-    public void setParent(ORMNodeState parent) {
-        this.parent = parent;
-    }
-
-    public String getParentUUID() {
-        return parentUUID;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public Integer getDbId() {
-
-        return dbId;
-    }
-
-    public ORMNodeState getParent() {
-        return parent;
-    }
-
-    public boolean equals(Object obj) {
-        if (!(obj instanceof ORMPropertyEntry)) {
-            return false;
-        }
-        ORMPropertyEntry right = (ORMPropertyEntry) obj;
-        if (getName().equals(right.getName())) {
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-    public int hashCode() {
-        return (getName()).hashCode();
-    }
-
-}
diff --git a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ORMPropertyState.java b/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ORMPropertyState.java
deleted file mode 100644
index 79a8599..0000000
--- a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ORMPropertyState.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.state.orm;
-
-import java.io.Serializable;
-
-import org.apache.jackrabbit.core.value.InternalValue;
-import org.apache.jackrabbit.core.ItemId;
-import org.apache.jackrabbit.core.PropertyId;
-import org.apache.jackrabbit.core.nodetype.PropDefId;
-import org.apache.jackrabbit.core.state.ItemStateException;
-import org.apache.jackrabbit.core.state.PropertyState;
-import org.apache.jackrabbit.core.state.orm.ojb.ValuesToStringFieldConversion;
-import org.apache.ojb.broker.accesslayer.conversions.ConversionException;
-import javax.jcr.PropertyType;
-
-/**
- * <p>This class represents a property state in an ORM-compatible format.</p>
- */
-public class ORMPropertyState implements Serializable {
-    private String values;
-    private Integer type;
-    private String definitionId;
-    private Boolean multiValued;
-    private String itemId;
-    private String name;
-    private String parentUUID;
-
-    public ORMPropertyState() {
-    }
-
-    public ORMPropertyState(ItemId id) throws ItemStateException {
-        if (id instanceof PropertyId) {
-            PropertyId propId = (PropertyId) id;
-            this.itemId = propId.toString();
-            name = propId.getName().toString();
-            parentUUID = propId.getParentUUID();
-        } else {
-            throw new ItemStateException("PropertyId expected, instead got " + id.getClass());
-        }
-    }
-
-    public ORMPropertyState(PropertyState state) {
-        fromPersistentPropertyState(state);
-    }
-
-    public void fromPersistentPropertyState(PropertyState state) throws
-        ConversionException {
-        this.itemId = state.getId().toString();
-        name = state.getName().toString();
-        parentUUID = state.getParentUUID();
-        values = (String) new ValuesToStringFieldConversion().javaToSql(state.getValues());
-        type = new Integer(state.getType());
-        if (state.getDefinitionId() != null) {
-            definitionId = state.getDefinitionId().toString();
-        }
-        multiValued = new Boolean(state.isMultiValued());
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public void setValues(String values) {
-        this.values = values;
-    }
-
-    public void setParentUUID(String parentUUID) {
-        this.parentUUID = parentUUID;
-    }
-
-    public void setType(Integer type) {
-        this.type = type;
-    }
-
-    public void setDefinitionId(String definitionId) {
-
-        this.definitionId = definitionId;
-    }
-
-    public void setMultiValued(Boolean multiValued) {
-        this.multiValued = multiValued;
-    }
-
-    public void setItemId(String itemId) {
-
-        this.itemId = itemId;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public String getValues() {
-        return values;
-    }
-
-    public String getParentUUID() {
-        return parentUUID;
-    }
-
-    public Integer getType() {
-        return type;
-    }
-
-    public String getDefinitionId() {
-
-        return definitionId;
-    }
-
-    public Boolean getMultiValued() {
-        return multiValued;
-    }
-
-    public String getItemId() {
-
-        return itemId;
-    }
-
-    public void toPersistentPropertyState(PropertyState state) {
-        if (getDefinitionId() != null) {
-            state.setDefinitionId(PropDefId.valueOf(getDefinitionId()));
-        }
-        if (getType() != null) {
-            state.setType(getType().intValue());
-        }
-        if (getType().intValue() != PropertyType.BINARY) {
-            ValuesToStringFieldConversion vts = new
-                ValuesToStringFieldConversion(getType().intValue());
-            InternalValue[] values = (InternalValue[]) vts.sqlToJava(getValues());
-            if (values.length > 1) {
-                state.setMultiValued(true);
-            } else {
-                state.setMultiValued(multiValued.booleanValue());
-            }
-            state.setValues(values);
-        } else {
-            state.setMultiValued(multiValued.booleanValue());
-        }
-    }
-
-    public boolean equals(Object obj) {
-        if (!(obj instanceof ORMPropertyState)) {
-            return false;
-        }
-        ORMPropertyState right = (ORMPropertyState) obj;
-        if (itemId.equals(right.getItemId())) {
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-    public int hashCode() {
-        return getItemId().hashCode();
-    }
-}
diff --git a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/hibernate/HibernateNodeState.java b/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/hibernate/HibernateNodeState.java
deleted file mode 100644
index e1ce47f..0000000
--- a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/hibernate/HibernateNodeState.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.state.orm.hibernate;
-
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Set;
-
-import org.apache.jackrabbit.core.ItemId;
-import org.apache.jackrabbit.core.state.NodeState;
-import org.apache.jackrabbit.core.state.orm.ORMNodeState;
-import java.util.TreeSet;
-import java.util.List;
-import java.util.ArrayList;
-
-/**
- * <p> Hibernate-specific node state class. This is necessary because
- * in this implementation we use a set to represent lists.</p>
- */
-public class HibernateNodeState extends ORMNodeState {
-
-    // might be a bug here because it seems that these entries should be
-    // ordered
-    private List listChildNodeEntries = new ArrayList();
-    private Set setParentUUIDs = new HashSet();
-    private Set setMixinTypeNames = new HashSet();
-    private Set setPropertyEntries = new HashSet();
-
-    public HibernateNodeState() {
-    }
-    public HibernateNodeState(ItemId id) {
-        super(id);
-    }
-    public HibernateNodeState(NodeState state) {
-        super();
-        fromPersistentNodeState(state);
-    }
-    public Collection getChildNodeEntries() {
-        return listChildNodeEntries;
-    }
-    public void setChildNodeEntries(Collection childNodeEntries) {
-        this.listChildNodeEntries.clear();
-        this.listChildNodeEntries.addAll(childNodeEntries);
-    }
-
-    public Collection getPropertyEntries() {
-        return setPropertyEntries;
-    }
-
-    public Collection getMixinTypeNames() {
-        return setMixinTypeNames;
-    }
-
-    public Collection getParentUUIDs() {
-        return setParentUUIDs;
-    }
-
-    public void setPropertyEntries(Collection propertyEntries) {
-        this.setPropertyEntries.clear();
-        this.setPropertyEntries.addAll(propertyEntries);
-    }
-
-    public void setMixinTypeNames(Collection mixinTypeNames) {
-        this.setMixinTypeNames.clear();
-        this.setMixinTypeNames.addAll(mixinTypeNames);
-    }
-
-    public void setParentUUIDs(Collection parentUUIDs) {
-        this.setParentUUIDs.clear();
-        this.setParentUUIDs.addAll(parentUUIDs);
-    }
-
-    public List getListChildNodeEntries() {
-        return listChildNodeEntries;
-    }
-
-    public void setListChildNodeEntries(List listChildNodeEntries) {
-        this.listChildNodeEntries = listChildNodeEntries;
-    }
-
-    public Set getSetPropertyEntries() {
-        return setPropertyEntries;
-    }
-
-    public void setSetPropertyEntries(Set setPropertyEntries) {
-        this.setPropertyEntries = setPropertyEntries;
-    }
-
-    public Set getSetMixinTypeNames() {
-        return setMixinTypeNames;
-    }
-
-    public void setSetMixinTypeNames(Set setMixinTypeNames) {
-        this.setMixinTypeNames = setMixinTypeNames;
-    }
-
-    public Set getSetParentUUIDs() {
-        return setParentUUIDs;
-    }
-
-    public void setSetParentUUIDs(Set setParentUUIDs) {
-        this.setParentUUIDs = setParentUUIDs;
-    }
-
-}
diff --git a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/hibernate/HibernatePersistenceManager.java b/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/hibernate/HibernatePersistenceManager.java
deleted file mode 100644
index 2314e83..0000000
--- a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/hibernate/HibernatePersistenceManager.java
+++ /dev/null
@@ -1,674 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.state.orm.hibernate;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import javax.jcr.PropertyType;
-
-import org.apache.jackrabbit.core.value.BLOBFileValue;
-import org.apache.jackrabbit.core.value.InternalValue;
-import org.apache.jackrabbit.core.NodeId;
-import org.apache.jackrabbit.core.PropertyId;
-import org.apache.jackrabbit.name.QName;
-import org.apache.jackrabbit.core.state.AbstractPersistenceManager;
-import org.apache.jackrabbit.core.state.ItemState;
-import org.apache.jackrabbit.core.state.ItemStateException;
-import org.apache.jackrabbit.core.state.NoSuchItemStateException;
-import org.apache.jackrabbit.core.state.NodeReferences;
-import org.apache.jackrabbit.core.state.NodeReferencesId;
-import org.apache.jackrabbit.core.state.NodeState;
-import org.apache.jackrabbit.core.state.PMContext;
-import org.apache.jackrabbit.core.state.PropertyState;
-import org.apache.jackrabbit.core.state.orm.ORMBlobValue;
-import org.apache.jackrabbit.core.state.orm.ORMNodeReference;
-import org.apache.jackrabbit.core.state.orm.ORMPropertyState;
-import org.apache.log4j.Logger;
-import net.sf.hibernate.Hibernate;
-import net.sf.hibernate.HibernateException;
-import net.sf.hibernate.ObjectNotFoundException;
-import net.sf.hibernate.Session;
-import net.sf.hibernate.SessionFactory;
-import net.sf.hibernate.Transaction;
-import net.sf.hibernate.cfg.Configuration;
-import net.sf.hibernate.type.Type;
-import org.apache.jackrabbit.core.state.PersistenceManager;
-import org.apache.ojb.broker.PersistenceBroker;
-import org.apache.jackrabbit.core.state.ChangeLog;
-import org.apache.ojb.broker.PersistenceBrokerFactory;
-import org.apache.ojb.broker.PersistenceBrokerException;
-
-/**
- * Hibernate implementation of a Jackrabbit persistence manager.
- */
-public class HibernatePersistenceManager implements PersistenceManager {
-
-    private static Logger log = Logger.getLogger(HibernatePersistenceManager.class);
-
-    private SessionFactory sessionFactory;
-
-    public HibernatePersistenceManager() {
-    }
-
-    /**
-     * @see org.apache.jackrabbit.core.state.PersistenceManager#init
-     */
-    public void init(PMContext context) throws Exception {
-        try {
-            // Create the SessionFactory
-            sessionFactory = new Configuration().configure().
-                buildSessionFactory();
-        } catch (Throwable ex) {
-            log.error("Initial SessionFactory creation failed.", ex);
-            throw new ExceptionInInitializerError(ex);
-        }
-    }
-
-    /**
-     * @see org.apache.jackrabbit.core.state.PersistenceManager#close
-     */
-    public void close() throws Exception {
-    }
-
-    /**
-     * @see org.apache.jackrabbit.core.state.PersistenceManager#load(NodeId)
-     */
-    public NodeState load(NodeId nodeId) throws NoSuchItemStateException,
-        ItemStateException {
-        log.debug("Request for " + nodeId.getUUID());
-
-        NodeState state = null;
-        Session session = null;
-        Transaction tx = null;
-        try {
-            session = sessionFactory.openSession();
-            tx = session.beginTransaction();
-            List nodeList = session.find(
-                "from org.apache.jackrabbit.core.state.orm.hibernate.HibernateNodeState as node WHERE " +
-                "node.uuid = ?",
-                new Object[] {nodeId.getUUID()},
-                new Type[] {Hibernate.STRING});
-
-            tx.commit();
-            if (nodeList.size() != 1) {
-                throw new NoSuchItemStateException("Couldn't find unique node " +
-                    nodeId.getUUID() + ", found " +
-                    nodeList.size() +
-                    " results instead");
-            }
-            HibernateNodeState result = (HibernateNodeState) nodeList.get(0);
-            state = createNew(nodeId);
-            result.toPersistentNodeState(state);
-        } catch (HibernateException he) {
-            try {
-                if (tx != null)
-                    tx.rollback();
-            } catch (HibernateException he2) {
-                log.error("Error while rolling back transaction", he2);
-            }
-            throw new ItemStateException("Error loading " + nodeId.getUUID(),
-                                         he);
-        } finally {
-            if (session != null) {
-                try {
-                    session.close();
-                } catch (HibernateException he) {
-                    throw new ItemStateException(
-                        "Error while closing hibernate session", he);
-                }
-            }
-        }
-        return state;
-    }
-
-    /**
-     * @see org.apache.jackrabbit.core.state.PersistenceManager#load(PropertyId)
-     */
-    public PropertyState load(PropertyId propId) throws
-        NoSuchItemStateException, ItemStateException {
-
-        PropertyState state = null;
-        Session session = null;
-        try {
-            session = sessionFactory.openSession();
-            Transaction tx = session.beginTransaction();
-            ORMPropertyState propState = null;
-            try {
-
-                List propertyList = session.find(
-                    "from org.apache.jackrabbit.core.state.orm.ORMPropertyState as prop WHERE " +
-                    "prop.parentUUID = ? and prop.name = ?",
-                    new Object[] {propId.getParentUUID(),
-                    propId.getName().toString()},
-                    new Type[] {Hibernate.STRING, Hibernate.STRING});
-
-                tx.commit();
-                if (propertyList.size() != 1) {
-                    throw new NoSuchItemStateException(
-                        "Couldn't find unique property " + propId + ", found " +
-                        propertyList.size() + " results instead");
-                }
-                propState = (ORMPropertyState) propertyList.get(0);
-                state = createNew(propId);
-                propState.toPersistentPropertyState(state);
-                if (propState.getType().intValue() == PropertyType.BINARY) {
-                    // we must now load the binary values.
-                    ArrayList internalValueList = new ArrayList();
-                    List blobValueList = session.find(
-                        "from org.apache.jackrabbit.core.state.orm.ORMBlobValue as bv WHERE " +
-                        "bv.parentUUID = ? and bv.propertyName = ?",
-                        new Object[] {propId.getParentUUID(),
-                        propId.getName().toString()},
-                        new Type[] {Hibernate.STRING, Hibernate.STRING});
-
-                    Iterator resultIter = blobValueList.iterator();
-                    while (resultIter.hasNext()) {
-                        ORMBlobValue ormBlobValue = (ORMBlobValue) resultIter.
-                            next();
-                        ByteArrayInputStream in = new ByteArrayInputStream(
-                            ormBlobValue.getBlobValue());
-                        try {
-                            internalValueList.add(InternalValue.create(in));
-                        } catch (Throwable t) {
-                            throw new ItemStateException(
-                                "Error while trying to load blob value", t);
-                        }
-                    }
-                    state.setValues( (InternalValue[]) internalValueList.
-                                    toArray(new
-                                            InternalValue[internalValueList.
-                                            size()]));
-                }
-            } catch (ObjectNotFoundException onfe) {
-                throw new NoSuchItemStateException("Couldn't find " + propId,
-                    onfe);
-            }
-        } catch (HibernateException he) {
-            throw new ItemStateException("Error loading " + propId, he);
-        } finally {
-            if (session != null) {
-                try {
-                    session.close();
-                } catch (HibernateException he) {
-                    throw new ItemStateException(
-                        "Error while closing hibernate session", he);
-                }
-            }
-        }
-        return state;
-    }
-
-    /**
-     * @see org.apache.jackrabbit.core.state.PersistenceManager#load(NodeReferencesId)
-     */
-    public NodeReferences load(NodeReferencesId targetId) throws
-        NoSuchItemStateException, ItemStateException {
-        log.debug("Loading node references for targetId=" +
-                  targetId.toString());
-        NodeReferences refs = null;
-        Session session = null;
-        Transaction tx = null;
-        try {
-            session = sessionFactory.openSession();
-            tx = session.beginTransaction();
-            Iterator nodeRefIter = session.iterate("from org.apache.jackrabbit.core.state.orm.ORMNodeReference as nf where nf.targetId='" +
-                targetId.toString() +
-                "'");
-            refs = new NodeReferences(targetId);
-            while (nodeRefIter.hasNext()) {
-                ORMNodeReference curNodeReference = (ORMNodeReference)
-                    nodeRefIter.
-                    next();
-                refs.addReference(new PropertyId(curNodeReference.
-                                                 getPropertyParentUUID(),
-                                                 QName.
-                                                 valueOf(curNodeReference.
-                    getPropertyName())));
-            }
-            tx.commit();
-        } catch (HibernateException he) {
-            try {
-                if (tx != null)
-                    tx.rollback();
-            } catch (HibernateException he2) {
-                log.error("Error while rolling back transaction", he2);
-            }
-            log.error("Error while loading node reference for targetId=" +
-                      targetId.toString(), he);
-        } finally {
-            if (session != null) {
-                try {
-                    session.close();
-                } catch (HibernateException he) {
-                    throw new ItemStateException(
-                        "Error while closing hibernate session", he);
-                }
-            }
-        }
-        return refs;
-    }
-
-    /**
-     * @see org.apache.jackrabbit.core.state.PersistenceManager#exists(NodeId)
-     */
-    public boolean exists(NodeId id) throws ItemStateException {
-        HibernateNodeState result = null;
-        Session session = null;
-        Transaction tx = null;
-        try {
-            session = sessionFactory.openSession();
-            tx = session.beginTransaction();
-            List nodeList = session.find(
-                "from org.apache.jackrabbit.core.state.orm.hibernate.HibernateNodeState as node WHERE " +
-                "node.uuid = ?",
-                new Object[] {id.toString()},
-                new Type[] {Hibernate.STRING});
-
-            tx.commit();
-            if (nodeList.size() < 1) {
-                return false;
-            } else {
-                if (nodeList.size() > 1) {
-                    log.warn("Node " + id +
-                             " exists more than once in database !");
-                }
-                return true;
-            }
-        } catch (HibernateException he) {
-            try {
-                if (tx != null)
-                    tx.rollback();
-            } catch (HibernateException he2) {
-                log.error("Error while rolling back transaction", he2);
-            }
-            throw new ItemStateException("Error loading " + id, he);
-        } finally {
-            if (session != null) {
-                try {
-                    session.close();
-                } catch (HibernateException he) {
-                    throw new ItemStateException(
-                        "Error while closing hibernate session", he);
-                }
-            }
-        }
-    }
-
-    /**
-     * @see org.apache.jackrabbit.core.state.PersistenceManager#exists(PropertyId)
-     */
-    public boolean exists(PropertyId id) throws ItemStateException {
-        boolean result = false;
-        Session session = null;
-        Transaction tx = null;
-        try {
-            session = sessionFactory.openSession();
-            tx = session.beginTransaction();
-            ORMPropertyState propState = null;
-            PropertyId propId = (PropertyId) id;
-            List propertyList = session.find(
-                "from org.apache.jackrabbit.core.state.orm.ORMPropertyState as prop WHERE " +
-                "prop.parentUUID = ? and prop.name = ?",
-                new Object[] {propId.getParentUUID(),
-                propId.getName().toString()},
-                new Type[] {Hibernate.STRING, Hibernate.STRING});
-
-            tx.commit();
-            if (propertyList.size() < 1) {
-                return false;
-            } else {
-                if (propertyList.size() > 1) {
-                    log.warn("Property " + id +
-                             " exists more than once in database !");
-                }
-                return true;
-            }
-        } catch (HibernateException he) {
-            try {
-                if (tx != null)
-                    tx.rollback();
-            } catch (HibernateException he2) {
-                log.error("Error while rolling back transaction", he2);
-            }
-            throw new ItemStateException("Error loading " + id, he);
-        } finally {
-            if (session != null) {
-                try {
-                    session.close();
-                } catch (HibernateException he) {
-                    throw new ItemStateException(
-                        "Error while closing hibernate session", he);
-                }
-            }
-        }
-    }
-
-    /**
-     * @see org.apache.jackrabbit.core.state.PersistenceManager#exists(NodeReferencesId)
-     */
-    public boolean exists(NodeReferencesId targetId) throws ItemStateException {
-        boolean result = false;
-        Session session = null;
-        Transaction tx = null;
-        try {
-            session = sessionFactory.openSession();
-            tx = session.beginTransaction();
-            Iterator nodeRefIter = session.iterate("from org.apache.jackrabbit.core.state.orm.ORMNodeReference as nf where nf.targetId='" +
-                targetId.toString() +
-                "'");
-            NodeReferences refs = new NodeReferences(targetId);
-            if (nodeRefIter.hasNext()) {
-                result = true;
-            }
-            tx.commit();
-        } catch (HibernateException he) {
-            try {
-                if (tx != null)
-                    tx.rollback();
-            } catch (HibernateException he2) {
-                log.error("Error while rolling back transaction", he2);
-            }
-            throw new ItemStateException(
-                "Error while testing reference existence for targetId=" +
-                targetId, he);
-        } finally {
-            if (session != null) {
-                try {
-                    session.close();
-                } catch (HibernateException he) {
-                    throw new ItemStateException(
-                        "Error while closing hibernate session", he);
-                }
-            }
-        }
-        return result;
-    }
-
-    /**
-     * @see org.apache.jackrabbit.core.state.AbstractPersistenceManager#store(NodeState)
-     */
-    public void store(NodeState state, Session session) throws ItemStateException, HibernateException {
-        log.debug("Request to store " + state.getId());
-        boolean isUpdate = true;
-            HibernateNodeState nodeState = new HibernateNodeState(state);
-            if (state.getStatus() == ItemState.STATUS_NEW) {
-                session.save(nodeState);
-            } else {
-                session.update(nodeState);
-            }
-    }
-
-    /**
-     * @see org.apache.jackrabbit.core.state.AbstractPersistenceManager#store(PropertyState)
-     */
-    public void store(PropertyState state, Session session) throws ItemStateException, HibernateException {
-        log.debug("Request to store " + state.getId());
-        boolean isUpdate = true;
-            ORMPropertyState propState = new ORMPropertyState(state);
-
-            InternalValue[] values = state.getValues();
-            if (values != null) {
-                for (int i = 0; i < values.length; i++) {
-
-                    // first we delete any existing blob values (this is faster
-                    // than trying to load and update each value seperately)
-                    session.delete("from org.apache.jackrabbit.core.state.orm.ORMBlobValue as bv where bv.parentUUID=? AND bv.propertyName=?",
-                                   new Object[] {state.getParentUUID(),
-                                   state.getName().toString()},
-                                   new Type[] {Hibernate.STRING,
-                                   Hibernate.STRING});
-
-                    InternalValue val = values[i];
-                    if (val != null) {
-                        if (state.getType() == PropertyType.BINARY) {
-                            ORMBlobValue ormBlobValue = null;
-                            ormBlobValue = new ORMBlobValue();
-                            ormBlobValue.setParentUUID(state.getParentUUID());
-                            ormBlobValue.setPropertyName(state.getName().
-                                toString());
-                            ormBlobValue.setIndex(new Integer(i));
-                            BLOBFileValue blobVal = (BLOBFileValue) val.
-                                internalValue();
-                            propState.setValues("");
-                            ByteArrayOutputStream out = new
-                                ByteArrayOutputStream();
-                            try {
-                                blobVal.spool(out);
-                            } catch (Throwable t) {
-                                throw new ItemStateException(t.getMessage(), t);
-                            }
-                            ormBlobValue.setSize(new Long(blobVal.getLength()));
-                            ormBlobValue.setBlobValue(out.toByteArray());
-                            session.save(ormBlobValue);
-                        }
-                    }
-                }
-            }
-
-            if (state.getStatus() == ItemState.STATUS_NEW) {
-                session.save(propState);
-            } else {
-                session.update(propState);
-            }
-    }
-
-    /**
-     * @see org.apache.jackrabbit.core.state.AbstractPersistenceManager#store(NodeReferences)
-     */
-    public void store(NodeReferences refs, Session session) throws ItemStateException, HibernateException {
-        Iterator nodeRefPropIdIter = refs.getReferences().iterator();
-        log.debug("Request to store node references for targetId=" +
-                  refs.getTargetId());
-        // destroy all the references before saving
-        destroy(refs, session);
-
-            int i = 0;
-            while (nodeRefPropIdIter.hasNext()) {
-                PropertyId curPropertyId = (PropertyId) nodeRefPropIdIter.next();
-                ORMNodeReference curNodeReference = new ORMNodeReference(refs.
-                    getTargetId().toString(), curPropertyId.getParentUUID(),
-                    curPropertyId.getName().toString());
-                session.save(curNodeReference);
-                i++;
-                if (i % 20 == 0) {
-                    session.flush();
-                    session.clear();
-                }
-            }
-    }
-
-    /**
-     * @see org.apache.jackrabbit.core.state.AbstractPersistenceManager#destroy(NodeState)
-     */
-    public void destroy(NodeState state, Session session) throws ItemStateException, HibernateException {
-        log.debug("Deleting node " + state.getUUID());
-            HibernateNodeState nodeState = null;
-            try {
-                List nodeList = session.find(
-                    "from org.apache.jackrabbit.core.state.orm.hibernate.HibernateNodeState as node WHERE " +
-                    "node.uuid = ?",
-                    new Object[] {state.getId().toString()},
-                    new Type[] {Hibernate.STRING});
-
-                if (nodeList.size() != 1) {
-                } else {
-                    nodeState = (HibernateNodeState) nodeList.get(0);
-                    session.delete(nodeState);
-                }
-            } catch (ObjectNotFoundException onfe) {
-            }
-    }
-
-    /**
-     * @see org.apache.jackrabbit.core.state.AbstractPersistenceManager#destroy(PropertyState)
-     */
-    public void destroy(PropertyState state, Session session) throws ItemStateException, HibernateException {
-        log.debug("Deleting property " + state.getId());
-            ORMPropertyState propState = null;
-            try {
-                List propertyList = session.find(
-                    "from org.apache.jackrabbit.core.state.orm.ORMPropertyState as prop WHERE " +
-                    "prop.itemId = ?",
-                    new Object[] {state.getId().toString()},
-                    new Type[] {Hibernate.STRING});
-
-                if (propertyList.size() != 1) {
-                } else {
-                    propState = (ORMPropertyState) propertyList.get(0);
-                    session.delete(propState);
-                    if (state.getType() == PropertyType.BINARY) {
-                        session.delete("from org.apache.jackrabbit.core.state.orm.ORMBlobValue as bv where bv.parentUUID=? AND bv.propertyName=?",
-                                       new Object[] {state.getParentUUID(),
-                                       state.getName().toString()},
-                                       new Type[] {Hibernate.STRING,
-                                       Hibernate.STRING});
-                    }
-                }
-            } catch (ObjectNotFoundException onfe) {
-            }
-    }
-
-    /**
-     * @see org.apache.jackrabbit.core.state.AbstractPersistenceManager#destroy(NodeReferences)
-     */
-    public void destroy(NodeReferences refs, Session session) throws ItemStateException, HibernateException {
-        log.debug("Deleting node refences for targetId=" +
-                  refs.getTargetId().toString());
-            session.delete("from org.apache.jackrabbit.core.state.orm.ORMNodeReference as nf where nf.targetId='" +
-                           refs.getTargetId().toString() +
-                           "'");
-            refs.clearAllReferences();
-    }
-
-    /**
-     * @see PersistenceManager#createNew
-     */
-    public NodeState createNew(NodeId id)
-    {
-        return new NodeState(id.getUUID(), null, null, NodeState.STATUS_NEW,
-                false);
-    }
-
-    /**
-     * @see PersistenceManager#createNew
-     */
-    public PropertyState createNew(PropertyId id)
-    {
-        return new PropertyState(id.getName(), id.getParentUUID(),
-                PropertyState.STATUS_NEW, false);
-    }
-
-    /**
-     * @see PersistenceManager#store(ChangeLog)
-     *
-     * This method ensures that changes are either written completely to the
-     * underlying persistence layer, or not at all.
-     */
-    public void store(ChangeLog changeLog) throws ItemStateException
-    {
-        Session session = null;
-        Transaction tx = null;
-        try
-        {
-            session = sessionFactory.openSession();
-            tx = session.beginTransaction();
-            Iterator iter = changeLog.deletedStates();
-            while (iter.hasNext())
-            {
-                ItemState state = (ItemState) iter.next();
-                if (state.isNode())
-                {
-                    destroy((NodeState) state, session);
-                } else
-                {
-                    destroy((PropertyState) state, session);
-                }
-            }
-            iter = changeLog.addedStates();
-            while (iter.hasNext())
-            {
-                ItemState state = (ItemState) iter.next();
-                if (state.isNode())
-                {
-                    store((NodeState) state, session);
-                } else
-                {
-                    store((PropertyState) state, session);
-                }
-            }
-            iter = changeLog.modifiedStates();
-            while (iter.hasNext())
-            {
-                ItemState state = (ItemState) iter.next();
-                if (state.isNode())
-                {
-                    store((NodeState) state, session);
-                } else
-                {
-                    store((PropertyState) state, session);
-                }
-            }
-            iter = changeLog.modifiedRefs();
-            while (iter.hasNext())
-            {
-                NodeReferences refs = (NodeReferences) iter.next();
-                if (refs.hasReferences())
-                {
-                    store(refs, session);
-                } else
-                {
-                    destroy(refs, session);
-                }
-            }
-            tx.commit() ;
-        } catch (ItemStateException e)
-        {
-            if (tx != null) {
-                try {
-                    tx.rollback();
-                } catch (HibernateException ex) {
-                    throw new ItemStateException("Error while rolling back", ex);
-                }
-            }
-            throw e;
-        } catch (HibernateException e)
-        {
-            if (tx != null) {
-                try {
-                    tx.rollback();
-                } catch (HibernateException ex) {
-                    throw new ItemStateException("Error while rolling back", ex);
-                }
-            }
-            throw new ItemStateException("Unable to store", e);
-        } finally
-        {
-            if (session != null) {
-                try {
-                    session.close();
-                } catch (HibernateException ex) {
-                    throw new ItemStateException("Error while closing session", ex);
-                }
-            }
-        }
-
-    }
-
-}
diff --git a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ojb/OJBNodeState.java b/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ojb/OJBNodeState.java
deleted file mode 100644
index 477eb4f..0000000
--- a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ojb/OJBNodeState.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.state.orm.ojb;
-
-import java.io.Serializable;
-import java.util.Collection;
-import java.util.List;
-
-import org.apache.jackrabbit.core.ItemId;
-import org.apache.jackrabbit.core.state.NodeState;
-import org.apache.jackrabbit.core.state.orm.ORMNodeState;
-import org.apache.ojb.broker.util.collections.RemovalAwareList;
-
-/**
- * <p> OJB specific node state. In order to properly track list
- * modifications, we use an OJB specific list implementation.</p>
- */
-public class OJBNodeState extends ORMNodeState implements Serializable {
-
-    private List awareChildNodeEntries = new RemovalAwareList();
-    private List awarePropertyEntries = new RemovalAwareList();
-    private List awareMixinTypeNames = new RemovalAwareList();
-    private List awareParentUUIDs = new RemovalAwareList();
-
-    public OJBNodeState() {
-    }
-    public OJBNodeState(ItemId id) {
-        super(id);
-    }
-    public OJBNodeState(NodeState state) {
-        super();
-        fromPersistentNodeState(state);
-    }
-    public Collection getChildNodeEntries() {
-        return awareChildNodeEntries;
-    }
-    public void setChildNodeEntries(Collection childNodeEntries) {
-        this.awareChildNodeEntries.clear();
-        this.awareChildNodeEntries.addAll(childNodeEntries);
-    }
-
-    public List getAwareChildNodeEntries() {
-        return awareChildNodeEntries;
-    }
-
-    public void setAwareChildNodeEntries(List awareChildNodeEntries) {
-        this.awareChildNodeEntries = awareChildNodeEntries;
-    }
-
-    public Collection getPropertyEntries() {
-        return awarePropertyEntries;
-    }
-
-    public Collection getMixinTypeNames() {
-        return awareMixinTypeNames;
-    }
-
-    public Collection getParentUUIDs() {
-        return awareParentUUIDs;
-    }
-
-    public void setPropertyEntries(Collection propertyEntries) {
-        this.awarePropertyEntries.clear();
-        this.awarePropertyEntries.addAll(propertyEntries);
-    }
-
-    public void setMixinTypeNames(Collection mixinTypeNames) {
-        this.awareMixinTypeNames.clear();
-        this.awareMixinTypeNames.addAll(mixinTypeNames);
-    }
-
-    public void setParentUUIDs(Collection parentUUIDs) {
-        this.awareParentUUIDs.clear();
-        this.awareParentUUIDs.addAll(parentUUIDs);
-    }
-
-}
diff --git a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ojb/OJBPersistenceManager.java b/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ojb/OJBPersistenceManager.java
deleted file mode 100644
index 8deab82..0000000
--- a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ojb/OJBPersistenceManager.java
+++ /dev/null
@@ -1,570 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.state.orm.ojb;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.util.ArrayList;
-import java.util.Iterator;
-
-import javax.jcr.PropertyType;
-
-import org.apache.jackrabbit.core.value.BLOBFileValue;
-import org.apache.jackrabbit.core.value.InternalValue;
-import org.apache.jackrabbit.core.NodeId;
-import org.apache.jackrabbit.core.PropertyId;
-import org.apache.jackrabbit.name.QName;
-import org.apache.jackrabbit.core.state.ChangeLog;
-import org.apache.jackrabbit.core.state.ItemState;
-import org.apache.jackrabbit.core.state.ItemStateException;
-import org.apache.jackrabbit.core.state.NoSuchItemStateException;
-import org.apache.jackrabbit.core.state.NodeReferences;
-import org.apache.jackrabbit.core.state.NodeReferencesId;
-import org.apache.jackrabbit.core.state.NodeState;
-import org.apache.jackrabbit.core.state.PMContext;
-import org.apache.jackrabbit.core.state.PersistenceManager;
-import org.apache.jackrabbit.core.state.PropertyState;
-import org.apache.jackrabbit.core.state.orm.ORMBlobValue;
-import org.apache.jackrabbit.core.state.orm.ORMNodeReference;
-import org.apache.jackrabbit.core.state.orm.ORMPropertyState;
-import org.apache.log4j.Logger;
-import org.apache.ojb.broker.PersistenceBroker;
-import org.apache.ojb.broker.PersistenceBrokerException;
-import org.apache.ojb.broker.PersistenceBrokerFactory;
-import org.apache.ojb.broker.query.Criteria;
-import org.apache.ojb.broker.query.QueryByCriteria;
-import org.apache.ojb.broker.query.QueryByIdentity;
-
-/**
- * OJB implementation of a Jackrabbit persistence manager.
- */
-public class OJBPersistenceManager implements PersistenceManager
-{
-
-    private static Logger log = Logger.getLogger(OJBPersistenceManager.class);
-
-    private boolean initialized = false;
-
-    public OJBPersistenceManager()
-    {
-    }
-
-    /**
-     * @see org.apache.jackrabbit.core.state.PersistenceManager#init
-     */
-    public void init(PMContext context) throws Exception
-    {
-        // FIXME: A config param to set the broker name would be handy
-        if (initialized)
-        {
-            throw new IllegalStateException("already initialized");
-        }
-        initialized = true;
-    }
-
-    /**
-     * @see org.apache.jackrabbit.core.state.PersistenceManager#close
-     */
-    public void close() throws Exception
-    {
-        // Nothing to do
-    }
-
-    /**
-     * @see org.apache.jackrabbit.core.state.PersistenceManager#load(NodeId)
-     */
-    public NodeState load(NodeId nodeId) throws NoSuchItemStateException,
-            ItemStateException
-    {
-        PersistenceBroker broker = PersistenceBrokerFactory
-                .defaultPersistenceBroker();
-        try
-        {
-            log.debug("Request for " + nodeId.getUUID());
-            OJBNodeState nodeState = new OJBNodeState();
-            nodeState.setUuid(nodeId.getUUID());
-            QueryByIdentity query = new QueryByIdentity(nodeState);
-            OJBNodeState result = (OJBNodeState) broker.getObjectByQuery(query);
-            if (result == null)
-            {
-                throw new NoSuchItemStateException(nodeId.getUUID());
-            }
-            NodeState state = createNew(nodeId);
-            result.toPersistentNodeState(state);
-            return state;
-        } catch (PersistenceBrokerException e)
-        {
-            throw new ItemStateException(e);
-        } finally
-        {
-            if (broker != null)
-                broker.close();
-        }
-    }
-
-    /**
-     * @see org.apache.jackrabbit.core.state.PersistenceManager#load(PropertyId)
-     */
-    public PropertyState load(PropertyId propId)
-            throws NoSuchItemStateException, ItemStateException
-    {
-        PersistenceBroker broker = PersistenceBrokerFactory
-                .defaultPersistenceBroker();
-        try
-        {
-            log.debug("Request for property " + propId);
-            ORMPropertyState propState = new ORMPropertyState(propId);
-            QueryByIdentity query = new QueryByIdentity(propState);
-            PropertyState state = createNew(propId);
-            ORMPropertyState result = (ORMPropertyState) broker
-                    .getObjectByQuery(query);
-            if (result == null)
-            {
-                throw new NoSuchItemStateException("Couldn't find property "
-                        + propId);
-            }
-            result.toPersistentPropertyState(state);
-            if (result.getType().intValue() == PropertyType.BINARY)
-            {
-                // we must now load the binary values.
-                ArrayList internalValueList = new ArrayList();
-                Criteria criteria = new Criteria();
-                criteria.addEqualTo("parentUUID", state.getParentUUID());
-                criteria.addEqualTo("propertyName", state.getName().toString());
-                QueryByCriteria blobQuery = new QueryByCriteria(
-                        ORMBlobValue.class, criteria);
-                Iterator resultIter = broker.getCollectionByQuery(blobQuery)
-                        .iterator();
-                while (resultIter.hasNext())
-                {
-                    ORMBlobValue ormBlobValue = (ORMBlobValue) resultIter
-                            .next();
-                    ByteArrayInputStream in = new ByteArrayInputStream(
-                            ormBlobValue.getBlobValue());
-                    try
-                    {
-                        internalValueList.add(InternalValue.create(in));
-                    } catch (Throwable t)
-                    {
-                        throw new ItemStateException(
-                                "Error while trying to load blob value", t);
-                    }
-                }
-                state.setValues((InternalValue[]) internalValueList
-                        .toArray(new InternalValue[internalValueList.size()]));
-            }
-            return state;
-        } catch (PersistenceBrokerException e)
-        {
-            throw new ItemStateException(e);
-        } finally
-        {
-            if (broker != null)
-                broker.close();
-        }
-    }
-
-    /**
-     * @see org.apache.jackrabbit.core.state.PersistenceManager#load(NodeReferencesId)
-     */
-    public NodeReferences load(NodeReferencesId targetId)
-            throws NoSuchItemStateException, ItemStateException
-    {
-        PersistenceBroker broker = PersistenceBrokerFactory
-                .defaultPersistenceBroker();
-        try
-        {
-            ORMNodeReference nodeRef = new ORMNodeReference();
-            nodeRef.setTargetId(targetId.toString());
-            QueryByCriteria query = new QueryByCriteria(nodeRef);
-            Iterator resultIter = broker.getCollectionByQuery(query).iterator();
-            NodeReferences refs = new NodeReferences(targetId);
-            while (resultIter.hasNext())
-            {
-                ORMNodeReference curNodeReference = (ORMNodeReference) resultIter
-                        .next();
-                refs.addReference(new PropertyId(curNodeReference
-                        .getPropertyParentUUID(), QName
-                        .valueOf(curNodeReference.getPropertyName())));
-            }
-            return refs;
-        } catch (PersistenceBrokerException e)
-        {
-            throw new ItemStateException(e);
-        } finally
-        {
-            if (broker != null)
-                broker.close();
-        }
-    }
-
-    /**
-     * @see org.apache.jackrabbit.core.state.PersistenceManager#exists(NodeId)
-     */
-    public boolean exists(NodeId id) throws ItemStateException
-    {
-        PersistenceBroker broker = PersistenceBrokerFactory
-                .defaultPersistenceBroker();
-        try
-        {
-            OJBNodeState nodeState = new OJBNodeState(id);
-            QueryByIdentity query = new QueryByIdentity(nodeState);
-            OJBNodeState result = (OJBNodeState) broker.getObjectByQuery(query);
-            if (result == null)
-            {
-                return false;
-            } else
-            {
-                return true;
-            }
-        } catch (PersistenceBrokerException e)
-        {
-            throw new ItemStateException(e);
-        } finally
-        {
-            if (broker != null)
-                broker.close();
-        }
-    }
-
-    /**
-     * @see org.apache.jackrabbit.core.state.PersistenceManager#exists(PropertyId)
-     */
-    public boolean exists(PropertyId id) throws ItemStateException
-    {
-        PersistenceBroker broker = PersistenceBrokerFactory
-                .defaultPersistenceBroker();
-        try
-        {
-            ORMPropertyState propState = new ORMPropertyState(id);
-            // QueryByCriteria query = new QueryByCriteria(propState);
-            QueryByIdentity query = new QueryByIdentity(propState);
-            ORMPropertyState result = (ORMPropertyState) broker
-                    .getObjectByQuery(query);
-            if (result == null)
-            {
-                return false;
-            } else
-            {
-                return true;
-            }
-        } catch (PersistenceBrokerException e)
-        {
-            throw new ItemStateException(e);
-        } finally
-        {
-            if (broker != null)
-                broker.close();
-        }
-    }
-
-    /**
-     * @see org.apache.jackrabbit.core.state.PersistenceManager#exists(NodeReferencesId)
-     */
-    public boolean exists(NodeReferencesId targetId) throws ItemStateException
-    {
-        PersistenceBroker broker = PersistenceBrokerFactory
-                .defaultPersistenceBroker();
-        try
-        {
-
-            ORMNodeReference nodeRef = new ORMNodeReference();
-            nodeRef.setTargetId(targetId.toString());
-            QueryByCriteria query = new QueryByCriteria(nodeRef);
-            Iterator resultIter = broker.getCollectionByQuery(query).iterator();
-            NodeReferences refs = new NodeReferences(targetId);
-            if (resultIter.hasNext())
-            {
-                return true;
-            }
-            return false;
-        } catch (PersistenceBrokerException e)
-        {
-            throw new ItemStateException(e);
-        } finally
-        {
-            if (broker != null)
-                broker.close();
-        }
-    }
-
-    /**
-     * @see org.apache.jackrabbit.core.state.AbstractPersistenceManager#store(NodeState)
-     */
-    private void store(NodeState state, PersistenceBroker broker)
-            throws ItemStateException
-    {
-        log.debug("Request to store node " + state.getId());
-        OJBNodeState nodeState = new OJBNodeState(state.getId());
-        QueryByIdentity query = new QueryByIdentity(nodeState);
-        OJBNodeState result = (OJBNodeState) broker.getObjectByQuery(query);
-        if (result == null)
-        {
-            result = new OJBNodeState();
-        }
-        result.fromPersistentNodeState(state);
-        broker.store(result);
-    }
-
-    /**
-     * @see org.apache.jackrabbit.core.state.AbstractPersistenceManager#store(PropertyState)
-     */
-    private void store(PropertyState state, PersistenceBroker broker)
-            throws ItemStateException
-    {
-        log.debug("Request to store property " + state.getId());
-        ORMPropertyState propState = new ORMPropertyState(state.getId());
-        QueryByIdentity query = new QueryByIdentity(propState);
-        ORMPropertyState result = (ORMPropertyState) broker
-                .getObjectByQuery(query);
-        if (result == null)
-        {
-            result = new ORMPropertyState();
-        }
-        result.fromPersistentPropertyState(state);
-
-        InternalValue[] values = state.getValues();
-        if (values != null)
-        {
-            for (int i = 0; i < values.length; i++)
-            {
-                InternalValue val = values[i];
-                if (val != null)
-                {
-                    if (state.getType() == PropertyType.BINARY)
-                    {
-                        Criteria criteria = new Criteria();
-                        criteria
-                                .addEqualTo("parentUUID", state.getParentUUID());
-                        criteria.addEqualTo("propertyName", state.getName()
-                                .toString());
-                        criteria.addEqualTo("index", new Integer(i));
-                        QueryByCriteria blobQuery = new QueryByCriteria(
-                                ORMBlobValue.class, criteria);
-                        Iterator resultIter = broker.getCollectionByQuery(
-                                blobQuery).iterator();
-                        ORMBlobValue ormBlobValue = null;
-                        if (resultIter.hasNext())
-                        {
-                            ormBlobValue = (ORMBlobValue) resultIter.next();
-                        } else
-                        {
-                            ormBlobValue = new ORMBlobValue();
-                            ormBlobValue.setParentUUID(state.getParentUUID());
-                            ormBlobValue.setPropertyName(state.getName()
-                                    .toString());
-                            ormBlobValue.setIndex(new Integer(i));
-                        }
-                        BLOBFileValue blobVal = (BLOBFileValue) val
-                                .internalValue();
-                        result.setValues("");
-                        ByteArrayOutputStream out = new ByteArrayOutputStream();
-                        try
-                        {
-                            blobVal.spool(out);
-                        } catch (Throwable t)
-                        {
-                            // The caller is responsible of aborting the
-                            // transaction
-                            // broker.abortTransaction();
-                            throw new ItemStateException(t.getMessage(), t);
-                        }
-                        ormBlobValue.setSize(new Long(blobVal.getLength()));
-                        ormBlobValue.setBlobValue(out.toByteArray());
-                        broker.store(ormBlobValue);
-                    }
-                }
-            }
-        }
-        broker.store(result);
-    }
-
-    /**
-     * @see org.apache.jackrabbit.core.state.AbstractPersistenceManager#store(NodeReferences)
-     */
-    private void store(NodeReferences refs, PersistenceBroker broker)
-            throws ItemStateException
-    {
-        // destroy all the references before saving
-        destroy(refs, broker);
-
-        Iterator nodeRefPropIdIter = refs.getReferences().iterator();
-        while (nodeRefPropIdIter.hasNext())
-        {
-            PropertyId curPropertyId = (PropertyId) nodeRefPropIdIter.next();
-            ORMNodeReference curNodeReference = new ORMNodeReference(refs
-                    .getTargetId().toString(), curPropertyId.getParentUUID(),
-                    curPropertyId.getName().toString());
-            broker.store(curNodeReference);
-        }
-    }
-
-    /**
-     * @see org.apache.jackrabbit.core.state.AbstractPersistenceManager#destroy(NodeState)
-     */
-    private void destroy(NodeState state, PersistenceBroker broker)
-            throws ItemStateException
-    {
-        log.debug("Deleting node " + state.getId());
-
-        // Destroy node
-        OJBNodeState nodeState = new OJBNodeState(state.getId());
-        QueryByIdentity query = new QueryByIdentity(nodeState);
-        OJBNodeState result = (OJBNodeState) broker.getObjectByQuery(query);
-        if (result == null)
-        {
-            result = new OJBNodeState();
-        }
-        broker.delete(result);
-    }
-
-    /**
-     * @see org.apache.jackrabbit.core.state.AbstractPersistenceManager#destroy(PropertyState)
-     */
-    private void destroy(PropertyState state, PersistenceBroker broker)
-            throws ItemStateException
-    {
-        ORMPropertyState propState = new ORMPropertyState(state);
-        broker.delete(propState);
-        if (state.getType() == PropertyType.BINARY)
-        {
-            Criteria criteria = new Criteria();
-            criteria.addEqualTo("parentUUID", state.getParentUUID());
-            criteria.addEqualTo("propertyName", state.getName().toString());
-            QueryByCriteria blobQuery = new QueryByCriteria(ORMBlobValue.class,
-                    criteria);
-            broker.deleteByQuery(blobQuery);
-        }
-    }
-
-    /**
-     * @see org.apache.jackrabbit.core.state.AbstractPersistenceManager#destroy(NodeReferences)
-     */
-    private void destroy(NodeReferences refs, PersistenceBroker broker)
-            throws ItemStateException
-    {
-        ORMNodeReference nodeRef = new ORMNodeReference();
-        nodeRef.setTargetId(refs.getTargetId().toString());
-        QueryByCriteria query = new QueryByCriteria(nodeRef);
-        Iterator resultIter = broker.getCollectionByQuery(query).iterator();
-        while (resultIter.hasNext())
-        {
-            ORMNodeReference curNodeReference = (ORMNodeReference) resultIter
-                    .next();
-            broker.delete(curNodeReference);
-        }
-    }
-
-    /**
-     * @see PersistenceManager#createNew
-     */
-    public NodeState createNew(NodeId id)
-    {
-        return new NodeState(id.getUUID(), null, null, NodeState.STATUS_NEW,
-                false);
-    }
-
-    /**
-     * @see PersistenceManager#createNew
-     */
-    public PropertyState createNew(PropertyId id)
-    {
-        return new PropertyState(id.getName(), id.getParentUUID(),
-                PropertyState.STATUS_NEW, false);
-    }
-
-    /**
-     * @see PersistenceManager#store(ChangeLog)
-     *
-     * This method ensures that changes are either written completely to the
-     * underlying persistence layer, or not at all.
-     */
-    public void store(ChangeLog changeLog) throws ItemStateException
-    {
-        PersistenceBroker broker = PersistenceBrokerFactory
-                .defaultPersistenceBroker();
-        try
-        {
-            broker.beginTransaction() ;
-            Iterator iter = changeLog.deletedStates();
-            while (iter.hasNext())
-            {
-                ItemState state = (ItemState) iter.next();
-                if (state.isNode())
-                {
-                    destroy((NodeState) state, broker);
-                } else
-                {
-                    destroy((PropertyState) state, broker);
-                }
-            }
-            iter = changeLog.addedStates();
-            while (iter.hasNext())
-            {
-                ItemState state = (ItemState) iter.next();
-                if (state.isNode())
-                {
-                    store((NodeState) state, broker);
-                } else
-                {
-                    store((PropertyState) state, broker);
-                }
-            }
-            iter = changeLog.modifiedStates();
-            while (iter.hasNext())
-            {
-                ItemState state = (ItemState) iter.next();
-                if (state.isNode())
-                {
-                    store((NodeState) state, broker);
-                } else
-                {
-                    store((PropertyState) state, broker);
-                }
-            }
-            iter = changeLog.modifiedRefs();
-            while (iter.hasNext())
-            {
-                NodeReferences refs = (NodeReferences) iter.next();
-                if (refs.hasReferences())
-                {
-                    store(refs, broker);
-                } else
-                {
-                    destroy(refs, broker);
-                }
-            }
-            broker.commitTransaction() ;
-        } catch (ItemStateException e)
-        {
-            if (broker != null)
-                broker.abortTransaction();
-            throw e;
-        } catch (PersistenceBrokerException e)
-        {
-            if (broker != null)
-                broker.abortTransaction();
-            throw new ItemStateException("Unable to store", e);
-        } finally
-        {
-            if (broker != null)
-                broker.close();
-        }
-
-    }
-
-}
diff --git a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ojb/ValuesToStringFieldConversion.java b/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ojb/ValuesToStringFieldConversion.java
deleted file mode 100644
index 98d3bd4..0000000
--- a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ojb/ValuesToStringFieldConversion.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.state.orm.ojb;
-
-import java.util.ArrayList;
-import java.util.StringTokenizer;
-
-import org.apache.jackrabbit.core.value.InternalValue;
-import org.apache.ojb.broker.accesslayer.conversions.ConversionException;
-import org.apache.ojb.broker.accesslayer.conversions.FieldConversion;
-
-/**
- * <p> Helper class to convert multi-valued properties into an encoded
- * string stored in a single database column.</p>
- */
-public class ValuesToStringFieldConversion
-    implements FieldConversion {
-
-    public static final String SEPARATOR = "#$#";
-
-    private int type;
-
-    public ValuesToStringFieldConversion() {
-    }
-
-    public ValuesToStringFieldConversion(int type) {
-        this.type = type;
-    }
-
-    public Object javaToSql(Object object) throws ConversionException {
-        InternalValue[] values = (InternalValue[]) object;
-        StringBuffer buffer = new StringBuffer();
-        for (int i=0; i < values.length; i++) {
-            buffer.append(values[i].toString());
-            if (i < values.length - 1) {
-                buffer.append(SEPARATOR);
-            }
-        }
-        return buffer.toString();
-    }
-
-    public Object sqlToJava(Object object) throws ConversionException {
-        ArrayList valueList = new ArrayList();
-        StringTokenizer tokenizer = new StringTokenizer((String) object, SEPARATOR);
-        while (tokenizer.hasMoreTokens()) {
-            InternalValue curValue = InternalValue.valueOf(tokenizer.nextToken(), type);
-            valueList.add(curValue);
-        }
-        return (InternalValue[]) valueList.toArray(new InternalValue[valueList.size()]);
-    }
-}
diff --git a/contrib/orm-persistence/src/test/org/apache/jackrabbit/test/orm/BlobTest.java b/contrib/orm-persistence/src/test/org/apache/jackrabbit/test/orm/BlobTest.java
deleted file mode 100644
index ca6e47e..0000000
--- a/contrib/orm-persistence/src/test/org/apache/jackrabbit/test/orm/BlobTest.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.test.orm;
-
-import java.io.BufferedInputStream;
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-import javax.jcr.Node;
-import javax.jcr.NodeIterator;
-import javax.jcr.ValueFactory;
-
-import org.apache.jackrabbit.test.AbstractJCRTest;
-
-/**
- * BLOB insertion/retrieval test case.
- */
-public class BlobTest extends AbstractJCRTest {
-
-    private final static int BLOB_SIZE = 1*1024*1024;
-    byte[] blobContent = new byte[BLOB_SIZE];
-
-    public BlobTest() {
-    }
-
-    public void testBlob() throws Exception {
-            Node rn = superuser.getRootNode();
-
-            NodeIterator nodeIter = rn.getNodes();
-            while (nodeIter.hasNext()) {
-                Node curNode = nodeIter.nextNode();
-            }
-
-            log.println("Creating BLOB data of " + BLOB_SIZE + " bytes...");
-            for (int i=0; i < BLOB_SIZE; i++) {
-                blobContent[i] = (byte) (i % 256);
-            }
-            log.println("Adding BLOB node...");
-            if (!rn.hasNode("blobnode")) {
-                ByteArrayInputStream inputStream = new ByteArrayInputStream(blobContent);
-                Node n = rn.addNode("blobnode", "nt:unstructured");
-                ValueFactory valueFactory = superuser.getValueFactory();
-                n.setProperty("testprop", valueFactory.createValue("Hello, World."));
-                n.setProperty("blobTest", inputStream);
-                superuser.save();
-            }
-            log.println("Verifying BLOB node...");
-            InputStream readInputStream = rn.getProperty("blobnode/blobTest").
-                getStream();
-            int ch = -1;
-            int i=0;
-            BufferedInputStream buf = new BufferedInputStream(readInputStream);
-            while ((ch = buf.read()) != -1) {
-                assertEquals((byte) ch, blobContent[i]);
-                i++;
-            }
-            log.println("Removing BLOB node...");
-            rn.getNode("blobnode").remove();
-            superuser.save();
-    }
-
-}
diff --git a/contrib/orm-persistence/src/test/org/apache/jackrabbit/test/orm/TestAll.java b/contrib/orm-persistence/src/test/org/apache/jackrabbit/test/orm/TestAll.java
deleted file mode 100644
index fc03d69..0000000
--- a/contrib/orm-persistence/src/test/org/apache/jackrabbit/test/orm/TestAll.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.test.orm;
-
-import junit.framework.TestCase;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * Test suite that includes all testcases for the package
- * <code>javax.jcr</code>.
- */
-public class TestAll extends TestCase {
-
-    /**
-     * Returns a <code>Test</code> suite that executes all tests inside this
-     * package.
-     *
-     * @return a <code>Test</code> suite that executes all tests inside this
-     *         package.
-     */
-    public static Test suite() {
-        TestSuite suite = new TestSuite("Jackrabbit ORM persistence tests");
-
-        suite.addTestSuite(BlobTest.class);
-        suite.addTestSuite(XMLImportSpeedTest.class);
-
-        return suite;
-    }
-}
diff --git a/contrib/orm-persistence/src/test/org/apache/jackrabbit/test/orm/XMLImportSpeedTest.java b/contrib/orm-persistence/src/test/org/apache/jackrabbit/test/orm/XMLImportSpeedTest.java
deleted file mode 100644
index ca32887..0000000
--- a/contrib/orm-persistence/src/test/org/apache/jackrabbit/test/orm/XMLImportSpeedTest.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.test.orm;
-
-import java.io.FileInputStream;
-import javax.jcr.Node;
-import javax.jcr.NodeIterator;
-import javax.jcr.Property;
-import javax.jcr.PropertyIterator;
-import javax.jcr.PropertyType;
-import javax.jcr.RepositoryException;
-import javax.jcr.Value;
-
-import org.apache.jackrabbit.test.AbstractJCRTest;
-import org.dom4j.Document;
-import org.dom4j.Element;
-import org.dom4j.io.SAXReader;
-import javax.jcr.ImportUUIDBehavior;
-
-/**
- * Test suite for XML import speed benchmarking.
- */
-public class XMLImportSpeedTest extends AbstractJCRTest {
-
-    private static final int BLOB_NODE_COUNT = 2;
-    private static final int XML_IMPORT_NODE_COUNT = 1;
-
-    private final String XML_IMPORT_FILENAME = "applications/test/import.xml";
-
-    private int totalNodeCount = 0;
-    private int totalElementCount = 0;
-    private int totalAttributeCount = 0;
-
-    public void treeWalk(Document document) {
-        treeWalk(document.getRootElement());
-    }
-
-    public void treeWalk(Element element) {
-        totalElementCount++;
-        totalAttributeCount += element.attributeCount();
-        for (int i = 0, size = element.nodeCount(); i < size; i++) {
-            totalNodeCount++;
-            org.dom4j.Node node = element.node(i);
-            if (node instanceof Element) {
-                treeWalk( (Element) node);
-            } else {
-                // do something....
-            }
-        }
-    }
-
-    public void testXMLImportSpeed() throws Exception {
-        Node rn = superuser.getRootNode();
-
-        if (!rn.hasNode("importxml0")) {
-            log.println("importing xml");
-
-            SAXReader reader = new SAXReader();
-            Document document = reader.read(new FileInputStream(
-                XML_IMPORT_FILENAME));
-            treeWalk(document);
-            log.println("XML file " + XML_IMPORT_FILENAME + " has " +
-                        totalElementCount + " elements, " + totalNodeCount +
-                        " nodes and " + totalAttributeCount +
-                        " attributes");
-
-            log.println("Now performing XML import " +
-                        XML_IMPORT_NODE_COUNT +
-                        " time(s)...");
-            long xmlImportTestStart = System.currentTimeMillis();
-            for (int i = 0; i < XML_IMPORT_NODE_COUNT; i++) {
-                Node nl = rn.addNode("importxml" + i, "nt:unstructured");
-                superuser.importXML("/importxml" + i,
-                                    new FileInputStream(
-                                        XML_IMPORT_FILENAME), ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW);
-                log.println("Saving...");
-                superuser.save();
-            }
-            long xmlImportTestTime = System.currentTimeMillis() -
-                xmlImportTestStart;
-            log.println("Imported XML " + XML_IMPORT_NODE_COUNT +
-                        " time(s) in " +
-                        xmlImportTestTime + "ms average=" +
-                        xmlImportTestTime / XML_IMPORT_NODE_COUNT +
-                        "ms/node");
-
-            log.println("Removing imported node(s)...");
-            for (int i = 0; i < XML_IMPORT_NODE_COUNT; i++) {
-                Node curXMLImportNode = rn.getNode("importxml" + i);
-                curXMLImportNode.remove();
-            }
-            superuser.save();
-        } else {
-            log.println(
-                "XML import has already been run previously, not reimporting on same nodes");
-        }
-
-        // dump(rn);
-
-    }
-
-    public void dump(Node n) throws RepositoryException {
-        log.println(n.getPath());
-        PropertyIterator pit = n.getProperties();
-        while (pit.hasNext()) {
-            Property p = pit.nextProperty();
-            if (!p.getDefinition().isMultiple()) {
-                Value curValue = p.getValue();
-                if (curValue.getType() == PropertyType.BINARY) {
-                    log.println(p.getPath() + "=BINARY[" + p.getLength() + "]");
-                } else {
-                    log.println(p.getPath() + "=" + p.getString());
-                }
-            } else {
-                log.println("Multi-value for " + p.getPath());
-            }
-        }
-        NodeIterator nit = n.getNodes();
-        while (nit.hasNext()) {
-            Node cn = nit.nextNode();
-            dump(cn);
-        }
-    }
-
-}
diff --git a/contrib/phpcr/PHPCR/AccessDeniedException.php b/contrib/phpcr/PHPCR/AccessDeniedException.php
deleted file mode 100644
index ac6a309..0000000
--- a/contrib/phpcr/PHPCR/AccessDeniedException.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/RepositoryException.php';
-
-
-/**
- * Exception thrown by access-related methods.
- * <p>
- * <b>Level 2 only</b>
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package PHPCR
- */
-class AccessDeniedException extends RepositoryException
-{
-}
-
-?>
diff --git a/contrib/phpcr/PHPCR/Credentials.php b/contrib/phpcr/PHPCR/Credentials.php
deleted file mode 100644
index e5c2e16..0000000
--- a/contrib/phpcr/PHPCR/Credentials.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-/**
- * Interface for all credentials that may be passed to the
- * {@link Repository#login(Credentials credentials, String workspaceName)} method.
- * Serves as a marker interface that all repositories must implement when
- * providing a credentials class. See {@link SimpleCredentials} for one example
- * of such a class.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- */
-interface Credentials
-{
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/IOException.php b/contrib/phpcr/PHPCR/IOException.php
deleted file mode 100644
index 656ebf3..0000000
--- a/contrib/phpcr/PHPCR/IOException.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-/**
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- */
-class IOException extends Exception
-{
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/IllegalArgumentException.php b/contrib/phpcr/PHPCR/IllegalArgumentException.php
deleted file mode 100644
index 4eb1eca..0000000
--- a/contrib/phpcr/PHPCR/IllegalArgumentException.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-/**
- * Exception thrown by access-related methods.
- * <p>
- * <b>Level 2 only</b>
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- */
-class IllegalArgumentException extends Exception
-{
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/IllegalStateException.php b/contrib/phpcr/PHPCR/IllegalStateException.php
deleted file mode 100644
index 4301944..0000000
--- a/contrib/phpcr/PHPCR/IllegalStateException.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-/**
- * Exception thrown by access-related methods.
- * <p>
- * <b>Level 2 only</b>
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- */
-class IllegalStateException extends Exception
-{
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/InvalidItemStateException.php b/contrib/phpcr/PHPCR/InvalidItemStateException.php
deleted file mode 100644
index ab83fd6..0000000
--- a/contrib/phpcr/PHPCR/InvalidItemStateException.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/RepositoryException.php';
-
-
-/**
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- */
-class InvalidItemStateException extends RepositoryException
-{
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/InvalidSerializedDataException.php b/contrib/phpcr/PHPCR/InvalidSerializedDataException.php
deleted file mode 100644
index 4664432..0000000
--- a/contrib/phpcr/PHPCR/InvalidSerializedDataException.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/RepositoryException.php';
-
-
-/**
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- */
-class InvalidSerializedDataException extends RepositoryException
-{
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/Item.php b/contrib/phpcr/PHPCR/Item.php
deleted file mode 100644
index 3121c4e..0000000
--- a/contrib/phpcr/PHPCR/Item.php
+++ /dev/null
@@ -1,385 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/Item.php';
-require_once 'PHPCR/Node.php';
-require_once 'PHPCR/Session.php';
-require_once 'PHPCR/RepositoryException.php';
-require_once 'PHPCR/AccessDeniedException.php';
-require_once 'PHPCR/ItemNotFoundException.php';
-require_once 'PHPCR/ReferentialIntegrityException.php';
-require_once 'PHPCR/nodetype/ConstraintViolationException.php';
-require_once 'PHPCR/InvalidItemStateException.php';
-require_once 'PHPCR/version/VersionException.php';
-require_once 'PHPCR/lock/LockException.php';
-require_once 'PHPCR/ItemVisitor.php';
-
-
-/**
- * The <code>Item</code> is the base interface of <code>Node</code>
- * and <code>Property</code>.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- */
-interface Item
-{
-    /**
-     * Returns the absolute path to this item.
-     * If the path includes items that are same-name sibling nodes properties
-     * then those elements in the path will include the appropriate
-     * "square bracket" index notation (for example, <code>/a/b[3]/c</code>).
-     *
-     * @return the path of this <code>Item</code>.
-     * @throws RepositoryException if an error occurs.
-     */
-    public function getPath();
-
-    /**
-     * Returns the name of this <code>Item</code>. The name of an item is the
-     * last element in its path, minus any square-bracket index that may exist.
-     * If this <code>Item</code> is the root node of the workspace (i.e., if
-     * <code>this.getDepth() == 0</code>), an empty string will be returned.
-     * <p>
-     *
-     * @return the (or a) name of this <code>Item</code> or an empty string
-     * if this <code>Item</code> is the root node.
-     *
-     * @throws RepositoryException if an error occurs.
-     */
-    public function getName();
-
-    /**
-     * Returns the ancestor of the specified depth.
-     * An ancestor of depth <i>x</i> is the <code>Item</code> that is <i>x</i>
-     * levels down along the path from the root node to <i>this</i>
-     * <code>Item</code>.
-     * <ul>
-     * <li><i>depth</i> = 0 returns the root node.
-     * <li><i>depth</i> = 1 returns the child of the root node along the path
-     * to <i>this</i> <code>Item</code>.
-     * <li><i>depth</i> = 2 returns the grandchild of the root node along the
-     * path to <i>this</i> <code>Item</code>.
-     * <li>And so on to <i>depth</i> = <i>n</i>, where <i>n</i> is the depth
-     * of <i>this</i> <code>Item</code>, which returns <i>this</i>
-     * <code>Item</code> itself.
-     * </ul>
-     * If <i>depth</i> &gt; <i>n</i> is specified then a
-     * <code>ItemNotFoundException</code> is thrown.
-     * <p>
-     *
-     * @param depth An integer, 0 &lt;= <i>depth</i> &lt;= <i>n</i> where <i>n</i> is the depth
-     * of <i>this</i> <code>Item</code>.
-     *
-     * @return The ancestor of this
-     * <code>Item</code> at the specified <code>depth</code>.
-     *
-     * @throws ItemNotFoundException if <i>depth</i> &lt; 0 or
-     * <i>depth</i> &gt; <i>n</i> where <i>n</i> is the is the depth of
-     * this item.
-     *
-     * @throws AccessDeniedException if the current session does not have
-     * sufficient access rights to retrieve the specified node.
-     *
-     * @throws RepositoryException if another error occurs.
-     */
-    public function getAncestor( $depth );
-
-    /**
-     * Returns the parent of this <code>Item</code>.
-     *
-     * @return The parent of this <code>Item</code>.
-     *
-     * @throws ItemNotFoundException if there is no parent.  This only happens
-     * if this item is the root node of a workspace.
-     *
-     * @throws AccessDeniedException if the current session does not have
-     * sufficient access rights to retrieve the parent of this item.
-     *
-     * @throws RepositoryException if another error occurs.
-     */
-    public function getParent();
-
-    /**
-     * Returns the depth of this <code>Item</code> in the workspace tree.
-     * Returns the depth below the root node of <i>this</i> <code>Item</code>
-     * (counting <i>this</i> <code>Item</code> itself).
-     * <ul>
-     * <li>The root node returns 0.
-     * <li>A property or child node of the root node returns 1.
-     * <li>A property or child node of a child node of the root returns 2.
-     * <li>And so on to <i>this</i> <code>Item</code>.
-     * </ul>
-     *
-     * @return The depth of this <code>Item</code> in the workspace hierarchy.
-     * @throws RepositoryException if an error occurs.
-     */
-    public function getDepth();
-
-    /**
-     * Returns the <code>Session</code> through which this <code>Item</code>
-     * was acquired.
-     * Every <code>Item</code> can ultimately be traced back through a series
-     * of method calls to the call <code>{@link Session#getRootNode}</code>,
-     * <code>{@link Session#getItem}</code> or
-     * <code>{@link Session#getNodeByUUID}</code>. This method returns that
-     * <code>Session</code> object.
-     *
-     * @return the <code>Session</code> through which this <code>Item</code> was
-     * acquired.
-     * @throws RepositoryException if an error occurs.
-     */
-    public function getSession();
-
-    /**
-     * Indicates whether this <code>Item</code> is a <code>Node</code> or a
-     * <code>Property</code>.
-     * Returns <code>true</code> if this <code>Item</code> is a <code>Node</code>;
-     * Returns <code>false</code> if this <code>Item</code> is a <code>Property</code>.
-     *
-     * @return <code>true</code> if this <code>Item</code> is a
-     * <code>Node</code>, <code>false</code> if it is a <code>Property</code>.
-     */
-    public function isNode();
-
-    /**
-     * Returns <code>true</code> if this is a new item, meaning that it exists only in transient
-     * storage on the <code>Session</code> and has not yet been saved. Within a transaction,
-     * <code>isNew</code> on an <code>Item</code> may return <code>false</code> (because the item
-     * has been saved) even if that <code>Item</code> is not in persistent storage (because the
-     * transaction has not yet been committed).
-     * <p>
-     * Note that if an item returns <code>true</code> on <code>isNew</code>,
-     * then by definition is parent will return <code>true</code> on <code>isModified</code>.
-     * <p>
-     * Note that in level 1 (that is, read-only) implementations,
-     * this method will always return <code>false</code>.
-     *
-     * @return <code>true</code> if this item is new; <code>false</code> otherwise.
-     */
-    public function isNew();
-
-    /**
-     * Returns <code>true</code> if this <code>Item</code> has been saved but has subsequently
-     * been modified through the current session and therefore the state of this item as recorded
-     * in the session differs from the state of this item as saved. Within a transaction,
-     * <code>isModified</code> on an <code>Item</code> may return <code>false</code> (because the
-     * <code>Item</code> has been saved since the modification) even if the modification in question
-     * is not in persistent storage (because the transaction has not yet been committed).
-     * <p>
-     * Note that in level 1 (that is, read-only) implementations,
-     * this method will always return <code>false</code>.
-     *
-     * @return <code>true</code> if this item is modified; <code>false</code> otherwise.
-     */
-    public function isModified();
-
-    /**
-     * Returns <code>true</code> if this <code>Item</code> object
-     * (the Java object instance) represents the same actual repository item as the
-     * object <code>otherItem</code>.
-     * <p>
-     * This method does not compare the <i>states</i> of the two items. For example,
-     * if two <code>Item</code> objects representing the same actual repository item
-     * have been retrieved through two different sessions and one has been modified,
-     * then this method will still return <code>true</code> for these two objects.
-     * Note that if two <code>Item</code> objects representing the same repository item
-     * are retrieved through the <i>same</i> session they will always reflect the
-     * same state (see section 6.3.1 <i>Reflecting Item State</i> in the specification
-     * document) so comparing state is not an issue.
-     *
-     * @param otherItem the <code>Item</code> object to be tested for identity with this <code>Item</code>.
-     *
-     * @return <code>true</code> if this <code>Item</code> object and <code>otherItem</code> represent the same actual repository
-     * item; <code>false</code> otherwise.
-     */
-    public function isSame( $otherItem );
-
-    /**
-     * Accepts an <code>ItemVistor</code>.
-     * Calls the appropriate <code>ItemVistor</code>
-     * <code>visit</code> method of the according to whether <i>this</i>
-     * <code>Item</code> is a <code>Node</code> or a <code>Property</code>.
-     *
-     * @param visitor The ItemVisitor to be accepted.
-     *
-     * @throws RepositoryException if an error occurs.
-     */
-    public function accept( ItemVisitor $visitor );
-
-    /**
-     * Validates all pending changes currently recorded in this <code>Session</code> that apply to this <code>Item</code>
-     * or any of its descendants (that is, the subtree rooted at this Item). If validation of <i>all</i>
-     * pending changes succeeds, then this change information is cleared from the <code>Session</code>.
-     * If the <code>save</code> occurs outside a transaction, the changes are persisted and thus
-     * made visible to other <code>Sessions</code>. If the <code>save</code> occurs within a transaction,
-     * the changes are not persisted until the transaction is committed.
-     * <p>
-     * If validation fails, then no pending changes are saved and they remain recorded on the <code>Session</code>.
-     * There is no best-effort or partial save.
-     * <p>
-     * When an item is saved the item in persistent storage to which pending changes are written is
-     * determined as follows:
-     * <ul>
-     *   <li>
-     *     If the transient item has a UUID, then the changes are written to the persistent item with the same UUID.
-     *   </li>
-     *   <li>
-     *     If the transient item does not have a UUID then its nearest ancestor with a UUID, or the root node
-     *     (whichever occurs first) is found, and the relative path from the node in persistent node with that UUID is
-     *     used to determine the item in persistent storage to which the changes are to be written.
-     *   </li>
-     * </ul>
-     * As a result of these rules, a <code>save</code> of an item that has a UUID will succeed even if that item has,
-     * in the meantime, been moved in persistent storage to a new location (that is, its path has changed). However, a
-     * <code>save</code> of a non-UUID item will fail (throwing an <code>InvalidItemStateException</code>) if it has,
-     * in the meantime, been moved in persistent storage to a new location. A <code>save</code> of a non-UUID item will
-     * also fail if it has, in addition to being moved, been replaced in its original position by a UUID-bearing item.
-     * <p>
-     * Note that <code>save</code> uses the same rules to match items between transient storage and persistent storage
-     * as {@link Node#update} does to match nodes between two workspaces.
-     * <p>
-     * An <code>AccessDeniedException</code> will be thrown if any of the changes
-     * to be persisted would violate the access privileges of this
-     * <code>Session</code> or if. Also thrown if  any of the
-     * changes to be persisted would cause the removal of a node that is currently
-     * referenced by a <code>REFERENCE</code> property that this Session
-     * <i>does not</i> have read access to.
-     * <p>
-     * A <code>ConstraintViolationException</code> will be thrown if any of the
-     * changes to be persisted would violate a node type restriction.
-     * Additionally, a repository may use this exception to enforce
-     * implementation- or configuration-dependant restrictions.
-     * <p>
-     * An <code>InvalidItemStateException</code> is thrown if any of the
-     * changes to be persisted conflicts with a change already persisted
-     * through another session and the implementation is such that this
-     * conflict can only be detected at save-time and therefore was not
-     * detected earlier, at change-time.
-     * <p>
-     * A <code>ReferentialIntegrityException</code> is thrown if any of the
-     * changes to be persisted would cause the removal of a node that is currently
-     * referenced by a <code>REFERENCE</code> property that this <code>Session</code>
-     * has read access to.
-     * <p>
-     * A <code>VersionException</code> is thrown if the <code>save</code> would make a result in
-     * a change to persistent storage that would violate the read-only status of a
-     * checked-in node.
-     * <p>
-     * A <code>LockException</code> is thrown if the <code>save</code> would result in a
-     * change to persistent storage that would violate a lock.
-     * <p>
-     * A <code>RepositoryException</code> will be thrown if another error
-     * occurs.
-     *
-     * @throws AccessDeniedException if any of the changes to be persisted would violate
-     * the access privileges of the this <code>Session</code>. Also thrown if  any of the
-     * changes to be persisted would cause the removal of a node that is currently
-     * referenced by a <code>REFERENCE</code> property that this Session
-     * <i>does not</i> have read access to.
-     * @throws ConstraintViolationException if any of the changes to be persisted would
-     * violate a node type or restriction. Additionally, a repository may use this
-     * exception to enforce implementation- or configuration-dependent restrictions.
-     * @throws InvalidItemStateException if any of the
-     * changes to be persisted conflicts with a change already persisted
-     * through another session and the implementation is such that this
-     * conflict can only be detected at save-time and therefore was not
-     * detected earlier, at change-time.
-     * @throws ReferentialIntegrityException if any of the
-     * changes to be persisted would cause the removal of a node that is currently
-     * referenced by a <code>REFERENCE</code> property that this <code>Session</code>
-     * has read access to.
-     * @throws VersionException if the <code>save</code> would make a result in
-     * a change to persistent storage that would violate the read-only status of a
-     * checked-in node.
-     * @throws LockException if the <code>save</code> would result in a
-     * change to persistent storage that would violate a lock.
-     * @throws RepositoryException if another error occurs.
-     */
-    public function save();
-
-    /**
-     * If <code>keepChanges</code> is <code>false</code>, this method discards all pending changes
-     * currently recorded in this <code>Session</code> that apply to this Item or any of its descendants
-     * (that is, the subtree rooted at this Item)and returns all items to reflect the current
-     * saved state. Outside a transaction this state is simple the current state of persistent storage.
-     * Within a transaction, this state will reflect persistent storage as modified by changes that have
-     * been saved but not yet committed.
-     * <p>
-     * If <code>keepChanges</code> is true then pending change are not discarded but items that do not
-     * have changes pending have their state refreshed to reflect the current saved state, thus revealing
-     * changes made by other sessions.
-     * <p>
-     * An <code>InvalidItemStateException</code> is thrown if this <code>Item</code> object represents a
-     * workspace item that has been removed (either by this session or another).
-     *
-     * @throws InvalidItemStateException if this
-     * <code>Item</code> object represents a workspace item that has been
-     * removed (either by this session or another).
-     *
-     * @throws RepositoryException if another error occurs.
-     */
-    public function refresh( $keepChanges );
-
-    /**
-     * Removes <code>this</code> item (and its subtree).
-     * <p/>
-     * To persist a removal, a <code>save</code> must be
-     * performed that includes the (former) parent of the
-     * removed item within its scope.
-     * <p/>
-     * A <code>ConstraintViolationException</code> will be thrown immediately if
-     * removing the specified item would violate a node type or implementation-specific
-     * constraint and that violation can be detected at the time that the <code>remove</code>
-     * method is called. Otherwise, a <code>ConstraintViolationException</code> will be
-     * thrown on <code>save</code> if the violation can only be detected later, at the time that
-     * the <code>save</code> method is called. Note that implementations may differ as to which
-     * constraints are enforced immediately and which on <code>save</code>.
-     * <p/>
-     * A <code>ReferentialIntegrityException</code> will be thrown on <code>save</code>
-     * if the item in question is currently the target of a <code>REFERENCE</code>
-     * property elsewhere in the workspace and the current <code>Session</code>
-     * has read access to that <code>REFERENCE</code> property.
-     * <p/>
-     * An <code>AccessDeniedException</code> will be thrown on <code>save</code>
-     * if the item in question is currently the target of a <code>REFERENCE</code>
-     * property elsewhere in the workspace and the current <code>Session</code>
-     * <i>does not</i> have read access to that REFERENCE property.
-     * <p/>
-     * A <code>VersionException</code> is thrown immediately (not on <code>save</code>)
-     * if the parent node of this item is versionable and
-     * currently checked-in or is non-versionable and its nearest versionable ancestor is checked in.
-     * Note that if this item itself is checked-in
-     * (but not its parent) then it can be removed.
-     * <p/>
-     * A <code>LockException</code> is thrown if a lock prevents the removal of this item.
-     *
-     * @throws VersionException if the parent of this node is versionable and
-     * currently checked-in (and therefore read-only).
-     * @throws LockException if a lock prevents the removal of this item.
-     * @throws ConstraintViolationException if removing the specified item would violate a node type or
-     * implementation-specific constraint and that violation is detected at the
-     * time of calling the <code>remove</code> method.
-     * @throws RepositoryException if an error occurs.
-     */
-    public function remove();
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/ItemExistsException.php b/contrib/phpcr/PHPCR/ItemExistsException.php
deleted file mode 100644
index 83d0035..0000000
--- a/contrib/phpcr/PHPCR/ItemExistsException.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/RepositoryException.php';
-
-
-/**
- * An exception thrown when an attempt is made to place an item in a position
- * where another item already exists.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- */
-class ItemExistsException extends RepositoryException
-{
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/ItemNotFoundException.php b/contrib/phpcr/PHPCR/ItemNotFoundException.php
deleted file mode 100644
index fc0e77d..0000000
--- a/contrib/phpcr/PHPCR/ItemNotFoundException.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/RepositoryException.php';
-
-
-/**
- * Exception thrown by methods of <code>Item</code>, <code>Node</code>
- * and <code>Workspace</code> when an item is not found.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- */
-class ItemNotFoundException extends RepositoryException
-{
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/ItemVisitor.php b/contrib/phpcr/PHPCR/ItemVisitor.php
deleted file mode 100644
index d5f5287..0000000
--- a/contrib/phpcr/PHPCR/ItemVisitor.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/Property.php';
-require_once 'PHPCR/Node.php';
-require_once 'PHPCR/RepositoryException.php';
-
-
-/**
- * The <code>ItemVisitor</code> defines an interface for the
- * <i>Visitor</i> design pattern (see, for example, <i>Design Patterns</i>,
- * Gamma <i>et al.</i>, 1995).
- * This interface defines two signatures of the
- * <code>visit</code> method; one taking a <code>Node</code>, the other a
- * <code>Property</code>. When an object implementing this interface is passed
- * to <code>Item#accept(ItemVisitor visitor)</code> the appropriate
- * <code>visit</code> method is automatically called, depending on whether the
- * <code>Item</code> in question is a <code>Node</code> or a
- * <code>Property</code>. Different implementations of this interface can be
- * written for different purposes. It is, for example, possible for the
- * <code>visit(Node node)</code> method to call <code>accept</code> on the
- * children of the passed node and thus recurse through the tree performing some
- * operation on each <code>Item</code>.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- */
-interface ItemVisitor
-{
-    /**
-     * This method is called when the <code>ItemVisitor</code> is
-     * passed to the <code>accept</code> method of a <code>Property</code>.
-     * If this method throws an exception the visiting process is aborted.
-     *
-     * @param property The <code>Property</code> or <code>Node</code> that is accepting this visitor.
-     *
-     * @throws RepositoryException if an error occurrs
-     */
-    public function visit( $entry );
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/LoginException.php b/contrib/phpcr/PHPCR/LoginException.php
deleted file mode 100644
index 0c00805..0000000
--- a/contrib/phpcr/PHPCR/LoginException.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/RepositoryException.php';
-
-
-/**
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- */
-class LoginException extends RepositoryException
-{
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/MergeException.php b/contrib/phpcr/PHPCR/MergeException.php
deleted file mode 100644
index c2745f2..0000000
--- a/contrib/phpcr/PHPCR/MergeException.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/RepositoryException.php';
-
-
-/**
- * Exception thrown by Node#merge(String srcWorksapce, boolean shallow).
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- */
-class MergeException extends RepositoryException
-{
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/NamespaceException.php b/contrib/phpcr/PHPCR/NamespaceException.php
deleted file mode 100644
index 3377500..0000000
--- a/contrib/phpcr/PHPCR/NamespaceException.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/RepositoryException.php';
-
-
-/**
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- */
-class NamespaceException extends RepositoryException
-{
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/NamespaceRegistry.php b/contrib/phpcr/PHPCR/NamespaceRegistry.php
deleted file mode 100644
index e48fc48..0000000
--- a/contrib/phpcr/PHPCR/NamespaceRegistry.php
+++ /dev/null
@@ -1,144 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/RepositoryException.php';
-require_once 'PHPCR/NamespaceException.php';
-require_once 'PHPCR/UnsupportedRepositoryOperationException.php';
-
-
-/**
- * The <code>Item</code> is the base interface of <code>Node</code>
- * and <code>Property</code>.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- */
-interface NamespaceRegistry
-{
-    /**
-     * Sets a one-to-one mapping between prefix and URI in the global namespace registry of this repository.
-     * Assigning a new prefix to a URI that already exists in the namespace registry erases the old prefix.
-     * In general this can almost always be done, though an implementation is free to prevent particular
-     * remappings by throwing a <code>NamespaceException</code>.
-     * <p>
-     * On the other hand, taking a prefix that is already assigned to a URI and re-assigning it to a new URI
-     * in effect unregisters that URI. Therefore, the same restrictions apply to this operation as to
-     * <code>NamespaceRegistry.unregisterNamespace</code>:
-     * <ul>
-     * <li>
-     * Attempting to re-assign a built-in prefix (<code>jcr</code>, <code>nt</code>, <code>mix</code>,
-     * <code>sv</code>) to a new URI will throw a <code>NamespaceException</code>.
-     * </li>
-     * <li>
-     * Attempting to re-assign a prefix that is currently assigned to a URI that is present in content
-     * (either within an item name or within the value of a <code>NAME</code> or <code>PATH</code> property)
-     * will throw a <code>NamespaceException</code>. This includes prefixes in use within in-content node type definitions.
-     * </li>
-     * <li>
-     * Attempting to assign any prefix beginning with "<code>xml</code>". These prefixes are reserved by the
-     * XML specification.
-     * </li>
-     * <li>
-     * An implementation may prevent the re-assignment of any other namespace prefixes for
-     * implementation-specific reasons by throwing a <code>NamespaceException</code>.
-     * </li>
-     * </ul>
-     * In a level 1 implementation, this method always throws an
-     * <code>UnsupportedRepositoryOperationException</code>.
-     * <p/>
-     * A <code>RepositoryException</code> is thrown if another error occurs.
-     *
-     * @param prefix The prefix to be mapped.
-     * @param uri The URI to be mapped.
-     * @throws NamespaceException if an illegal attempt is made to register a mapping.
-     * @throws UnsupportedRepositoryOperationException in a level 1 implementation
-     * @throws RepositoryException if another error occurs.
-     */
-    public function registerNamespace( $prefix, $uri );
-
-    /**
-     * Removes a namespace mapping from the registry. The following restriction apply:
-     * <ul>
-     * <li>
-     * Attempting to unregister a built-in namespace (<code>jcr</code>, <code>nt</code>,
-     * <code>mix</code>, <code>sv</code>) will throw a <code>NamespaceException</code>.
-     * </li>
-     * <li>
-     * Attempting to unregister a namespace that is currently present in content (either within an
-     * item name or within the value of a <code>NAME</code> or <code>PATH</code> property)
-     * will throw a <code>NamespaceException</code>. This includes prefixes in use within in-content node type
-     * definitions.
-     * </li>
-     * <li>
-     * An attempt to unregister a namespace that is not currently registered will throw a
-     * <code>NamespaceException</code>.
-     * </li>
-     * <li>
-     * An implementation may prevent the unregistering of any other namespace for
-     * implementation-specific reasons by throwing a <code>NamespaceException</code>.
-     * </li>
-     * </ul>
-     * In a level 1 implementation, this method always throws an
-     * <code>UnsupportedRepositoryOperationException</code>.
-     * <p/>
-     * A <code>RepositoryException</code> is thrown if another error occurs.
-     *
-     * @param prefix The prefix of the mapping to be removed.
-     * @throws NamespaceException if an illegal attempt is made to remove a mapping.
-     * @throws UnsupportedRepositoryOperationException in a level 1 implementation
-     * @throws RepositoryException if another error occurs.
-     */
-    public function unregisterNamespace( $prefix );
-
-    /**
-     * Returns an array holding all currently registered prefixes.
-     * @return a string array
-     * @throws RepositoryException if an error occurs.
-     */
-    public function getPrefixes();
-
-    /**
-     * Returns an array holding all currently registered URIs.
-     * @return a string array
-     * @throws RepositoryException if an error occurs.
-     */
-    public function getURIs();
-
-    /**
-     * Returns the URI to which the given prefix is mapped.
-     * @param prefix a string
-     * @return a string
-     * @throws NamespaceException if the prefix is unknown.
-     * @throws RepositoryException is another error occurs
-     */
-    public function getURI( $prefix );
-
-    /**
-     * Returns the prefix to which the given URI is mapped
-     *
-     * @param uri a string
-     * @return a string
-     * @throws NamespaceException if the URI is unknown.
-     * @throws RepositoryException is another error occurs
-     */
-    public function getPrefix( $uri );
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/NoSuchElementException.php b/contrib/phpcr/PHPCR/NoSuchElementException.php
deleted file mode 100644
index 9adc874..0000000
--- a/contrib/phpcr/PHPCR/NoSuchElementException.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-/**
- * Exception thrown by access-related methods.
- * <p>
- * <b>Level 2 only</b>
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- */
-class NoSuchElementException extends Exception
-{
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/NoSuchWorkspaceException.php b/contrib/phpcr/PHPCR/NoSuchWorkspaceException.php
deleted file mode 100644
index 026020e..0000000
--- a/contrib/phpcr/PHPCR/NoSuchWorkspaceException.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/RepositoryException.php';
-
-
-/**
- * Exception thrown by <code>Repository#login(Credentials, String)</code>
- * when a specific workspace is not found.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- */
-class NoSuchWorkspaceException extends RepositoryException
-{
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/Node.php b/contrib/phpcr/PHPCR/Node.php
deleted file mode 100644
index e0c5ca7..0000000
--- a/contrib/phpcr/PHPCR/Node.php
+++ /dev/null
@@ -1,941 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/AccessDeniedException.php';
-require_once 'PHPCR/nodetype/ConstraintViolationException.php';
-require_once 'PHPCR/nodetype/NoSuchNodeTypeException.php';
-require_once 'PHPCR/nodetype/NodeDefinition.php';
-require_once 'PHPCR/nodetype/NodeType.php';
-require_once 'PHPCR/version/OnParentVersionAction.php';
-/* require_once 'PHPCR/version/Version.php'; */
-require_once 'PHPCR/version/VersionException.php';
-/* require_once 'PHPCR/version/VersionHistory.php'; */
-/* require_once 'PHPCR/version/VersionIterator.php'; */
-require_once 'PHPCR/ItemExistsException.php';
-require_once 'PHPCR/PathNotFoundException.php';
-require_once 'PHPCR/nodetype/NoSuchNodeTypeException.php';
-require_once 'PHPCR/nodetype/ConstraintViolationException.php';
-require_once 'PHPCR/RepositoryException.php';
-require_once 'PHPCR/ValueFormatException.php';
-require_once 'PHPCR/NodeIterator.php';
-require_once 'PHPCR/Property.php';
-require_once 'PHPCR/PropertyIterator.php';
-require_once 'PHPCR/Item.php';
-require_once 'PHPCR/ItemNotFoundException.php';
-require_once 'PHPCR/NoSuchWorkspaceException.php';
-require_once 'PHPCR/UnsupportedRepositoryOperationException.php';
-require_once 'PHPCR/MergeException.php';
-require_once 'PHPCR/lock/Lock.php';
-require_once 'PHPCR/lock/LockException.php';
-require_once 'PHPCR/InvalidItemStateException.php';
-
-
-/**
- * The <code>Node</code> interface represents a node in the hierarchy that
- * makes up the repository.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- */
-interface Node extends Item
-{
-    /**
-     * Creates a new node at <code>relPath</code>. The new node will only be
-     * persisted in the workspace when <code>save()</code> and if the structure
-     * of the new node (its child nodes and properties) meets the constraint
-     * criteria of the parent node's node type.
-     * <p/>
-     * If <code>relPath</code> implies intermediary nodes that do not
-     * exist then a <code>PathNotFoundException</code> is thrown.
-     * <p/>
-     * If an item already exists at <code>relPath</code> then an
-     * <code>ItemExistsException</code> is thrown.
-     * <p/>
-     * If an attempt is made to add a node as a child of a
-     * property then a <code>ConstraintViolationException</code> is
-     * thrown immediately (not on <code>save</code>).
-     * <p/>
-     * Since this signature does not allow explicit node type assignment, the
-     * new node's node types (primary and mixin, if applicable) will be
-     * determined immediately (not on save) by the <code>NodeDefinition</code>s
-     * in the node types of its parent. If there is no <code>NodeDefinition</code>
-     * corresponding to the name specified for this new node, then a
-     * <code>ConstraintViolationException</code> is thrown immediately (not on
-     * <code>save</code>).
-     *
-     * @param  relPath The path of the new node to be created.
-     * @return The node that was added.
-     * @param primaryNodeTypeName The name of the primary node type of the new node.
-     * @throws ItemExistsException If an item at the specified path already exists.
-     * @throws PathNotFoundException If the specified path implies intermediary
-     * nodes that do not exist.
-     * @throws ConstraintViolationException if If there is no NodeDefinition
-     * corresponding to the name specified for this new node in the parent
-     * node's node type, or if an attempt is made to add a node as a child of a
-     * property.
-     * @throws RepositoryException If another error occurs.
-     */
-    public function addNode( $relPath, $primaryNodeTypeName = null );
-
-    /**
-     * If this node supports child node ordering, this method inserts the child node at
-     * <code>srcChildRelPath</code> before its sibling, the child node at <code>destChildRelPath</code>,
-     * in the child node list.
-     * <p/>
-     * To place the node <code>srcChildRelPath</code> at the end of the list, a <code>destChildRelPath</code>
-     * of <code>null</code> is used.
-     * <p/>
-     * Note that (apart from the case where <code>destChildRelPath</code> is <code>null</code>) both of these
-     * arguments must be relative paths of depth one, in other words they are the names of the child nodes,
-     * possibly suffixed with an index.
-     * <p/>
-     * Changes to ordering of child nodes are persisted on <code>save</code> of the parent node. But, if this node
-     * does not support child node ordering, then a <code>UnsupportedRepositoryOperationException</code>
-     * thrown immediately (i.e., not on <code>save</code>).
-     * <p/>
-     * If <code>srcChildRelPath</code> and <code>destChildRelPath</code> are the same,
-     * then a <code>ConstraintViolationException</code> is thrown.
-     * <p/>
-     * A <code>ConstraintViolationException</code> is also thrown if a node-type or implementation-specific
-     * constraint violation is detected immediately. Otherwise, if the violation can only be detected later,
-     * on <code>save</code>, then that method throws a <code>ConstraintViolationException</code>. Implementations
-     * may differ as to which constraints are enforced immediately, and which on <code>save</code>.
-     * <p/>
-     * If either parameter is not the relative path to a child node of this node, then an
-     * <code>ItemNotFoundException</code> is thrown.
-     * <p/>
-     * A <code>VersionException</code> is thrown if this node is versionable and checked-in or is non-versionable
-     * but its nearest versionable ancestor is checked-in.
-     * <p/>
-     * A <code>LockException</code> is thrown if a lock prevents the re-ordering.
-     *
-     * @param srcChildRelPath  the relative path to the child node (i.e., name plus possible index)
-     *                         to be moved in the ordering
-     * @param destChildRelPath the the relative path to the child node (i.e., name plus possible index)
-     *                         before which the node <code>srcChildRelPath</code> will be placed.
-     * @throws UnsupportedRepositoryOperationException
-     *                                      if ordering is not supported.
-     * @throws ConstraintViolationException if <code>srcChildRelPath</code> and
-     *                                      <code>destChildRelPath</code> are the same or some implementation-specific ordering restriction is violated.
-     * @throws ItemNotFoundException        if either parameter is not the relative path of a child node of this node.
-     * @throws VersionException             if this node is versionable and checked-in or is non-versionable but its
-     *                                      nearest versionable ancestor is checked-in.
-     * @throws LockException                if a lock prevents the re-ordering.
-     * @throws RepositoryException          if another error occurs.
-     */
-    public function orderBefore( $srcChildRelPath, $destChildRelPath );
-
-    /**
-     * This method returns the index of this node within the ordered set of its same-name
-     * sibling nodes. This index is the one used to address same-name siblings using the
-     * square-bracket notation, e.g., <code>/a[3]/b[4]</code>. Note that the index always starts
-     * at 1 (not 0), for compatibility with XPath. As a result, for nodes that do not have
-     * same-name-siblings, this method will always return 1.
-     *
-     * @return The index of this node within the ordered set of its same-name sibling nodes.
-     * @throws RepositoryException if an error occurs.
-     */
-    public function getIndex();
-
-    /**
-     * Adds the existing node at <code>absPath</code> as child of this node, thus adding
-     * <code>this</code> node as an addional parent of the node at <code>absPath</code>.
-     * <p/>
-     * This change will be persisted (if valid) on <code>save</code>.
-     * <p/>
-     * If the node at <code>absPath</code> is not of mixin type
-     * <code>mix:referenceable</code>, a <code>ConstraintViolationException</code>
-     * will be thrown on <code>save</code>.
-     * <p/>
-     * The name of the new child node as accessed from <code>this</code> node
-     * will be the same as its current name in <code>absPath</code> (that is, the last path
-     * segment in that <code>absPath</code>).
-     *
-     * @param absPath The absolute path of the new child node.
-     * @return The new child node.
-     * @param newName The new name for this node when referenced as a child of this node.
-     * @throws PathNotFoundException If no node exists at <code>absPath</code>.
-     * @throws RepositoryException   In level 2: If another error occurs.
-     */
-    public function addExistingNode( $absPath, $newName = null );
-
-    /**
-     * Sets the specified property to the specified value. If the property does
-     * not yet exist, it is created. The property type of the property will be
-     * that specified by the node type of <code>this</code> node (the one on
-     * which this method is being called). If the </code>PropertyType</code>
-     * of the supplied <code>Value</code> object (recall that a
-     * <code>Value</code> object records the property type of its
-     * contained value) is different from that required, a best-effort
-     * conversion is attempted.
-     * <p/>
-     * If the node type of the parent node does not specify a
-     * specific property type for the property being set, then
-     * the property type of the supplied <code>Value</code> object
-     * is used.
-     * <p/>
-     * If the property already exists (has previously been set) it assumes
-     * the new value. If the node type of the parent node does not specify a
-     * specific property type for the property being set, then the property
-     * will also assume the new type (if different).
-     * <p/>
-     * To erase a property, use <code>#remove(String relPath)</code>.
-     * <p/>
-     * To persist the addition or change of a property to the workspace
-     * <code>#save</code> must be called on
-     * this node (the parent of the property being set) or a higher-order
-     * ancestor of the property.
-     *
-     * @param name  The name of a property of this node
-     * @param value The Value to be assigned, an array of <code>Value</code> objects,
-     * an string representing path to a resource
-     * @param type  The type of the property
-     * @return The updated <code>Property</code> object
-     * @throws ValueFormatException if <code>value</code> is incompatible with
-     * (i.e. can not be converted to) the type of the specified property.
-     * @throws ConstraintViolationException  if the change would violate
-     * a node-type or other constraint and this implementation performs
-     * this validation immediately instead of waiting until save.
-     * @throws RepositoryException  If another error occurs.
-     */
-    public function setProperty( $name, $val, $type = null );
-
-    /**
-     * Returns the node at <code>relPath</code> relative to <code>this</code> node.
-     * The properties and child nodes of the returned node can then be read
-     * (and if permissions allow) changed and written. However, any changes
-     * made to this node, its properties or its child nodes
-     * (and their properties and child nodes, etc.) will only be persisted to
-     * the repository upon calling save.
-     *
-     * @param  relPath The relative path of the node to retrieve.
-     * @return The node at <code>relPath</code>.
-     * @throws PathNotFoundException If no node exists at the
-     * specified path.
-     * @throws RepositoryException   If another error occurs.
-     */
-    public function getNode( $relPath );
-
-    /**
-     * Returns a <code>NodeIterator</code> over all child <code>Node</code>s of
-     * this <code>Node</code>. Does <i>not</i> include properties of this
-     * <code>Node</code>. The same <code>save</code> and re-acquisition
-     * semantics apply as with <code>#getNode(String)</code>.
-     *
-     * @param namePattern a name pattern
-     * @return A <code>NodeIterator</code> over all child <code>Node</code>s of
-     * this <code>Node</code>.
-     * @throws RepositoryException If an unexpected error occurs.
-     */
-    public function getNodes( $namePattern = null );
-
-    /**
-     * Returns the property at <code>relPath</code> relative to <code>this</code>
-     * node. The same <code>save</code> and re-acquisition
-     * semantics apply as with <code>#getNode(String)</code>.
-     *
-     * @param relPath The relative path of the property to retrieve.
-     * @return The property at <code>relPath</code>.
-     * @throws PathNotFoundException If no property exists at the
-     *                               specified path.
-     * @throws RepositoryException   If another error occurs.
-     */
-    public function getProperty( $relPath );
-
-    /**
-     * Returns all properties of this node.
-     * Returns a <code>PropertyIterator</code> over all properties
-     * of this node. Does <i>not</i> include child <i>nodes</i> of this
-     * node. The same <code>save</code> and re-acquisition
-     * semantics apply as with <code>#getNode(String)</code>.
-     *
-     * @param namePattern a name pattern
-     * @return A <code>PropertyIterator</code>.
-     * @throws RepositoryException If an error occurs.
-     */
-    public function getProperties( $namePattern = null );
-
-    /**
-     * Returns all <code>REFERENCE</code> properties that refer to this node.
-     * <p/>
-     * Note that in level 2 implementations, this method returns only saved properties (in a transactional setting
-     * this includes both those properties that have been saved but not yet committed,
-     * as well as properties that have been committed). This method does not return <code>REFERENCE</code>
-     * properties that have been added but not yet saved.
-     * <p/>
-     * In implementaions that support versioing, this method does not return <code>REFERENCE</code> properties
-     * that are part of the frozen state of a version in version storage.
-     * <p/>
-     * If this node has no references, an empty iterator is returned.
-     *
-     * @return A <code>PropertyIterator</code>.
-     * @throws RepositoryException if an error occurs
-     */
-    public function getReferences();
-
-    /**
-     * Returns the first property of <i>this</i> node found with the specified value.
-     * What makes a particular property "first" (that is, the search order) is
-     * implementaion dependent. If the specified value and the value of a
-     * property are of different types then a conversion is attempted before the
-     * equality test is made. Returns <code>null</code> if no such property is
-     * found. In the case of multivalue properties, a property qualifies as
-     * having the specified value if and only if at least one of its values matches.
-     * The same <code>save</code> and re-acquisition
-     * semantics apply as with <code>#getNode(String)</code>.
-     *
-     * @param value A <code>Value</code> object.
-     * @return The first property of <i>this</i> node found with the specified value.
-     * @throws RepositoryException If an unexpected error occurs.
-     */
-    public function findProperty( Value $value );
-
-    /**
-     * Returns all properties of <i>this</i> node with the specified value.
-     * If the spedified value and the value of a property are of different types
-     * then a conversion is attempted before the equality test is made. Returns
-     * an empty iterator if no such property could be found. In the case of
-     * multivalue properties, a property qualifies as having the specified value
-     * if and only if at least one of its values matches.
-     * The same <code>save</code> and re-acquisition
-     * semantics apply as with <code>#getNode(String)</code>.
-     *
-     * @param value A <code>Value</code> object.
-     * @return A PropertyIterator holding all properties of this node with the
-     * specified value. Returns an empty iterator if no such property could be found.
-     * @throws RepositoryException If an unexpected error occurs.
-     */
-    public function findProperties( Value $value );
-
-    /**
-     * Returns the deepest primary child item accessible via a chain of
-     * primary child items from this node.
-     * A node's type can specifiy a maximum of one of
-     * its child items (child node or property) as its <i>primary child item</i>.
-     * This method traverses the chain of primary child items of this node
-     * until it either encounters a property or encounters a node that does not
-     * have a primary child item. It then returns that property or node. If
-     * this node itself (the one that this method is being called on) has no
-     * primary child item then this method throws a
-     * <code>ItemNotFoundException</code>. The same <code>save</code> and re-acquisition
-     * semantics apply as with <code>#getNode(String)</code>.
-     *
-     * @return the deepest primary child item accessible from this node via
-     * a chain of primary child items.
-     * @throws ItemNotFoundException if this node does not have a primary
-     * child item.
-     * @throws RepositoryException If another error occurs.
-     */
-    public function getPrimaryItem();
-
-    /**
-     * Returns the UUID of this node as recorded in the node's jcr:UUID
-     * property. This method only works on nodes of mixin node type
-     * <code>mix:referenceable</code>. On nonreferenceable nodes, this method
-     * throws an <code>UnsupportedRepositoryOperationException</code>.
-     *
-     * @return the UUID of this node
-     * @throws UnsupportedRepositoryOperationException If this node nonreferenceable.
-     * @throws RepositoryException If another error occurs.
-     */
-    public function getUUID();
-
-    /**
-     * Indicates whether a node exists at <code>relPath</code>
-     * Returns <code>true</code> if a node exists at <code>relPath</code> and
-     * <code>false</code> otherwise.
-     *
-     * @param relPath The path of a (possible) node.
-     * @return <code>true</code> if a node exists at <code>relPath</code>;
-     * <code>false</code> otherwise.
-     * @throws RepositoryException If an unspecified error occurs.
-     */
-    public function hasNode( $relPath );
-
-    /**
-     * Indicates whether a property exists at <code>relPath</code>
-     * Returns <code>true</code> if a property exists at <code>relPath</code> and
-     * <code>false</code> otherwise.
-     *
-     * @param relPath The path of a (possible) property.
-     * @return <code>true</code> if a property exists at <code>relPath</code>;
-     * <code>false</code> otherwise.
-     * @throws RepositoryException If an unspecified error occurs.
-     */
-    public function hasProperty( $relPath );
-
-    /**
-     * Indicates whether this node has child nodes.
-     * Returns <code>true</code> if this node has one or more child nodes;
-     * <code>false</code> otherwise.
-     *
-     * @return <code>true</code> if this node has one or more child nodes;
-     * <code>false</code> otherwise.
-     * @throws RepositoryException If an unspecified error occurs.
-     */
-    public function hasNodes();
-
-    /**
-     * Indicates whether this node has properties.
-     * Returns <code>true</code> if this node has one or more properties;
-     * <code>false</code> otherwise.
-     *
-     * @return <code>true</code> if this node has one or more properties;
-     * <code>false</code> otherwise.
-     * @throws RepositoryException If an unspecified error occurs.
-     */
-    public function hasProperties();
-
-    /**
-     * Returns the primary node type of this node.
-     *
-     * @return a <code>NodeType</code> object.
-     */
-    public function getPrimaryNodeType();
-
-    /**
-     * Returns an array of NodeType objects representing the mixin node types
-     * assigned to this node.
-     *
-     * @return a <code>NodeType</code> object.
-     */
-    public function getMixinNodeTypes();
-
-    /**
-     * Indicates whether this node is of the specified node type.
-     * Returns <code>true</code> if this node is of the specified node type
-     * or a subtype of the specified node type. Returns <code>false</code> otherwise.
-     * This method provides a quick method for determining whether
-     * a particular node is of a particular type without having to
-     * manually search the inheritance hierarchy (which, in some implementations
-     * may be a multiple-inhertiance hierarchy, making a manual search even
-     * more complex). This method works for both perimary node types and mixin
-     * node types.
-     *
-     * @param nodeTypeName the name of a node type.
-     * @return true if this node is of the specified node type
-     * or a subtype of the specified node type; returns false otherwise.
-     * @throws RepositoryException If an unspecified error occurs.
-     */
-    public function isNodeType( $nodeTypeName );
-
-    /**
-     * Adds the specified mixin node type to this node. If a conflict with
-     * another assigned mixin or the main node type results, then an exception
-     * is thrown on save. Adding a mixin node type to a node immediately adds
-     * the name of that type to the list held in that node�s
-     * <code>jcr:mixinTypes</code> property.
-     *
-     * @param mixinName
-     */
-    public function addMixin( $mixinName );
-
-    /**
-     * Removes the specified mixin node type from this node. Also removes <code>mixinName</code>
-     * from this node's <code>jcr:mixinTypes</code> property. The mixin node type removal
-     * takes effect on <code>save</code>.
-     * <p/>
-     * If this node does not have the specified mixin, a <code>NoSuchNodeTypeException</code> is thrown.
-     * <p/>
-     * A <code>ConstraintViolationException</code> will be thrown if the removal of a mixin is not allowed
-     * (implementations are free to enforce any policy they like with regard to mixin removal).
-     * <p/>
-     * A <code>VersionException</code> is thrown if this node is versionable and checked-in or is
-     * non-versionable but its nearest versionable ancestor is checked-in.
-     * <p/>
-     * A <code>LockException</code> is thrown if a lock prevents the removal of the mixin.
-     *
-     * @param mixinName the name of the mixin node type to be removed.
-     * @throws NoSuchNodeTypeException      If the specified <code>mixinName</code>
-     *                                      is not currently assigned to this node.
-     * @throws ConstraintViolationException If the specified mixin node type
-     *                                      is prevented from being removed.
-     * @throws VersionException             if this node is versionable and checked-in or is non-versionable but its
-     *                                      nearest versionable ancestor is checked-in.
-     * @throws LockException                if a lock prevents the removal of the mixin.
-     * @throws RepositoryException          If another error occurs.
-     */
-    public function removeMixin( $mixinName );
-
-    /**
-     * Returns <code>true</code> if the specified mixin node type,
-     * <code>mixinName</code>, can be added to this node. Returns
-     * <code>false</code> otherwise. Addition of a mixin can be
-     * prevented for any of the following reasons:
-     * <ul>
-     * <li>
-     * The mixin's definition conflicts with the existing primary node type or one of the
-     * existing mixin node types.
-     * </li>
-     * <li>
-     * The node is versionable and checked-in or is non-versionable and its nearest
-     * versionable ancestor is checked-in.
-     * </li>
-     * <li>
-     * The addition is prevented because this node is protected
-     * (as defined in this node's NodeDefinition, found in this node's parent's node type).
-     * </li>
-     * <li>
-     * The addition is prevented due to access control restrictions.
-     * </li>
-     * <li>
-     * The addition is prevented due to a lock.
-     * </li>
-     * <li>
-     * The addition is prevented for implementation-specific reasons.
-     * </li>
-     * </ul>
-     *
-     * @param mixinName
-     * @return <code>true</code> if the specified mixin node type,
-     *         <code>mixinName</code>, can be added to this node; <code>false</code> otherwise.
-     * @throws RepositoryException if an error occurs.
-     */
-    public function canAddMixin( $mixinName );
-
-    /**
-     * Returns the definition of <i>this</i> <code>Node</code>. This method is
-     * actually a shortcut to searching through this node's parent's node type
-     * (and its supertypes) for the child node definition applicable to this
-     * node.
-     *
-     * @return a <code>NodeDefinition</code> object.
-     * @see NodeType#getChildNodeDefinitions
-     */
-    public function getDefinition();
-
-    /**
-     * Creates a new version with a system generated version name and returns that version.
-     *
-     * @return a <code>Version</code> object
-     * @throws UnsupportedRepositoryOperationException if versioning is not supported.
-     * @throws RepositoryException If another error occurs.
-     */
-    public function checkin();
-
-    /**
-     * Sets this versionable node to checked-out status by setting its
-     * <code>jcr:isCheckedOut</code> property to true.
-     *
-     * @throws UnsupportedRepositoryOperationException if versioning is not supported.
-     * @throws RepositoryException If another error occurs.
-     */
-    public function checkout();
-
-    /**
-     * Updates this node to reflect the state (i.e., have the same properties
-     * and child nodes) of this node's corresponding node in srcWorkspace (that
-     * is, the node in srcWorkspace with the same UUID as this node). If
-     * shallow is set to false, then only this node is updated. If shallow is
-     * set to true then every node with a UUID in the subtree rooted at this
-     * node is updated. If the current ticket does not have sufficient rights
-     * to perform the update or the specified workspace does not exist, a
-     * <code>NoSuchWorkspaceException</code> is thrown. If another error occurs
-     * then a RepositoryException is thrown. If the update succeeds the changes
-     * made to this node are persisted immediately, there is no need to call
-     * save.
-     *
-     * @param srcWorkspaceName the name of the source workspace.
-     * @param shallow a boolean
-     * @throws RepositoryException If another error occurs.
-     */
-    public function update( $srcWorkspaceName, $shallow );
-
-    /**
-     * This method can be thought of as a version-sensitive update
-     * (see 7.1.7 Updating and Cloning Nodes across Workspaces in the
-     * specification).
-     *
-     * It recursively tests each versionable node in the subtree of this
-     * node against its corresponding node in srcWorkspace with respect to
-     * the relation between their respective base versions and either updates
-     * the node in question or not, depending on the outcome of the test.
-     * For details see 8.2.10 Merge in the specification. A MergeException
-     * is thrown if bestEffort is false and a versionable node is encountered
-     * whose corresponding node's base version is on a divergent branch from
-     * this node's base version.
-     *
-     * If successful, the changes are persisted immediately, there is no need
-     * to call save.
-     *
-     * This method returns a NodeIterator over all versionable nodes in the
-     * subtree that received a merge result of fail.
-     *
-     * If bestEffort is false, this iterator will be empty (since if it merge
-     * returns successfully, instead of throwing an exception, it will be
-     * because no failures were encountered).
-     *
-     * If bestEffort is true, this iterator will contain all nodes that
-     * received a fail during the course of this merge operation.
-     *
-     * If the specified srcWorkspace does not exist, a NoSuchWorkspaceException
-     * is thrown.
-     *
-     * If the current session does not have sufficient permissions to perform
-     * the operation, then an AccessDeniedException is thrown.
-     *
-     * An InvalidItemStateException is thrown if this session (not necessarily
-     * this node) has pending unsaved changes.
-     *
-     * A LockException is thrown if a lock prevents the merge.
-     *
-     * @param srcWorkspace the name of the source workspace.
-     * @param shallow a boolean
-     * @return iterator over all nodes that received a merge result of "fail"
-     * in the course of this operation.
-     * @throws UnsupportedRepositoryOperationException if versioning is not supported.
-     * @throws MergeException succeeds if the base version of the corresponding
-     * node in srcWorkspace is not a successor of the base version of this node.
-     * @throws NoSuchWorkspaceException If the current
-     * ticket does not have sufficient rights to perform the <code>merge</code> or the
-     * specified workspace does not exist.
-     * @throws RepositoryException If another error occurs.
-     */
-    public function merge( $srcWorkspace, $shallow );
-
-    /**
-     * Returns <code>true</code> if this node is currently checked-out and <code>false</code> otherwise.
-     *
-     * @return a boolean
-     * @throws UnsupportedRepositoryOperationException if versioning is not supported.
-     * @throws RepositoryException If another error occurs.
-     */
-    public function isCheckedOut();
-
-    /**
-     * Restores this node to the state recorded in the specified version.
-     *
-     * @param versionName, or Version Object
-     * @throws UnsupportedRepositoryOperationException if versioning is not supported.
-     * @throws RepositoryException If another error occurs.
-     */
-    public function restore( $in );
-
-    /**
-     * Restores this node to the state recorded in the version specified by
-     * <code>versionLabel</code>.
-     *
-     * @param versionLabel a String
-     * @throws UnsupportedRepositoryOperationException if versioning is not supported.
-     * @throws RepositoryException If another error occurs.
-     */
-    public function restoreByLabel( $versionLabel );
-
-    /**
-     * Returns the <code>VersionHistory</code> object of this node. This object
-     * is simply a wrapper for the <code>nt:versionHistory</code> node holding
-     * this node's versions.
-     *
-     * @return a <code>VersionHistory</code> object
-     * @throws UnsupportedRepositoryOperationException if versioning is not supported.
-     * @throws RepositoryException If another error occurs.
-     */
-    public function getVersionHistory();
-
-    /**
-     * Returns the current base version of this versionable node.
-     *
-     * @return a <code>Version</code> object.
-     * @throws UnsupportedRepositoryOperationException if versioning is not supported.
-     * @throws RepositoryException If another error occurs.
-     */
-    public function getBaseVersion();
-
-    /**
-     * Completes the merge process with respect to this node and the specified <code>version</code>.
-     * <p/>
-     * When the {@link #merge} method is called on a node, every versionable node in that
-     * subtree is compared with its corresponding node in the indicated other workspace and
-     * a "merge test result" is determined indicating one of the following:
-     * <ol>
-     * <li>
-     * This node will be updated to the state of its correspondee (if the base version
-     * of the correspondee is more recent in terms of version history)
-     * </li>
-     * <li>
-     * This node will be left alone (if this node's base version is more recent in terms of
-     * version history).
-     * </li>
-     * <li>
-     * This node will be marked as having failed the merge test (if this node's base version
-     * is on a different branch of the version history from the base version of its
-     * corresponding node in the other workspace, thus preventing an automatic determination
-     * of which is more recent).
-     * </li>
-     * </ol>
-     * (See {@link #merge} for more details)
-     * <p/>
-     * In the last case the merge of the non-versionable subtree
-     * (the "content") of this node must be done by the application (for example, by
-     * providing a merge tool for the user).
-     * <p/>
-     * Additionally, once the content of the nodes has been merged, their version graph
-     * branches must also be merged. The JCR versioning system provides for this by
-     * keeping a record, for each versionable node that fails the merge test, of the
-     * base verison of the corresponding node that caused the merge failure. This record
-     * is kept in the <code>jcr:mergeFailed</code> property of this node. After a
-     * <code>merge</code>, this property will contain one or more (if
-     * multiple merges have been performed) <code>REFERENCE</code>s that point
-     * to the "offending versions".
-     * <p/>
-     * To complete the merge process, the client calls <code>doneMerge(Version v)</code>
-     * passing the version object referred to be the <code>jcr:mergeFailed</code> property
-     * that the client wishes to connect to <code>this</code> node in the version graph.
-     * This has the effect of moving the reference to the indicated version from the
-     * <code>jcr:mergeFailed</code> property of <code>this</code> node to the
-     * <code>jcr:predecessors</code>.
-     * <p/>
-     * If the client chooses not to connect this node to a particular version referenced in
-     * the <code>jcr:mergeFailed</code> property, he calls {@link #cancelMerge(Version version)}.
-     * This has the effect of removing the reference to the specified <code>version</code> from
-     * <code>jcr:mergeFailed</code> <i>without</i> adding it to <code>jcr:predecessors</code>.
-     * <p/>
-     * Once the last reference in <code>jcr:mergeFailed</code> has been either moved to
-     * <code>jcr:predecessors</code> (with <code>doneMerge</code>) or just removed
-     * from <code>jcr:mergeFailed</code> (with <code>cancelMerge</code>) the <code>jcr:mergeFailed</code>
-     * property is automatically removed, thus enabling <code>this</code>
-     * node to be checked-in, creating a new version (note that before the <code>jcr:mergeFailed</code>
-     * is removed, its <code>OnParentVersion</code> setting of <code>ABORT</code> prevents checkin).
-     * This new version will have a predecessor connection to each version for which <code>doneMerge</code>
-     * was called, thus joining those branches of the version graph.
-     * <p/>
-     * If successful, these changes are persisted immediately,
-     * there is no need to call <code>save</code>.
-     * <p/>
-     * A <code>VersionException</code> is thrown if the <code>version</code> specified is
-     * not among those referecned in this node's <code>jcr:mergeFailed</code> property.
-     * <p/>
-     * If there are unsaved changes pending on this node, an <code>InvalidItemStateException</code> is thrown.
-     * <p/>
-     * An <code>UnsupportedRepositoryOperationException</code> is thrown if this repsoitory does not
-     * support versioning.
-     * <p/>
-     * A <code>RepositoryException</code> is thrown if another error occurs.
-     *
-     * @param version a version referred to by this node's <code>jcr:mergeFailed</code>
-     *                property.
-     * @throws VersionException          if the version specifed is
-     *                                   not among those referenced in this node's <code>jcr:mergeFailed</code>
-     *                                   or if this node is currently checked-in.
-     * @throws InvalidItemStateException if there are unsaved changes pending on this node.
-     * @throws UnsupportedRepositoryOperationException
-     *                                   if versioning is not supported in
-     *                                   this repository.
-     * @throws RepositoryException       if another error occurs.
-     */
-    public function doneMerge( /* Version */ $version );
-
-    /**
-     * Cancels the merge process with respect to this node and specified <code>version</code>.
-     * <p/>
-     * See {@link #doneMerge} for a full explanation. Also see {@link #merge} for
-     * more details.
-     * <p/>
-     * If successful, these changes are persisted immediately,
-     * there is no need to call <code>save</code>.
-     * <p/>
-     * A <code>VersionException</code> is thrown if the <code>version</code> specified is
-     * not among those referecned in this node's <code>jcr:mergeFailed</code>.
-     * <p/>
-     * An <code>UnsupportedRepositoryOperationException</code> is thrown if this repsoitory does not
-     * support versioning.
-     * <p/>
-     * If there are unsaved changes pending on this node, an <code>InvalidItemStateException</code> is thrown.
-     * <p/>
-     * A <code>RepositoryException</code> is thrown if another error occurs.
-     *
-     * @param version a version referred to by this node's <code>jcr:mergeFailed</code>
-     *                property.
-     * @throws VersionException          if the version specifed is
-     *                                   not among those referenced in this node's <code>jcr:mergeFailed</code> or if this node is currently checked-in.
-     * @throws InvalidItemStateException if there are unsaved changes pending on this node.
-     * @throws UnsupportedRepositoryOperationException
-     *                                   if versioning is not supported in
-     *                                   this repository.
-     * @throws RepositoryException       if another error occurs.
-     */
-    public function cancelMerge( /* Version */ $version );
-
-    /**
-     * Returns the absolute path of the node in the specified workspace that
-     * corresponds to <code>this</code> node.
-     * <p/>
-     * The <i>corresponding node</i> is defined as the node in <code>srcWorkspace</code>
-     * with the same UUID as this node or, if this node has no UUID, the same
-     * path relative to the nearest ancestor that <i>does</i>  have a UUID,
-     * or the root node, whichever comes first. This is qualified by the requirment that
-     * referencable nodes only correspond with other referencables and non-referenceables
-     * with other non-referenceables.
-     * <p/>
-     * If no corresponding node exists then an <code>ItemNotFoundException</code> is thrown.
-     * <p/>
-     * If the specified workspace does not exist then a <code>NoSuchWorkspaceException</code> is thrown.
-     * <p/>
-     * If the current <code>Session</code> does not have sufficent rights to perform this operation,
-     * an <code>AccessDeniedException</code> is thrown.
-     *
-     * @param workspaceName
-     * @return the absolute path to the corresponding node.
-     * @throws ItemNotFoundException    if no corresponding node is found.
-     * @throws NoSuchWorkspaceException if the worksapce is unknown.
-     * @throws AccessDeniedException    if the current <code>session</code> has insufficent rights to perform this operation.
-     * @throws RepositoryException      if another error occurs.
-     */
-    public function getCorrespondingNodePath( $workspaceName );
-
-    /**
-     * Places a lock on this node. If successful, this node is said to <i>hold</i> the lock.
-     * <p/>
-     * If <code>isDeep</code> is <code>true</code> then the lock applies to this node and all its descendant nodes;
-     * if <code>false</code>, the lock applies only to this, the holding node.
-     * <p/>
-     * If <code>isSessionScoped</code> is <code>true</code> then this lock will expire upon the expiration of the current
-     * session (either through an automatic or explicit <code>Session.logout</code>); if <code>false</code>, this lock
-     * does not expire until explicitly unlocked or automatically unlocked due to a implementation-specific limitation,
-     * such as a timeout.
-     * <p/>
-     * Returns a <code>Lock</code> object reflecting the state of the new lock and including a lock token. See, in
-     * contrast, {@link Node#getLock}, which returns the <code>Lock</code> <i>without</i> the lock token.
-     * <p/>
-     * The lock token is also automatically added to the set of lock tokens held by the current <code>Session</code>.
-     * <p/>
-     * If successful, then the property <code>jcr:lockOwner</code> is created and set to the value of
-     * <code>Session.getUserId</code> for the current session and the property <code>jcr:lockIsDeep</code> is set to the
-     * value passed in as <code>isDeep</code>. These changes are persisted automatically; there is no need to call
-     * <code>save</code>.
-     * <p/>
-     * Note that it is possible to lock a node even if it is checked-in (the lock-related properties will be changed
-     * despite the checked-in status).
-     * <p/>
-     * If this node is not of mixin node type <code>mix:lockable</code> then an
-     * <code>UnsupportedRepositoryOperationException</code> is thrown.
-     * <p/>
-     * If this node is already locked (either because it holds a lock or a lock above it applies to it),
-     * a <code>LockException</code> is thrown.
-     * <p/>
-     * If <code>isDeep</code> is <code>true</code> and a descendant node of this node already holds a lock, then a
-     * <code>LockException</code> is thrown.
-     * <p/>
-     * If the current session does not have sufficient privileges to place the lock, an
-     * <code>AccessDeniedException</code> is thrown.
-     * <p/>
-     * An InvalidItemStateException is thrown if this node has pending unsaved changes.
-     * <p/>
-     * A <code>RepositoryException</code> is thrown if another error occurs.
-     *
-     * @param isDeep          if <code>true</code> this lock will apply to this node and all its descendants; if
-     *                        <code>false</code>, it applies only to this node.
-     * @param isSessionScoped if <code>true</code>, this lock expires with the current session; if <code>false</code> it
-     *                        expires when explicitly or automatically unlocked for some other reason.
-     * @return A <code>Lock</code> object containing a lock token.
-     * @throws UnsupportedRepositoryOperationException
-     *                                   if this node is not <code>mix:lockable</code>.
-     * @throws LockException             if this node is already locked.
-     * @throws AccessDeniedException     if this session does not have permission to lock this node.
-     * @throws InvalidItemStateException if this node has pending unsaved changes.
-     * @throws RepositoryException       is another error occurs.
-     */
-    public function lock( $isDeep, $isSessionScoped );
-
-    /**
-     * Returns the <code>Lock</code> object that applies to this node. This may be either a lock on this node itself
-     * or a deep lock on a node above this node.
-     * <p/>
-     * If this <code>Session</code> (the one through which this <code>Node</code> was acquired)
-     * holds the lock token for this lock, then the returned <code>Lock</code> object contains
-     * that lock token (accessible through <code>Lock.getLockToken</code>). If this <code>Session</code>
-     * does not hold the applicable lock token, then the returned <code>Lock</code> object will not
-     * contain the lock token (its <code>Lock.getLockToken</code> method will return <code>null</code>).
-     * <p/>
-     * If this node is not of mixin node type <code>mix:lockable</code> then
-     * an <code>UnsupportedRepositoryOperationException</code> is thrown.
-     * <p/>
-     * If no lock applies to this node, a <code>LockException</code> is thrown.
-     * <p/>
-     * If the current session does not have sufficient privileges to get the lock, an <code>AccessDeniedException</code>
-     * is thrown.
-     * <p/>
-     * A <code>RepositoryException</code> is thrown if another error occurs.
-     *
-     * @return The applicable <code>Lock</code> object, without a contained lock token.
-     * @throws UnsupportedRepositoryOperationException
-     *                               If this node is not of mixin node type <code>mix:lockable</code>.
-     * @throws LockException         if no lock applies to this node.
-     * @throws AccessDeniedException if the curent session does not have pernmission to get the lock.
-     * @throws RepositoryException   is another error occurs.
-     */
-    public function getLock();
-
-    /**
-     * Removes the lock on this node. Also removes the properties <code>jcr:lockOwner</code> and
-     * <code>jcr:lockIsDeep</code> from this node. These changes are persisted automatically; there is no need to call
-     * <code>save</code>.
-     * <p/>
-     * Note that it is possible to unlock a node even if it is checked-in (the lock-related properties will be changed
-     * despite the checked-in status).
-     * <p/>
-     * If this node is <code>mix:lockable</code> but either does not currently hold a lock or
-     * holds a lock for which this Session does not have the correct lock token,
-     * then a <code>LockException</code> is thrown.
-     * <p/>
-     * If this node is not <code>mix:lockable</code> then an <code>UnsupportedRepositoryOperationException</code> is
-     * thrown.
-     * <p/>
-     * Note that either of these exceptions may be thrown when an attempt is made to unlock a node that is locked due
-     * to a deep lock above it.
-     * <p/>
-     * In such cases the unlock method fails because the lock is not held by this node. If the current session does not
-     * have sufficient privileges to remove the lock, an <code>AccessDeniedException</code> is thrown.
-     * <p/>
-     * An <code>InvalidItemStateException</code> is thrown if this node has pending unsaved changes.
-     * <p/>
-     * A <code>RepositoryException</code> is thrown if another error occurs.
-     *
-     * @throws UnsupportedRepositoryOperationException
-     *                                   if this node is not <code>mix:lockable</code>.
-     * @throws LockException             i If this node is <code>mix:lockable</code> but either does not currently hold a lock or
-     *                                   holds a lock for which this Session does not have the correct lock token
-     * @throws AccessDeniedException     if the current session does not have permission to unlock this node.
-     * @throws InvalidItemStateException if this node has pending unsaved changes.
-     * @throws RepositoryException       if another error occurs.
-     */
-    public function unlock();
-
-    /**
-     * Returns <code>true</code> if this node holds a lock; otherwise returns <code>false</code>. To <i>hold</i> a
-     * lock means that this node has actually had a lock placed on it specifically, as opposed to just having a lock
-     * <i>apply</i> to it due to a deep lock held by a node above.
-     *
-     * @return a <code>boolean</code>.
-     * @throws RepositoryException if an error occurs.
-     */
-    public function holdsLock();
-
-    /**
-     * Returns <code>true</code> if this node is locked either as a result of a lock held by this node or by a deep
-     * lock on a node above this node; otherwise returns <code>false</code>.
-     *
-     * @return a <code>boolean</code>.
-     * @throws RepositoryException if an error occurs.
-     */
-    public function isLocked();
-}
-
-?>
diff --git a/contrib/phpcr/PHPCR/NodeIterator.php b/contrib/phpcr/PHPCR/NodeIterator.php
deleted file mode 100644
index 5c4e649..0000000
--- a/contrib/phpcr/PHPCR/NodeIterator.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/RangeIterator.php';
-require_once 'PHPCR/NoSuchElementException.php';
-
-
-/**
- * Allows easy iteration through a list of <code>Node</code>s
- * with <code>nextNode</code> as well as a <code>skip</code> method inherited from
- * <code>RangeIterator</code>.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- */
-interface NodeIterator extends RangeIterator
-{
-     /**
-      * Returns the next <code>Node</code> in the iteration.
-      *
-      * @return the next <code>Node</code> in the iteration.
-      * @throws NoSuchElementException if iteration has no more <code>Node</code>s.
-     */
-    public function nextNode();
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/NumberFormatException.php b/contrib/phpcr/PHPCR/NumberFormatException.php
deleted file mode 100644
index da3c157..0000000
--- a/contrib/phpcr/PHPCR/NumberFormatException.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-/**
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- */
-class NumberFormatException extends Exception
-{
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/PathNotFoundException.php b/contrib/phpcr/PHPCR/PathNotFoundException.php
deleted file mode 100644
index b84652c..0000000
--- a/contrib/phpcr/PHPCR/PathNotFoundException.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/RepositoryException.php';
-
-
-/**
- * Exception thrown when no <code>Item</code> exists at the specified path
- * or when the specified path implies intermediary <code>Node</code>s that do
- * not exist.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- */
-class PathNotFoundException extends RepositoryException
-{
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/Property.php b/contrib/phpcr/PHPCR/Property.php
deleted file mode 100644
index 3ea9316..0000000
--- a/contrib/phpcr/PHPCR/Property.php
+++ /dev/null
@@ -1,310 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/Item.php';
-require_once 'PHPCR/Node.php';
-require_once 'PHPCR/RepositoryException.php';
-require_once 'PHPCR/ValueFormatException.php';
-require_once 'PHPCR/nodetype/PropertyDefinition.php';
-require_once 'PHPCR/version/VersionException.php';
-require_once 'PHPCR/lock/LockException.php';
-require_once 'PHPCR/nodetype/ConstraintViolationException.php';
-
-
-/**
- * A <code>Property</code> object represents the smallest granularity of content
- * storage.
- * <p>
- * <b>Level 1 and 2</b>
- * <p>
- * A property must have one and only one parent node. A property does
- * not have children. When we say that node A "has" property B it means that B
- * is a child of A.
- * <p>
- * A property consists of a name and a value. See <code>Value</code>.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- */
-interface Property extends Item
-{
-    /**
-     * Sets the value of this property to <code>value</code>.
-     * If this property's property type is not constrained by the node type of
-     * its parent node, then the property type is changed to that of the supplied
-     * <code>value</code>. If the property type is constrained, then a
-     * best-effort conversion is attempted. If conversion fails, a
-     * <code>ValueFormatException</code> is thrown immediately (not on <code>save</code>).
-     * The change will be persisted (if valid) on <code>save</code>
-     * <p/>
-     * A <code>ConstraintViolationException</code> is thrown if a node-type
-     * or other constraint violation is detected immediately. Otherwise,
-     * if the violation is only detected later, at <code>save</code>, then a
-     * <code>ConstraintViolationException</code> is thrown by that method.
-     * Implementations may differ as to which constraints are enforced immediately,
-     * and which on <code>save</code>.
-     * <p/>
-     * A <code>VersionException</code> is thrown if the parent node of this property is
-     * versionable and checked-in or is non-versionable but its nearest versionable
-     * ancestor is checked-in.
-     * <p/>
-     * A <code>LockException</code> is thrown if a lock prevents the setting of the value.
-     *
-     * @throws ValueFormatException if the type or format of the specified value
-     * is incompatible with the type of this property.
-     * @throws VersionException if the parent node of this property is
-     * versionable and checked-in or is non-versionable but its nearest versionable
-     * ancestor is checked-in.
-     * @throws LockException if a lock prevents the setting of the value.
-     * @throws ConstraintViolationException if a node-type or other constraint violation is detected immediately.
-     * @throws RepositoryException if another error occurs.
-     */
-    public function setValue( $value );
-
-    /**
-     * Returns the value of this  property as a generic
-     * <code>Value</code> object.
-     * <p>
-     * If the property is multi-valued, this method throws a <code>ValueFormatException</code>.
-     *
-     * @throws ValueFormatException if the property is multi-valued.
-     * @throws RepositoryException if another error occurs.
-     *
-     * @return the value
-     */
-    public function getValue();
-
-    /**
-     * Returns an array of all the values of this property. Used to access
-     * multi-value properties. If the property is single-valued, this method throws a
-     * <code>ValueFormatException</code>. The array returned is a copy of the stored
-     * values, so changes to it are not reflected in internal storage.
-     *
-     * @throws ValueFormatException if the property is single-valued.
-     * @throws RepositoryException if another error occurs.
-     *
-     * @return a <code>Value</code> array
-     */
-    public function getValues();
-
-    /**
-     * Returns a <code>String</code> representation of the value of this
-     * property. A shortcut for
-     * <code>Property.getValue().getString()</code>. See {@link Value}.
-     * If this property is multi-valued, this method throws a <code>ValueFormatException</code>.
-     * <p>
-     * If the value of this property cannot be converted to a
-     * string, a <code>ValueFormatException</code> is thrown.
-     * <p>
-     * A <code>RepositoryException</code> is thrown if another error occurs.
-     *
-     * @return A string representation of the value of this property.
-     * @throws ValueFormatException if conversion to a string is not possible or if the
-     * property is multi-valued.
-     * @throws RepositoryException if another error occurs.
-     */
-    public function getString();
-
-    /**
-     * Returns an <code>InputStream</code> representation of the value of this
-     * property. A shortcut for
-     * <code>Property.getValue().getStream()</code>. See {@link Value}.
-     * If this property is multi-valued, this method throws a <code>ValueFormatException</code>.
-     * <p>
-     * If the value of this property cannot be converted to a
-     * stream, a <code>ValueFormatException</code> is thrown.
-     * <p>
-     * A <code>RepositoryException</code> is thrown if another error occurs.
-     *
-     * @return A stream representation of the value of this property.
-     * @throws ValueFormatException if conversion to a string is not possible or if the
-     * property is multi-valued.
-     * @throws RepositoryException if another error occurs
-     */
-    public function getStream();
-
-    /**
-     * Returns a <code>long</code> representation of the value of this
-     * property. A shortcut for
-     * <code>Property.getValue().getLong()</code>. See {@link Value}.
-     * If this property is multi-valued, this method throws a <code>ValueFormatException</code>.
-     * <p>
-     * If the value of this property cannot be converted to a
-     * <code>long</code>, a <code>ValueFormatException</code> is thrown.
-     * <p>
-     * A <code>RepositoryException</code> is thrown if another error occurs.
-     *
-     * @return A <code>long</code> representation of the value of this property.
-     * @throws ValueFormatException if conversion to a string is not possible or if the
-     * property is multi-valued.
-     * @throws RepositoryException if another error occurs
-     */
-    public function getLong();
-
-    /**
-     * Returns a <code>double</code> representation of the value of this
-     * property. A shortcut for
-     * <code>Property.getValue().getDouble()</code>. See {@link Value}.
-     * If this property is multi-valued, this method throws a <code>ValueFormatException</code>.
-     * <p>
-     * If the value of this property cannot be converted to a
-     * double, a <code>ValueFormatException</code> is thrown.
-     * <p>
-     * A <code>RepositoryException</code> is thrown if another error occurs.
-     *
-     * @return A double representation of the value of this property.
-     * @throws ValueFormatException if conversion to a string is not possible or if the
-     * property is multi-valued.
-     * @throws RepositoryException if another error occurs
-     */
-    public function getDouble();
-
-    /**
-     * Returns date. A shortcut for
-     * <code>Property.getValue().getDate()</code>. See {@link Value}.
-     * If this property is multi-valued, this method throws a <code>ValueFormatException</code>.
-     * <p>
-     * If the value of this property cannot be converted to a
-     * date, a <code>ValueFormatException</code> is thrown.
-     * <p>
-     * A <code>RepositoryException</code> is thrown if another error occurs.
-     *
-     * @return A date (<code>Calendar</code> object)  representation of the value of this property.
-     * @throws ValueFormatException if conversion to a string is not possible or if the
-     * property is multi-valued.
-     * @throws RepositoryException if another error occurs
-     */
-    public function getDate();
-
-    /**
-     * Returns a <code>boolean</code> representation of the value of this
-     * property. A shortcut for
-     * <code>Property.getValue().getBoolean()</code>. See {@link Value}.
-     * If this property is multi-valued, this method throws a <code>ValueFormatException</code>.
-     * <p>
-     * If the value of this property cannot be converted to a
-     * boolean, a <code>ValueFormatException</code> is thrown.
-     * <p>
-     * A <code>RepositoryException</code> is thrown if another error occurs.
-     *
-     * @return A boolean representation of the value of this property.
-     * @throws ValueFormatException if conversion to a string is not possible or if the
-     * property is multi-valued.
-     * @throws RepositoryException if another error occurs
-     */
-    public function getBoolean();
-
-    /**
-     * If this property is of type <code>REFERENCE</code>
-     * this method returns the node to which this property refers.
-     * <p>
-     * If this property is multi-valued, this method throws a <code>ValueFormatException</code>.
-     * <p>
-     * If this property cannot be coverted to a reference, then a <code>ValueFormatException</code> is thrown.
-     * <p>
-     * If this property is a REFERENCE property but is currently part of the frozen state of a version in version
-     * storage, this method will throw a <code>ValueFormatException</code>.
-     * <p>
-     * A <code>RepositoryException</code> is thrown if another error occurs.
-     *
-     * @return the referenced Node
-     * @throws ValueFormatException if this property cannot be converted to a reference, if the
-     * property is multi-valued or if this property is a REFERENCE property but is currently part of the frozen
-     * state of a version in version storage.
-     * @throws RepositoryException if another error occurs
-     */
-    public function getNode();
-
-    /**
-     * Returns the length of the value of this property.
-     * <p>
-     * Returns the length in bytes if the value
-     * is a <code>PropertyType.BINARY</code>, otherwise it returns the number
-     * of characters needed to display the value (for strings this is the string
-     * length, for numeric types it is the number of characters needed to
-     * display the number). Returns �1 if the implementation cannot determine
-     * the length.
-     *
-     * If this property is multi-valued, this method throws a <code>ValueFormatException</code>.
-     *
-     * @return an <code>long</code>.
-     * @throws ValueFormatException if this property is multi-valued.
-     * @throws RepositoryException if another error occurs.
-     */
-    public function getLength();
-
-    /**
-     * Returns an array holding the lengths of the values of this (multi-value) property in bytes
-     * if the values are <code>PropertyType.BINARY</code>, otherwise it returns the number of
-     * characters needed to display each value (for strings this is the string length, for
-     * numeric types it is the number of characters needed to display the number). The order of the
-     * length values corresponds to the order of the values in the property.
-     * <p/>
-     * Returns a <code>�1</code> in the appropriate position if the implementation cannot determine
-     * the length of a value.
-     * <p/>
-     * If this property is single-valued, this method throws a <code>ValueFormatException</code>.
-     * <p/>
-     * A RepositoryException is thrown if another error occurs.
-     * @return an array of lengths
-     * @throws ValueFormatException if this property is single-valued.
-     * @throws RepositoryException if another error occurs.
-     */
-    public function getLengths();
-
-    /**
-     * Returns the property definition that applies to this property. In some cases there may appear to
-     * be more than one definition that could apply to this node. However, it is assumed that upon
-     * creation of this property, a single particular definition was used and it is <i>that</i>
-     * definition that this method returns. How this governing definition is selected upon property
-     * creation from among others which may have been applicable is an implemention issue and is not
-     * covered by this specification.
-     *
-     * @see NodeType#getPropertyDefinitions
-     * @throws RepositoryException if an error occurs.
-     * @return a <code>PropertyDefinition</code> object.
-     */
-    public function getDefinition();
-
-    /**
-     * Returns the type of this <code>Property</code>. One of:
-     * <ul>
-     * <li><code>PropertyType::STRING</code></li>
-     * <li><code>PropertyType::BINARY</code></li>
-     * <li><code>PropertyType::DATE</code></li>
-     * <li><code>PropertyType::DOUBLE</code></li>
-     * <li><code>PropertyType::LONG</code></li>
-     * <li><code>PropertyType::BOOLEAN</code></li>
-     * <li><code>PropertyType::NAME</code></li>
-     * <li><code>PropertyType::PATH</code></li>
-     * <li><code>PropertyType::REFERENCE</code></li>
-     * </ul>
-     * The type returned is that which was set at property creation. Note that for some property <code>p</code>,
-     * the type returned by <code>p.getType()</code> may differ from the type returned by
-     * <code>p.getDefinition.getRequiredType()</code> only in the case where the latter returns <code>UNDEFINED</code>.
-     * The type of a property instance is never <code>UNDEFINED</code> (it must always have some actual type).
-     *
-     * @return an int
-     * @throws RepositoryException if an error occurs
-     */
-    public function getType();
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/PropertyIterator.php b/contrib/phpcr/PHPCR/PropertyIterator.php
deleted file mode 100644
index 3dba0b3..0000000
--- a/contrib/phpcr/PHPCR/PropertyIterator.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/RangeIterator.php';
-require_once 'PHPCR/NoSuchElementException.php';
-require_once 'PHPCR/Property.php';
-
-
-/**
- * Allows easy iteration through a list of <code>Property</code>s
- * with <code>nextProperty</code> as well as a <code>skip</code> method.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- */
-interface PropertyIterator extends RangeIterator
-{
-    /**
-     * Returns the next <code>Property</code> in the iteration.
-     *
-     * @return the next <code>Property</code> in the iteration.
-     * @throws NoSuchElementException if iteration has no more <code>Property</code>s.
-     */
-    public function nextProperty();
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/PropertyType.php b/contrib/phpcr/PHPCR/PropertyType.php
deleted file mode 100644
index d610cd6..0000000
--- a/contrib/phpcr/PHPCR/PropertyType.php
+++ /dev/null
@@ -1,154 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/IllegalArgumentException.php';
-
-
-/**
- * The property types supported by the JCR standard.
- * <p/>
- * <p>This interface defines following property types:
- * <ul>
- * <li><code>STRING</code>
- * <li><code>BINARY</code>
- * <li><code>LONG</code>
- * <li><code>DOUBLE</code>
- * <li><code>DATE</code>
- * <li><code>BOOLEAN</code>
- * <li><code>NAME</code>
- * <li><code>PATH</code>
- * <li><code>REFERENCE</code>
- * </ul>
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- */
-final class PropertyType
-{
-    /*
-     * The supported property types.
-     */
-    const STRING    = 1;
-    const BINARY    = 2;
-    const LONG      = 3;
-    const DOUBLE    = 4;
-    const DATE      = 5;
-    const BOOLEAN   = 6;
-    const NAME      = 7;
-    const PATH      = 8;
-    const REFERENCE = 9;
-
-    /*
-     * Undefined type.
-     */
-    const UNDEFINED = 0;
-
-    /*
-     * The names of the supported property types,
-     * as used in serialization.
-     */
-    const TYPENAME_STRING    = "String";
-    const TYPENAME_BINARY    = "Binary";
-    const TYPENAME_LONG      = "Long";
-    const TYPENAME_DOUBLE    = "Double";
-    const TYPENAME_DATE      = "Date";
-    const TYPENAME_BOOLEAN   = "Boolean";
-    const TYPENAME_NAME      = "Name";
-    const TYPENAME_PATH      = "Path";
-    const TYPENAME_REFERENCE = "Reference";
-
-    const TYPENAME_UNDEFINED = "undefined";
-
-
-    /**
-     * Returns the name of the specified <code>type</code>,
-     * as used in serialization.
-     * @param  int    $type the property type
-     * @return string the name of the specified <code>type</code>
-     * @throws IllegalArgumentException if <code>type</code>
-     * is not a valid property type.
-     */
-    public static function nameFromValue( $type ) {
-        switch ( $type ) {
-            case self::STRING:
-                return self::TYPENAME_STRING;
-
-            case self::BINARY:
-                return self::TYPENAME_BINARY;
-
-            case self::BOOLEAN:
-                return self::TYPENAME_BOOLEAN;
-
-            case self::LONG:
-                return self::TYPENAME_LONG;
-
-            case self::DOUBLE:
-                return self::TYPENAME_DOUBLE;
-
-            case self::DATE:
-                return self::TYPENAME_DATE;
-
-            case self::PATH:
-                return self::TYPENAME_PATH;
-
-            case self::NAME:
-                return self::TYPENAME_NAME;
-
-            case self::REFERENCE:
-                return self::TYPENAME_REFERENCE;
-
-            default:
-                throw new IllegalArgumentException( "unknown type: " + $type );
-        }
-    }
-
-    /**
-     * Returns the numeric constant value of the type with the specified name.
-     * @param  string $name the name of the property type
-     * @return int    the numeric constant value
-     * @throws IllegalArgumentException if <code>name</code>
-     * is not a valid property type name.
-     */
-    public static function valueFromName( $name ) {
-        if ( $name == self::TYPENAME_STRING ) {
-            return self::STRING;
-        } else if ( $name == self::TYPENAME_BINARY ) {
-            return self::BINARY;
-        } else if ( $name == self::TYPENAME_BOOLEAN ) {
-            return self::BOOLEAN;
-        } else if ( $name == self::TYPENAME_LONG ) {
-            return self::LONG;
-        } else if ( $name == self::TYPENAME_DOUBLE ) {
-            return self::DOUBLE;
-        } else if ( $name == self::TYPENAME_DATE ) {
-            return self::DATE;
-        } else if ( $name == self::TYPENAME_PATH ) {
-            return self::PATH;
-        } else if ( $name == self::TYPENAME_NAME ) {
-            return self::NAME;
-        }  else if ( $name == self::TYPENAME_REFERENCE ) {
-            return self::REFERENCE;
-        } else {
-            throw new IllegalArgumentException( "unknown type: " + $name );
-        }
-    }
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/RangeIterator.php b/contrib/phpcr/PHPCR/RangeIterator.php
deleted file mode 100644
index 0d85ac2..0000000
--- a/contrib/phpcr/PHPCR/RangeIterator.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-/**
- * Extends <code>Iterator</code> with the <code>skip</code>, <code>getSize</code>
- * and <code>getPos</code> methods.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- */
-interface RangeIterator extends Iterator
-{
-    /**
-     * Skip a number of elements in the iterator.
-     *
-     * @param skipNum the non-negative number of elements to skip
-     */
-    public function skip( $skipNum );
-
-    /**
-     * Returns the number of elements in the iterator.
-     * If this information is unavailable, returns -1.
-     *
-     * @return a long
-     */
-    public function getSize();
-
-    /**
-     * Returns the current position within the iterator. The number
-     * returned is the 0-based index of the next element in the iterator,
-     * i.e. the one that will be returned on the subsequent <code>next</code> call.
-     * <p/>
-     * Note that this method does not check if there is a next element,
-     * i.e. an empty iterator will always return 0.
-     *
-     * @return a long
-     */
-    public function getPos();
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/ReferentialIntegrityException.php b/contrib/phpcr/PHPCR/ReferentialIntegrityException.php
deleted file mode 100644
index f3b5eb3..0000000
--- a/contrib/phpcr/PHPCR/ReferentialIntegrityException.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/RepositoryException.php';
-
-
-/**
- * Exception thrown by Node#merge(String srcWorksapce, boolean shallow).
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- */
-class ReferentialIntegrityException extends RepositoryException
-{
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/Repository.php b/contrib/phpcr/PHPCR/Repository.php
deleted file mode 100644
index 96d8c1e..0000000
--- a/contrib/phpcr/PHPCR/Repository.php
+++ /dev/null
@@ -1,184 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/LoginException.php';
-require_once 'PHPCR/NoSuchWorkspaceException.php';
-require_once 'PHPCR/RepositoryException.php';
-require_once 'PHPCR/Session.php';
-
-
-/**
- * The entry point into the content repository.
- * Represents the entry point into the content repository. Typically the object
- * implementing this interface will be acquired from a JNDI-compatible
- * naming and directory service.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- */
-interface Repository
-{
-    /**
-     * The descriptor key for the version of the specification
-     * that this repository implements.
-     */
-    const SPEC_VERSION_DESC = "jcr.specification.version";
-
-    /**
-     * The descriptor key for the name of the specification
-     * that this repository implements.
-     */
-    const SPEC_NAME_DESC = "jcr.specification.name";
-
-    /**
-     * The descriptor key for the name of the repository vendor.
-     */
-    const REP_VENDOR_DESC = "jcr.repository.vendor";
-
-    /**
-     * The descriptor key for the URL of the repository vendor.
-     */
-    const REP_VENDOR_URL_DESC = "jcr.repository.vendor.url";
-
-    /**
-     * The descriptor key for the name of this repository implementation.
-     */
-    const REP_NAME_DESC = "jcr.repository.name";
-
-    /**
-     * The descriptor key for the version of this repository implementation.
-     */
-    const REP_VERSION_DESC = "jcr.repository.version";
-
-    /**
-     * The presence of this key indicates that this implementation supports
-     * all level 1 features. This key will always be present.
-     */
-    const LEVEL_1_SUPPORTED = "level.1.supported";
-
-    /**
-     * The presence of this key indicates that this implementation supports
-     * all level 2 features.
-     */
-    const LEVEL_2_SUPPORTED = "level.2.supported";
-
-    /**
-     * The presence of this key indicates that this implementation supports transactions.
-     */
-    const OPTION_TRANSACTIONS_SUPPORTED = "option.transactions.supported";
-
-    /**
-     * The presence of this key indicates that this implementation supports versioning.
-     */
-    const OPTION_VERSIONING_SUPPORTED = "option.versioning.supported";
-
-    /**
-     * The presence of this key indicates that this implementation supports observation.
-     */
-    const OPTION_OBSERVATION_SUPPORTED = "option.observation.supported";
-
-    /**
-     * The presence of this key indicates that this implementation supports locking.
-     */
-    const OPTION_LOCKING_SUPPORTED = "option.locking.supported";
-
-    /**
-     * The presence of this key indicates that this implementation supports the SQL query language.
-     */
-    const OPTION_QUERY_SQL_SUPPORTED = "option.query.sql.supported";
-
-    /**
-     * The presence of this key indicates that the index position notation for
-     * same-name siblings is supported within XPath queries.
-     */
-    const QUERY_XPATH_POS_INDEX = "query.xpath.pos.index";
-
-    /**
-     * The presence of this key indicates that XPath queries return results in document order.
-     */
-    const QUERY_XPATH_DOC_ORDER = "query.xpath.doc.order";
-
-    /**
-     * The presence of this key indicates that SQL queries can SELECT the pseudo-property
-     * <code>jcr:path</code>.
-     */
-    const QUERY_JCRPATH = "query.jcrpath";
-
-    /**
-     * The presence of this key indicates that the <code>jcr:score</code> pseudo-property is
-     * available in XPath and SQL queries that include a <code>jcrfn:contains</code>
-     * (in XPath) or <code>CONTAINS</code> (in SQL) function to do a full-text search.
-     */
-    const QUERY_JCRSCORE = "query.jcrscore";
-
-
-    /**
-     * Returns a string array holding all descriptor keys available for this implementation.
-     * This set must contain at least the built-in keys defined by the string constants in
-     * this interface.Used in conjunction with {@link #getDescriptor(String name)}
-     * to query information about this repository implementation.
-     */
-    public function getDescriptorKeys();
-
-    /**
-     * Returns the descriptor for the specified key. Used to query information about this
-     * repository implementation. The set of available keys can be found by calling
-     * {@link #getDescriptorKeys}. If the specifed key is not found, <code>null</code> is returned.
-     *
-     * @param key a string corresponding to a descriptor for this repsoitory implementation.
-     * @return a descriptor string
-     */
-    public function getDescriptor( $key );
-
-    /**
-     * Authenticates the user using the supplied <code>credentials</code>.
-     * <p>
-     * If <code>workspaceName</code> is recognized as the name of an existing workspace in the repository and
-     * authorization to access that workspace is granted, then a new <code>Session</code> object is returned.
-     * The format of the string <code>workspaceName</code> depends upon the implementation.
-     * <p>
-     * If <code>credentials</code> is <code>null</code>, it is assumed that authentication is handled by a
-     * mechanism external to the repository itself (for example, through the JAAS framework) and that the
-     * repository implementation exists within a context (for example, an application server) that allows
-     * it to handle authorization of the request for access to the specified workspace.
-     * <p>
-     * If <code>workspaceName</code> is <code>null</code>, a default workspace is automatically selected by
-     * the repository implementation. This may, for example, be the "home workspace" of the user whose
-     * credentials were passed, though this is entirely up to the configuration and implementation of the
-     * repository. Alternatively, it may be a "null workspace" that serves only to provide the method
-     * {@link Workspace#getAccessibleWorkspaceNames}, allowing the client to select from among available "real"
-     * workspaces.
-     * <p>
-     * If authentication or authorization for the specified workspace fails, a <code>LoginException</code> is
-     * thrown.
-     * <p>
-     * If <code>workspaceName</code> is not recognized, a <code>NoSuchWorkspaceException</code> is thrown.
-     *
-     * @param credentials   The credentials of the user
-     * @param workspaceName the name of a workspace.
-     * @return a valid session for the user to access the repository.
-     * @throws LoginException  If the login fails.
-     * @throws NoSuchWorkspaceException If the specified <code>workspaceName</code> is not recognized.
-     * @throws RepositoryException if another error occurs.
-     */
-    public function login( $credentials = null, $workspaceName = null );
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/RepositoryException.php b/contrib/phpcr/PHPCR/RepositoryException.php
deleted file mode 100644
index ec42165..0000000
--- a/contrib/phpcr/PHPCR/RepositoryException.php
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-/**
- * Main exception thrown by classes in this package. May either contain
- * an error message or another exception wrapped inside this exception.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- */
-class RepositoryException extends Exception
-{
-    /**
-     * Constructs a new instance of this class.
-     */
-    public function __construct() {
-        $args = func_get_args();
-        $msg  = null;
-        $ex   = null;
-
-        if ( count( $args ) ) {
-            if ( is_string( $args[0] ) && isset( $args[1] ) ) {
-                if ( $args[1] instanceof Exception ) {
-                    $ex = $args[1];
-                }
-            } else if ( $args[0] instanceof Exception ) {
-                $ex = $args[0];
-            }
-
-            if ( isset( $ex ) ) {
-                $msg .= $ex->getMessage();
-            }
-
-            if ( is_string( $args[0] ) ) {
-                $msg .= ' (' . $args[0] . ')';
-            }
-
-            parent::__construct( $msg );
-        }
-    }
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/SAXException.php b/contrib/phpcr/PHPCR/SAXException.php
deleted file mode 100644
index 52145c5..0000000
--- a/contrib/phpcr/PHPCR/SAXException.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-/**
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- */
-class SAXException extends Exception
-{
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/Session.php b/contrib/phpcr/PHPCR/Session.php
deleted file mode 100644
index 8af2d43..0000000
--- a/contrib/phpcr/PHPCR/Session.php
+++ /dev/null
@@ -1,715 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/Repository.php';
-require_once 'PHPCR/Workspace.php';
-require_once 'PHPCR/Session.php';
-require_once 'PHPCR/Credentials.php';
-require_once 'PHPCR/LoginException.php';
-require_once 'PHPCR/RepositoryException.php';
-require_once 'PHPCR/Node.php';
-require_once 'PHPCR/Item.php';
-require_once 'PHPCR/ItemNotFoundException.php';
-require_once 'PHPCR/PathNotFoundException.php';
-require_once 'PHPCR/ItemExistsException.php';
-require_once 'PHPCR/PathNotFoundException.php';
-require_once 'PHPCR/version/VersionException.php';
-require_once 'PHPCR/nodetype/ConstraintViolationException.php';
-require_once 'PHPCR/lock/LockException.php';
-require_once 'PHPCR/AccessDeniedException.php';
-require_once 'PHPCR/InvalidItemStateException.php';
-require_once 'PHPCR/IOException.php';
-require_once 'PHPCR/InvalidSerializedDataException.php';
-require_once 'PHPCR/SAXException.php';
-require_once 'PHPCR/NamespaceException.php';
-
-
-/**
- * The <code>Session</code> object provides read and (in level 2) write access to the content of a
- * particular workspace in the repository.
- * <p/>
- * The <code>Session</code> object is returned by {@link Repository#login}.
- * It encapsulates both the authorization settings of a particular user (as specified by the
- * passed <code>Credentials</code>)and a binding to the workspace specified by the
- * <code>workspaceName</code> passed on <code>login</code>.
- * <p/>
- * Each <code>Session</code> object is associated one-to-one with a <code>Workspace</code> object.
- * The <code>Workspace</code> object represents a "view" of an actual repository workspace entity
- * as seen through the authorization settings of its associated <code>Session</code>.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- */
-interface Session
-{
-    /**
-     * Returns the <code>Repository</code> object through which this session was
-     * acquired.
-     *
-     * @return a <code>{@link Repository}</code> object.
-     */
-    public function getRepository();
-
-    /**
-     * Gets the user ID that was used to acquire this session. This method is free to return an
-     * "anonymous user id" or <code>null</code> if the <code>Credentials</code> used to acquire this session happens not
-     * to have provided a real user ID (for example,  if instead of <code>SimpleCredentials</code> some other
-     * implementation of <code>Credentials</code> was used).
-     *
-     * @return the user id from the credentials used to acquire this session.
-     */
-    public function getUserID();
-
-    /**
-     * Returns the value of the named attribute as an <code>Object</code>, or <code>null</code> if no attribute of the
-     * given name exists. See {@link Session#getAttributeNames}.
-     *
-     * @param name the name of an attribute passed in the credentials used to acquire this session.
-     *
-     * @return the value of the attribute.
-     */
-    public function getAttribute( $name );
-
-   /**
-    * Returns the names of the attributes set in this session as a result of the <code>Credentials</code> that were
-    * used to acquire it. Not all <code>Credentials</code> implementations will contain attributes (though, for example,
-    * <code>SimpleCredentials</code> does allow for them). This method returns an empty array if the
-    * <code>Credentials</code> instance used to acquire this <code>Session</code> did not provide attributes.
-    *
-    * @return A string array containing the names of all attributes passed in the credentials used to acquire this session.
-    */
-    public function getAttributeNames();
-
-    /**
-     * Returns true if this Session object is usable by the client. Otherwise,
-     * returns false. A usable Session is one that is neither logged-out,
-     * timed-out nor in any other way disconnected from the repository.
-     *
-     * @return true if this Session is usable, false otherwise.
-     */
-    public function isLive();
-
-    /**
-     * This method returns a ValueFactory that is used to create Value
-     * objects for use in setting of repository properties.
-     *
-     * If writing to the repository is not supported (because this is
-     * a level 1-only implementation, for example) an
-     * UnsupportedRepositoryOperationException will be thrown.
-     *
-     * @return a <code>{@link ValueFactory}</code> object
-     * @throws UnsupportedRepositoryOperationException if writing to the
-     * repository is not supported.
-     * @throws RepositoryException if another error occurs
-     */
-    public function getValueFactory();
-
-    /**
-     * Returns the <code>Workspace</code> attached to this <code>Session</code>.
-     *
-     * @return a <code>{@link Workspace}</code> object.
-     */
-    public function getWorkspace();
-
-    /**
-     * Returns a new session in accordance with the specified (new) Credentials.
-     * Allows the current user to "impersonate" another using incomplete
-     * credentials (perhaps including a user name but no password, for example),
-     * assuming that their original session gives them that permission.
-     * <p/>
-     * The new <code>Session</code> is tied to a new <code>Workspace</code> instance.
-     * In other words, <code>Workspace</code> instances are not re-used. However,
-     * the <code>Workspace</code> instance returned represents the same actual
-     * persistent workspace entity in the repository as is represented by the
-     * <code>Workspace</code> object tied to this <code>Session</code>.
-     * <p/>
-     * Throws a <code>LoginException</code> if the current session does not have
-     * sufficient rights.
-     *
-     * @param credentials A <code>Credentials</code> object
-     * @return a <code>Session</code> object
-     * @throws LoginException if the current session does not have
-     * sufficient rights.
-     * @throws RepositoryException if another error occurs.
-     */
-    public function impersonate( Credentials $credentials );
-
-    /**
-     * Returns the root node of the workspace.
-     * The root node, "/", is the main access point to the content of the
-     * workspace.
-     *
-     * @return The root node of the workspace: a <code>Node</code> object.
-     *
-     * @throws RepositoryException if an error occurs.
-     */
-    public function getRootNode();
-
-    /**
-     * Returns the node specifed by the given UUID. Only applies to nodes that
-     * expose a UUID, in other words, those of mixin node type
-     * <code>mix:referenceable</code>
-     *
-     * @param uuid A universally unique identifier.
-     * @return A <code>Node</code>.
-     * @throws ItemNotFoundException if the specified UUID is not found.
-     * @throws RepositoryException if another error occurs.
-     */
-    public function getNodeByUUID( $uuid );
-
-    /**
-     * Returns the item at the specified absolute path in the workspace.
-     *
-     * @param absPath An absolute path.
-     * @return An <code>Item</code>.
-     * @throws PathNotFoundException if the specified path cannot be found.
-     * @throws RepositoryException if another error occurs.
-     */
-    public function getItem( $absPath );
-
-    /**
-     * Returns <code>true</code> if an item exists at <code>absPath</code>; otherwise returns <code>false</code>.
-     * Also returns <code>false</code> if the specified <code>absPath</code> is malformed.
-     *
-     * @param absPath an absolute path
-     * @return <code>true</code> if an item exists at <code>absPath</code>; otherwise returns <code>false</code>.
-     * @throws RepositoryException if an error occurs.
-     */
-    public function itemExists( $absPath );
-
-    /**
-     * Moves the node at <code>srcAbsPath</code> (and its entire subtree) to the new location
-     * at <code>destAbsPath</code>.
-     * <p>
-     * In order to persist the change, a <code>save</code>
-     * must be called on the parents of both the source and destination
-     * locations.
-     * <p/>
-     * A <code>ConstraintViolationException</code> is thrown if a node-type
-     * or other constraint violation is detected immediately. Otherwise,
-     * if the violation is only detected later, at <code>save</code>, then a
-     * <code>ConstraintViolationException</code> is thrown by that method.
-     * Implementations may differ as to which constraints are enforced immediately,
-     * and which on <code>save</code>.
-     * <p>
-     * As well, a <code>ConstraintViolationException</code> will be thrown on
-     * <code>save</code> if an attempt is made to seperately <code>save</code>
-     * either the source or destination node.
-     * <p>
-     * Note that this behaviour differs from that of
-     * {@link Workspace#move}, which operates directly in the persistent
-     * workspace and does not require a <code>save</code>.
-     * <p/>
-     * The <code>destAbsPath</code> provided must not
-     * have an index on its final element. If it does then a <code>RepositoryException</code>
-     * is thrown. Strictly speaking, the <code>destAbsPath</code> parameter is actually an <i>absolute path</i>
-     * to the parent node of the new location, appended with the new <i>name</i> desired for the
-     * moved node. It does not specify a position within the child node
-     * ordering (if such ordering is supported). If ordering is supported by the node type of
-     * the parent node of the new location, then the newly moved node is appended to the end of the
-     * child node list.
-     * <p>
-     * This method cannot be used to move just an individual property by itself.
-     * It moves an entire node and its subtree (including, of course, any properties
-     * contained therein).
-     * <p>
-     * If no node exists at <code>srcAbsPath</code> or no node exists one level above <code>destAbsPath</code>
-     * (i.e. there is no node that will serve as the parent of the moved item) then a
-     * <code>PathNotFoundException</code> is thrown.
-     * <p>
-     * An <code>ItemExistException</code> is thrown if a property already exists at
-     * <code>destAbsPath</code> or a node already exist there, and same name
-     * siblings are not allowed.
-     * <p>
-     * A <code>VersionException</code> is thrown if the parent node of <code>destAbsPath</code> or the parent node of
-     * <code>srcAbsPath</code> is versionable and checked-in, or is non-verionable and its nearest versionable
-     * ancestor is checked-in.
-     * <p>
-     * A <code>LockException</code> is thrown if the <code>move</code> operation would violate a lock.
-     *
-     * @param srcAbsPath the root of the subtree to be moved.
-     * @param destAbsPath the location to which the subtree is to be moved.
-     * @throws ItemExistsException if a property already exists at
-     * <code>destAbsPath</code> or a node already exist there, and same name
-     * siblings are not allowed.
-     * @throws PathNotFoundException if either <code>srcAbsPath</code> or <code>destAbsPath</code> cannot be found.
-     * @throws VersionException if the parent node of <code>destAbsPath</code> or the parent node of <code>srcAbsPath</code>
-     * is versionable and checked-in, or or is non-verionable and its nearest versionable ancestor is checked-in.
-     * @throws ConstraintViolationException if a node-type or other constraint violation is detected immediately.
-     * @throws LockException if the move operation would violate a lock.
-     * @throws RepositoryException if the last element of <code>destAbsPath</code> has an index or if another error occurs.
-     */
-    public function move( $srcAbsPath, $destAbsPath );
-
-    /**
-     * Validates all pending changes currently recorded in this <code>Session</code>. If validation of all
-     * pending changes succeeds, then this change information is cleared from the <code>Session</code>.
-     * If the <code>save</code> occurs outside a transaction, the changes are persisted and thus
-     * made visible to other <code>Sessions</code>. If the <code>save</code> occurs within a transaction,
-     * the changes are not persisted until the transaction is committed.
-     * <p>
-     * If validation fails, then no pending changes are saved and they remain recorded on the <code>Session</code>.
-     * There is no best-effort or partial save.
-     * <p>
-     * When an item is saved the item in persistent storage to which pending changes are written is
-     * determined as follows:
-     * <ul>
-     *   <li>
-     *     If the transient item has a UUID, then the changes are written to the persistent item with the same UUID.
-     *   </li>
-     *   <li>
-     *     If the transient item does not have a UUID then its nearest ancestor with a UUID, or the root node
-     *     (whichever occurs first) is found, and the relative path from the node in persistent node with that UUID is
-     *     used to determine the item in persistent storage to which the changes are to be written.
-     *   </li>
-     * </ul>
-     * As a result of these rules, a <code>save</code> of an item that has a UUID will succeed even if that item has,
-     * in the meantime, been moved in persistent storage to a new location (that is, its path has changed). However, a
-     * <code>save</code> of a non-UUID item will fail (throwing an <code>InvalidItemStateException</code>) if it has,
-     * in the meantime, been moved in persistent storage to a new location. A <code>save</code> of a non-UUID item will
-     * also fail if it has, in addition to being moved, been replaced in its original position by a UUID-bearing item.
-     * <p>
-     * Note that <code>save</code> uses the same rules to match items between transient storage and persistent storage
-     * as {@link Node#update} does to match nodes between two workspaces.
-     * <p>
-     * An <code>AccessDeniedException</code> will be thrown if any of the changes
-     * to be persisted would violate the access privileges of this
-     * <code>Session</code> or if. Also thrown if  any of the
-     * changes to be persisted would cause the removal of a node that is currently
-     * referenced by a <code>REFERENCE</code> property that this Session
-     * <i>does not</i> have read access to.
-     * <p>
-     * A <code>ConstraintViolationException</code> will be thrown if any of the
-     * changes to be persisted would violate a node type restriction.
-     * Additionally, a repository may use this exception to enforce
-     * implementation- or configuration-dependant restrictions.
-     * <p>
-     * A <code>LockException</code> is thrown if any of the changes to be
-     * persisted would violate a lock.
-     * <p>
-     * An <code>InvalidItemStateException</code> is thrown if any of the
-     * changes to be persisted conflicts with a change already persisted
-     * through another session and the implementation is such that this
-     * conflict can only be detected at save-time and therefore was not
-     * detected earlier, at change-time.
-     * <p>
-     * A <code>ReferentialIntegrityException</code> is thrown if any of the
-     * changes to be persisted would cause the removal of a node that is currently
-     * referenced by a <code>REFERENCE</code> property that this <code>Session</code>
-     * has read access to.
-     * <p>
-     * A <code>VersionException</code> is thrown if the <code>save</code> would make a result in
-     * a change to persistent storage that would violate the read-only status of a
-     * checked-in node.
-     * <p>
-     * A <code>LockException</code> is thrown if the <code>save</code> would result in a
-     * change to persistent storage that would violate a lock.
-     * <p>
-     * A <code>RepositoryException</code> will be thrown if another error
-     * occurs.
-     *
-     * @throws AccessDeniedException if any of the changes to be persisted would violate
-     * the access privileges of the this <code>Session</code>. Also thrown if  any of the
-     * changes to be persisted would cause the removal of a node that is currently
-     * referenced by a <code>REFERENCE</code> property that this Session
-     * <i>does not</i> have read access to.
-     * @throws LockException if any of the changes to be persisted would violate a lock.
-     * @throws ConstraintViolationException if any of the changes to be persisted would
-     * violate a node type or restriction. Additionally, a repository may use this
-     * exception to enforce implementation- or configuration-dependent restrictions.
-     * @throws InvalidItemStateException if any of the
-     * changes to be persisted conflicts with a change already persisted
-     * through another session and the implementation is such that this
-     * conflict can only be detected at save-time and therefore was not
-     * detected earlier, at change-time.
-     * @throws ReferentialIntegrityException if any of the
-     * changes to be persisted would cause the removal of a node that is currently
-     * referenced by a <code>REFERENCE</code> property that this <code>Session</code>
-     * has read access to.
-     * @throws VersionException if the <code>save</code> would make a result in
-     * a change to persistent storage that would violate the read-only status of a
-     * checked-in node.
-     * @throws LockException if the <code>save</code> would result in a
-     * change to persistent storage that would violate a lock.
-     * @throws RepositoryException if another error occurs.
-     */
-    public function save();
-
-    /**
-     * If <code>keepChanges</code> is <code>false</code>, this method discards all pending changes
-     * currently recorded in this <code>Session</code> and returns all items to reflect the current
-     * saved state. Outside a transaction this state is simply the current state of persistent storage.
-     * Within a transaction, this state will reflect persistent storage as modified by changes that have
-     * been saved but not yet committed.
-     * <p>
-     * If <code>keepChanges</code> is true then pending change are not discarded but items that do not
-     * have changes pending have their state refreshed to reflect the current saved state, thus revealing
-     * changes made by other sessions.
-     *
-     * @throws RepositoryException if an error occurs.
-     */
-    public function refresh( $keepChanges );
-
-    /**
-     * Returns <code>true</code> if this session holds pending (that is, unsaved) changes;
-     * otherwise returns <code>false</code>.
-     *
-     * @return a boolean
-     * @throws RepositoryException if an error occurs
-     */
-    public function hasPendingChanges();
-
-    /**
-     * Determines whether this <code>Session</code> has permission to perform the specified actions
-     * at the specified <code>absPath</code>. This method quietly returns if the access request is
-     * permitted, or throws Exception otherwise.
-     * <p/>
-     * The <code>actions</code> parameter is a comma separated list of action strings. The following
-     * action strings are defined:
-     * <ul>
-     * <li>
-     * <code>add_node</code>: If <code>checkPermission(path, "add_node")</code> returns quietly, then
-     * this <code>Session</code> has permission to add a node at <code>path</code>, otherwise permission
-     * is denied.
-     * </li>
-     * <li>
-     * <code>set_property</code>: If <code>checkPermission(path, "set_property")</code> returns quietly,
-     * then this <code>Session</code> has permission to set (add or change) a property at <code>path</code>,
-     * otherwise permission is denied.
-     * </li>
-     * <li>
-     * <code>remove</code>: If <code>checkPermission(path, "remove")</code> returns quietly, then this
-     * <code>Session</code> has permission to remove an item at <code>path</code>, otherwise permission is denied.
-     * </li>
-     * <li>
-     * <code>read</code>: If <code>checkPermission(path, "read")</code> returns quietly, then this
-     * <code>Session</code> has permission to retrieve (and read the value of, in the case of a property)
-     * an item at <code>path</code>, otherwise permission is denied.
-     * </li>
-     * </ul>
-     * When more than one action is specified in the <code>actions</code> parameter, this method will only
-     * return quietly if this <code>Session</code> has permission to perform <i>all</i> of the listed
-     * actions at the specified path.
-     * <p/>
-     * The information returned through this method will only reflect access control policies
-     * and not other restrictions that may exist. For example, even though <code>checkPermission</code>
-     * may indicate that a particular <code>Session</code> may add a property at <code>/A/B/C</code>,
-     * the node type of the node at <code>/A/B</code> may prevent the addition of a property called
-     * <code>C</code>.
-     *
-     * @throws Exception
-     */
-    public function checkPermission( $absPath, $actions );
-
-    /**
-     * Returns a <code>ContentHandler</code> which can be used to push SAX events into the repository.
-     * If the incoming XML stream (in the form of SAX events) does not appear to be a JCR system view XML document then it is
-     * interpreted as a document view XML document.
-     * <p>
-     * The incoming XML is deserialized into a subtree of items immediately below the node at
-     * <code>parentAbsPath</code>.
-     * <p>
-     * The special properties <code>jcr:primaryType</code> and <code>jcr:mixinTypes</code> are
-     * taken into account during deserialization in order to determine the node types of the newly created nodes.
-     * <p>
-     * This method simply returns the <code>ContentHandler</code> without altering the state of the
-     * repository; the actual deserialization is done through the methods of the <code>ContentHandler</code>.
-     * <p>
-     * As SAX events are fed into the <code>ContentHandler</code>, the tree of new items is built
-     * in the transient storage of the <code>Session</code>. In order to persist the new content,
-     * <code>save</code> must be called. The advantage of this through-the-session method is that
-     * invalid data can be imported, fixed and then saved. The disadvantage is that a large
-     * import will result in a large cache of pending nodes in the <code>Session</code>. See
-     * {@link Workspace#getImportContentHandler} for a version of this method that <i>does not</i>
-     * go through the <code>Session</code>.
-     * <p>
-     * A <code>PathNotFoundException</code> is thrown if no node exists at <code>parentAbsPath</code>.
-     * <p>
-     * A <code>ConstraintViolationException</code> is thrown if the new subtree cannot be added to the node at
-     * <code>parentAbsPath</code> due to node-type or other implementation-specific constraints, and this can
-     * be determined before the first SAX event is sent. Unlike {@link Workspace#getImportContentHandler},
-     * this method does not enforce node type constraints by throwing <code>SAXException</code>s during
-     * deserialization. These constraints are checked on <code>save</code>.
-     * <p>
-     * A <code>VersionException</code> is thrown if the node at <code>parentAbsPath</code> is versionable
-     * and checked-in, or its nearest versionable ancestor is checked-in.
-     * <p>
-     * A <code>LockException</code> is thrown if a lock prevents the addition of the subtree.
-     * <p>
-     * A <code>RepositoryException</code> is thrown if another error occurs.
-     *
-     * @param parentAbsPath the absolute path of a node under which (as child) the imported subtree will be built.
-     * @param mode a four-value flag that governs how incoming UUIDs are handled.
-     *
-     * @return an org.xml.sax.ContentHandler whose methods may be called to feed SAX events into the deserializer.
-     *
-     * @throws PathNotFoundException if no node exists at <code>parentAbsPath</code>.
-     * @throws ConstraintViolationException if the new subtree cannot be added to the node at
-     * <code>parentAbsPath</code> due to node-type or other implementation-specific constraints, and this can
-     * be determined before the first SAX event is sent.
-     * @throws VersionException if the node at <code>parentAbsPath</code> is versionable
-     * and checked-in, or its nearest versionable ancestor is checked-in.
-     * @throws LockException if a lock prevents the addition of the subtree.
-     * @throws RepositoryException if another error occurs.
-     */
-    public function getImportContentHandler( $parentAbsPath, $mode );
-
-    /**
-     * Deserializes an XML document and adds the resulting item subtree as a child of the node at
-     * <code>parentAbsPath</code>. Requires a <code>save</code> to persist.
-     * <p>
-     * If the incoming XML stream does not appear to be a JCR system view XML document then it is interpreted as a
-     * <b>document view</b> XML document.
-     * <p>
-     * The special properties <code>jcr:primaryType</code> and <code>jcr:mixinTypes</code> are
-     * taken into account during deserialization in order to determine the node types of the newly
-     * created nodes.
-     * <p>
-     * The tree of new items is built in the transient storage of the <code>Session</code>.
-     * In order to persist the new content, <code>save</code> must be called. The advantage
-     * of this through-the-session method is that invalid data can be imported, fixed and
-     * then saved. The disadvantage is that a large import will result in a large cache
-     * of pending nodes in the <code>Session</code>. See {@link Workspace#importXML}
-     * for a version of this method that does not go through the <code>Session</code>.
-     * <p>
-     * An <code>IOException</code> is thrown if an I/O error occurs.
-     * <p>
-     * If no node exists at <code>parentAbsPath</code>, a <code>PathNotFoundException</code>
-     * is thrown.
-     * <p>
-     * If deserialization would overwrite an exisiting item, an <code>ItemExistsException</code>
-     * is thrown.
-     * <p>
-     * A <code>ConstraintViolationException</code> is thrown if the new subtree cannot be added to the node at
-     * <code>parentAbsPath</code> due to node-type or other implementation-specific constraints, and this can
-     * be determined before deserialization begins. Unlike {@link Workspace#getImportContentHandler},
-     * this method does not enforce node type constraints by during
-     * deserialization. These constraints are checked on <code>save</code>.
-     * <p>
-     * A <code>VersionException</code> is thrown if the node at <code>parentAbsPath</code> is versionable
-     * and checked-in, or its nearest versionable ancestor is checked-in.
-     * <p>
-     * A <code>LockException</code> is thrown if a lock prevents the addition of the subtree.
-     * <p>
-     * If the incoming XML is not valid, an <code>InvalidSerializedDataException</code> is thrown.
-     * <p>
-     * If another error occurs a <code>RepositoryException</code> is thrown.
-     *
-     * @param parentAbsPath the absolute path of the node below which the deserialized subtree is added.
-     * @param in The <code>Inputstream</code> from which the XML to be deserilaized is read.
-     * @param mode a four-value flag that governs how incoming UUIDs are handled.
-     *
-     * @throws IOException if an error during an I/O operation occurs.
-     * @throws PathNotFoundException if no node exists at <code>parentAbsPath</code>.
-     * @throws ItemExistsException if deserialization would overwrite an exisiting item.
-     * @throws ConstraintViolationException if the new subtree cannot be added to the node at
-     * <code>parentAbsPath</code> due to node-type or other implementation-specific constraints, and this can
-     * be determined before deserialization begins.
-     * @throws VersionException if the node at <code>parentAbsPath</code> is versionable
-     * and checked-in, or its nearest versionable ancestor is checked-in.
-     * @throws InvalidSerializedDataException if incoming stream is not a valid XML document.
-     * @throws LockException if a lock prevents the addition of the subtree.
-     * @throws RepositoryException is another error occurs.
-     */
-    public function importXML( $parentAbsPath, $in, $mode );
-
-    /**
-     * Serializes the node (and if <code>noRecurse</code> is <code>false</code>,
-     * the whole subtree) at <code>absPath</code> into a series of SAX events by
-     * calling the methods of the supplied <code>org.xml.sax.ContentHandler</code>.
-     * The resulting XML is in the system view form. Note that <code>absPath</code>
-     * must be the path of a node, not a property.
-     * <p>
-     * If <code>skipBinary</code> is <code>true</code> then any properties of
-     * <code>PropertyType.BINARY</code> will be ignored and will not appear in
-     * the serialized output. If <code>skipBinary</code> is false then the actual
-     * value of each <code>BINARY</code> property is recorded using Base64 encoding.
-     * <p>
-     * If <code>noRecurse</code> is true then only the node at
-     * <code>absPath</code> and its properties, but not its child nodes, are
-     * serialized. If <code>noRecurse</code> is <code>false</code> then the entire subtree
-     * rooted at <code>absPath</code> is serialized.
-     * <p>
-     * If the user lacks read access to some subsection of the specified tree,
-     * that section simply does not get serialized, since, from the user's
-     * point of view, it is not there.
-     * <p>
-     * The serialized output will reflect the state of the current workspace as
-     * modified by the state of this <code>Session</code>. This means that
-     * pending changes (regardless of whether they are valid according to
-     * node type constraints) and the current session-mapping of namespaces
-     * are reflected in the output.
-     * <p>
-     * A <code>PathNotFoundException</code> is thrown if no node exists at <code>absPath</code>.
-     * <p>
-     * A <code>SAXException</code> is thrown if an error occurs while feeding events to the
-     * <code>ContentHandler</code>.
-     *
-     * @param absPath The path of the root of the subtree to be serialized.
-     * This must be the path to a node, not a property
-     * @param contentHandler The  <code>org.xml.sax.ContentHandler</code> to
-     * which the SAX events representing the XML serialization of the subtree
-     * will be output.
-     * @param skipBinary A <code>boolean</code> governing whether binary
-     * properties are to be serialized.
-     * @param noRecurse A <code>boolean</code> governing whether the subtree at
-     * absPath is to be recursed.
-     *
-     * @throws PathNotFoundException if no node exists at <code>absPath</code>.
-     * @throws org.xml.sax.SAXException if an error occurs while feeding events to the
-     * <code>org.xml.sax.ContentHandler</code>.
-     * @throws RepositoryException if another error occurs.
-     */
-    public function exportSystemView( $absPath, $out, $skipBinary, $noRecurse );
-
-    /**
-     * Serializes the node (and if <code>noRecurse</code> is <code>false</code>,
-     * the whole subtree) at <code>absPath</code> into a series of SAX events by
-     * calling the methods of the supplied <code>org.xml.sax.ContentHandler</code>.
-     * The resulting XML is in the document view form. Note that <code>absPath</code>
-     * must be the path of a node, not a property.
-     * <p>
-     * If <code>skipBinary</code> is <code>true</code> then any properties of
-     * <code>PropertyType.BINARY</code> will be ignored and will not appear in
-     * the serialized output. If <code>skipBinary</code> is false then the actual
-     * value of each <code>BINARY</code> property is recorded using Base64 encoding.
-     * <p>
-     * If <code>noRecurse</code> is true then only the node at
-     * <code>absPath</code> and its properties, but not its child nodes, are
-     * serialized. If <code>noRecurse</code> is <code>false</code> then the entire subtree
-     * rooted at <code>absPath</code> is serialized.
-     * <p>
-     * If the user lacks read access to some subsection of the specified tree,
-     * that section simply does not get serialized, since, from the user's
-     * point of view, it is not there.
-     * <p>
-     * The serialized output will reflect the state of the current workspace as
-     * modified by the state of this <code>Session</code>. This means that
-     * pending changes (regardless of whether they are valid according to
-     * node type constraints) and the current session-mapping of namespaces
-     * are reflected in the output.
-     * <p>
-     * A <code>PathNotFoundException</code> is thrown if no node exists at <code>absPath</code>.
-     * <p>
-     * A <code>SAXException</code> is thrown if an error occurs while feeding events to the
-     * <code>ContentHandler</code>.
-     *
-     * @param absPath The path of the root of the subtree to be serialized.
-     * This must be the path to a node, not a property
-     * @param out The <code>OutputStream</code> to which the XML
-     * serialization of the subtree will be output.
-     * @param skipBinary A <code>boolean</code> governing whether binary
-     * properties are to be serialized.
-     * @param noRecurse A <code>boolean</code> governing whether the subtree at
-     * absPath is to be recursed.
-     *
-     * @throws PathNotFoundException if no node exists at <code>absPath</code>.
-     * @throws org.xml.sax.SAXException if an error occurs while feeding events to the
-     * <code>org.xml.sax.ContentHandler</code>.
-     * @throws RepositoryException if another error occurs.
-     */
-    public function exportDocumentView( $absPath, $out, $skipBinary, $noRecurse );
-
-    /**
-     * Within the scope of this session, rename a persistently registered
-     * namespace URI to the new prefix.  The renaming only affects operations
-     * done through this session. To clear all renamings the client must acquire
-     * a new session.
-     * <p>
-     * Note that a prefix that is currently mapped in the global namespace registry
-     * to some URI cannot be remapped to a new URI using this method, since this would
-     * make any content stored using the old URI unreadable. An attempt to do
-     * this will throw a <code>NamespaceException</code>.
-     * <p>
-     * A <code>NamespaceException</code> will be thrown if an attempt is made to remap a URI to a
-     * prefix beginning with "<code>xml</code>". These prefixes are reserved by the XML
-     * specification.
-     * <p>
-     * A <code>NamespaceException</code> will also be thrown if
-     * the specified uri is not among those registered in the NamespaceRegistry.
-     *
-     * @param prefix a string
-     * @param uri a string
-     * @throws NamespaceException if the specified uri is not registered or an attempt is made to remap to an illegal prefix.
-     * @throws RepositoryException if another error occurs.
-     */
-    public function setNamespacePrefix( $prefix, $uri );
-
-    /**
-     * Returns all prefixes currently set for this session. This includes all
-     * those registered in the <code>NamespaceRegistry</code> but <i>not
-     * over-ridden</i> by a <code>Session.setNamespacePrefix</code>, plus those
-     * currently set locally by <code>Session.setNamespacePrefix</code>.
-     *
-     * @throws RepositoryException if an error occurs
-     * @return a string array
-     */
-    public function getNamespacePrefixes();
-
-    /**
-     * For a given prefix, returns the URI to which it is mapped as currently
-     * set in this <code>Session</code>. If the prefix is unknown, a <code>NamespaceException</code> is thrown.
-     *
-     * @param prefix a string
-     * @return a string
-     * @throws NamespaceException if the prefix is unknown.
-     * @throws RepositoryException if another error occurs
-     */
-    public function getNamespaceURI( $prefix );
-
-    /**
-     * Returns the prefix to which the given URI is mapped
-     *
-     * @param uri a string
-     * @return a string
-     * @throws NamespaceException if the URI is unknown.
-     * @throws RepositoryException if another error occurs
-     */
-    public function getNamespacePrefix( $uri );
-
-    /**
-     * Releases all resources associated with this <code>Session</code>. This method should be called when a
-     * <code>Session</code> is no longer needed.
-     */
-    public function logout();
-
-    /**
-     * Adds the specified lock token to this session. Holding a lock token allows the <code>Session</code> object of the
-     * lock owner to alter nodes that are locked by the lock specified by that particular lock token.
-     *
-     * @param lt a lock token (a string)
-     */
-    public function addLockToken( $lt );
-
-    /**
-     * Returns an array containing all lock tokens currently held by this session.
-     *
-     * @return an array of lock tokens (strings)
-     */
-    public function getLockTokens();
-
-    /**
-     * Removes the specified lock token from this session.
-     * @param lt a lock token (a string)
-     */
-    public function removeLockToken( $lt );
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/SimpleCredentials.php b/contrib/phpcr/PHPCR/SimpleCredentials.php
deleted file mode 100644
index 3c23498..0000000
--- a/contrib/phpcr/PHPCR/SimpleCredentials.php
+++ /dev/null
@@ -1,152 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/Credentials.php';
-require_once 'PHPCR/IllegalArgumentException.php';
-
-
-/**
- * <code>SimpleCredentials</code> implements the <code>Credentials</code>
- * interface and represents simple user ID/password credentials.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- */
-final class SimpleCredentials implements Credentials
-{
-    /**
-     * @var String
-     * @access private
-     */
-    private $userId;
-
-    /**
-     * @var string
-     * @access private
-     */
-    private $password;
-
-    /**
-     * @var array
-     * @access private
-     */
-    private $attributes;
-
-
-    /**
-     * Create a new <code>SimpleCredentials</code> object, given a user ID
-     * and password.
-     * <p/>
-     * Note that the given user password is cloned before it is stored
-     * in the new <code>SimpleCredentials</code> object. This should
-     * avoid the risk of having unnecessary references to password data
-     * lying around in memory.
-     * <p/>
-     *
-     * @param userId   the user ID
-     * @param password the user's password
-     */
-    public function __construct( $userId, $password ) {
-        $this->userId = $userId;
-        $this->password = $password;
-    }
-
-
-    /**
-     * Returns the user password.
-     * <p/>
-     * Note that this method returns a reference to the password.
-     * It is the caller's responsibility to zero out the password information
-     * after it is no longer needed.
-     *
-     * @return the password
-     */
-    public function getPassword() {
-        return $this->password;
-    }
-
-    /**
-     * Returns the user ID.
-     *
-     * @return String the user ID.
-     */
-    public function getUserId() {
-        return userId;
-    }
-
-    /**
-     * Stores an attribute in this credentials instance.
-     *
-     * @param name  a <code>String</code> specifying the name of the attribute
-     * @param value the <code>Object</code> to be stored
-     */
-    public function setAttribute( $name = null, $value = null ) {
-        // name cannot be null
-        if ( !isset( $name ) ) {
-            throw new IllegalArgumentException("name cannot be null");
-        }
-
-        // null value is the same as removeAttribute()
-        if ( !isset( $value ) ) {
-            $this->removeAttribute( $name );
-            return;
-        }
-
-        $this->attributes[$name] = $value;
-    }
-
-    /**
-     * Returns the value of the named attribute as an <code>Object</code>,
-     * or <code>null</code> if no attribute of the given name exists.
-     *
-     * @param name a <code>String</code> specifying the name of the attribute
-     * @return  an <code>Object</code> containing the value of the attribute,
-     * or <code>null</code> if the attribute does not exist
-     */
-    public function getAttribute( $name ) {
-        return $this->attributes[$name];
-    }
-
-    /**
-     * Removes an attribute from this credentials instance.
-     *
-     * @param name a <code>String</code> specifying the name of the attribute
-     *             to remove
-     */
-    public function removeAttribute( $name ) {
-        unset( $this->attributes[$name] );
-    }
-
-    /**
-     * Returns the names of the attributes available to this
-     * credentials instance. This method returns an empty array
-     * if the credentials instance has no attributes available to it.
-     * <p/>
-     * <b>Level 1 and 2</b>
-     * <p/>
-     *
-     * @return a string array containing the names of the stored attributes
-     */
-    public function getAttributeNames() {
-        return array_keys( $this->attributes );
-    }
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/UnsupportedRepositoryOperationException.php b/contrib/phpcr/PHPCR/UnsupportedRepositoryOperationException.php
deleted file mode 100644
index 832dea4..0000000
--- a/contrib/phpcr/PHPCR/UnsupportedRepositoryOperationException.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/RepositoryException.php';
-
-
-/**
- * In level 1 implementations, exception thrown by methods that are only
- * relevant to level 2 implementations, in level 2 may be thrown by methods
- * related to optional features (such as locking) which are missing from a
- * particular level 2 implementation.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- */
-class UnsupportedRepositoryOperationException extends RepositoryException
-{
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/Value.php b/contrib/phpcr/PHPCR/Value.php
deleted file mode 100644
index 2f23be4..0000000
--- a/contrib/phpcr/PHPCR/Value.php
+++ /dev/null
@@ -1,229 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/ValueFormatException.php';
-require_once 'PHPCR/IllegalStateException.php';
-require_once 'PHPCR/RepositoryException.php';
-
-
-/**
- * A generic holder for the value of a property. A <code>Value</code> object can be used without knowing the actual
- * property type (<code>STRING</code>, <code>DOUBLE</code>, <code>BINARY</code> etc.).
- * <p>
- * Any implementation of this interface must match the behavior of the JCR-supplied classes ({@link BaseValue} and its
- * subclasses) in the following respects:
- * <ul>
- *   <li>
- *     A <code>Value</code> object returned by <code>Property.getValue()</code> can be read using type-specific
- *     <code>get</code> methods. These methods are divided into two groups:
- *     <ul>
- *       <li>
- *         The non-stream <code>get</code> methods <code>getString()</code>, <code>getDate()</code>,
- *         <code>getLong()</code>, <code>getDouble()</code> and <code>getBoolean()</code>.
- *       </li>
- *       <li>
- *          <code>getStream()</code>.
- *       </li>
- *     </ul>
- *    </li>
- *   <li>
- *     Once a <code>Value</code> object has been read once using <code>getStream()</code>, all subsequent calls to
- *     <code>getStream()</code> will return the same <code>Stream</code> object. This may mean, for example, that the
- *     stream returned is fully or partially consumed. In order to get a fresh stream the <code>Value</code> object
- *     must be reacquired via {@link Property#getValue()} or {@link Property#getValues()}.
- *   </li>
- *   <li>
- *     Once a <code>Value</code> object has been read once using <code>getStream()</code>, any subsequent call to any
- *     of the non-stream <code>get</code> methods will throw an <code>IllegalStateException</code>. In order to
- *     successfully invoke a non-stream <code>get</code> method, the <code>Value</code> must be reacquired.
- *   </li>
- *   <li>
- *     Once a <code>Value</code> object has been read once using a non-stream get method, any subsequent call to
- *     <code>getStream()</code> will throw an <code>IllegalStateException</code>. In order to successfully invoke
- *     <code>getStream()</code>, the <code>Value</code> must be reacquired.
- * </ul>
- * An implementation that obeys these restrictions can be found in the class {@link BaseValue} and its subclasses
- * {@link StringValue}, {@link LongValue}, {@link DoubleValue}, {@link BooleanValue}, {@link DateValue},
- * {@link BinaryValue}, {@link NameValue}, {@link PathValue} and {@link ReferenceValue}.
- * <p/>
- * Two <code>Value</code> instances, <code>v1</code> and <code>v2</code>, are considered equal if and only if:
- * <ul>
- * <li><code>v1.getType() == v2.getType()</code>, and,</li>
- * <li><code>v1.getString().equals(v2.getString())</code></li>
- * </ul>
- * Actually comparing two <code>Value</code> instances by converting them to
- * string form may not be practical in some cases (for example, if the values are very large
- * binaries). Consequently, the above is intended as a normative definition of <code>Value</code> equality
- * but not as a procedural test of equality. It is assumed that implementations will have efficient means
- * of determining equality that conform with the above definition.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- */
-interface Value
-{
-    /**
-     * Returns a <code>String</code> representation of this value.
-     * <p>
-     * If this value cannot be converted to a string, a
-     * <code>ValueFormatException</code> is thrown.
-     * <p>
-     * If <code>getStream</code> has previously been called on this
-     * <code>Value</code> instance, an <code>IllegalStateException</code> is thrown.
-     * In this case a new <code>Value</code> instance must be acquired in order to
-     * successfully call <code>getString</code>.
-     * <p>
-     * A <code>RepositoryException</code> is thrown if another error occurs.
-     *
-     * @return A <code>String</code> representation of the value of this property.
-     * @throws ValueFormatException if conversion to a <code>String</code> is not possible.
-     * @throws IllegalStateException if <code>getStream</code> has previously
-     * been called on this <code>Value</code> instance.
-     * @throws RepositoryException if another error occurs.
-     */
-    public function getString();
-
-    /**
-     * Returns an <code>InputStream</code> representation of this value.
-     * USes the standard conversion to binary (see JCR specification)<p>
-     * If this value cannot be converted to a stream, a
-     * <code>ValueFormatException</code> is thrown.
-     * <p>
-     * If a non-stream <code>get</code> method has previously been called on this
-     * <code>Value</code> instance, an <code>IllegalStateException</code> is thrown.
-     * In this case a new <code>Value</code> instance must be acquired in order to successfully call
-     * <code>getStream</code>.
-     * <p>
-     * A <code>RepositoryException</code> is thrown if another error occurs.
-     *
-     * @return An <code>InputStream</code> representation of this value.
-     * @throws ValueFormatException if conversion to an <code>InputStream</code> is not possible.
-     * @throws IllegalStateException if a non-stream <code>get</code> method has previously
-     * been called on this <code>Value</code> instance.
-     * @throws RepositoryException if another error occurs.
-     */
-    public function getStream();
-
-    /**
-     * Returns a <code>long</code> representation of this value.
-     * <p>
-     * If this value cannot be converted to a <code>long</code>, a
-     * <code>ValueFormatException</code> is thrown.
-     * <p>
-     * If <code>getStream</code> has previously been called on this
-     * <code>Value</code> instance, an <code>IllegalStateException</code> is thrown.
-     * In this case a new <code>Value</code> instance must be acquired in order to
-     * successfully call <code>getLong</code>.
-     * <p>
-     * A <code>RepositoryException</code> is thrown if another error occurs.
-     *
-     * @return A <code>long</code> representation of this value.
-     * @throws ValueFormatException if conversion to a <code>long</code> is not possible.
-     * @throws IllegalStateException if <code>getStream</code> has previously
-     * been called on this <code>Value</code> instance.
-     * @throws RepositoryException if another error occurs.
-     */
-    public function getLong();
-
-    /**
-     * Returns a <code>double</code> representation of this value.
-     * <p>
-     * If this value cannot be converted to a <code>double</code>, a
-     * <code>ValueFormatException</code> is thrown.
-     * <p>
-     * If <code>getStream</code> has previously been called on this
-     * <code>Value</code> instance, an <code>IllegalStateException</code> is thrown.
-     * In this case a new <code>Value</code> instance must be acquired in order to
-     * successfully call <code>getDouble</code>.
-     * <p>
-     * A <code>RepositoryException</code> is thrown if another error occurs.
-     *
-     * @return A <code>double</code> representation of this value.
-     * @throws ValueFormatException if conversion to a <code>double</code> is not possible.
-     * @throws IllegalStateException if <code>getStream</code> has previously
-     * been called on this <code>Value</code> instance.
-     * @throws RepositoryException if another error occurs.
-     */
-    public function getDouble();
-
-    /**
-     * Returns date representation of this value.
-     * <p>
-     * If this value cannot be converted to a <code>Calendar</code>, a
-     * <code>ValueFormatException</code> is thrown.
-     * <p>
-     * If <code>getStream</code> has previously been called on this
-     * <code>Value</code> instance, an <code>IllegalStateException</code> is thrown.
-     * In this case a new <code>Value</code> instance must be acquired in order to
-     * successfully call <code>getDate</code>.
-     * <p>
-     * A <code>RepositoryException</code> is thrown if another error occurs.
-     *
-     * @return date
-     * @throws ValueFormatException if conversion to a <code>Calendar</code> is not possible.
-     * @throws IllegalStateException if <code>getStream</code> has previously
-     * been called on this <code>Value</code> instance.
-     * @throws RepositoryException if another error occurs.
-     */
-    public function getDate();
-
-    /**
-     * Returns a <code>Boolean</code> representation of this value.
-     * <p>
-     * If this value cannot be converted to a <code>Boolean</code>, a
-     * <code>ValueFormatException</code> is thrown.
-     * <p>
-     * If <code>getStream</code> has previously been called on this
-     * <code>Value</code> instance, an <code>IllegalStateException</code> is thrown.
-     * In this case a new <code>Value</code> instance must be acquired in order to
-     * successfully call <code>getBoolean</code>.
-     * <p>
-     * A <code>RepositoryException</code> is thrown if another error occurs.
-     *
-     * @return A <code>Boolean</code> representation of this value.
-     * @throws ValueFormatException if conversion to a <code>Boolean</code> is not possible.
-     * @throws IllegalStateException if <code>getStream</code> has previously
-     * been called on this <code>Value</code> instance.
-     * @throws RepositoryException if another error occurs.
-     */
-    public function getBoolean();
-
-    /**
-     * Returns the <code>type</code> of this <code>Value</code>.
-     * One of:
-     * <ul>
-     * <li><code>PropertyType::STRING</code></li>
-     * <li><code>PropertyType::DATE</code></li>
-     * <li><code>PropertyType::BINARY</code></li>
-     * <li><code>PropertyType::DOUBLE</code></li>
-     * <li><code>PropertyType::LONG</code></li>
-     * <li><code>PropertyType::BOOLEAN</code></li>
-     * <li><code>PropertyType::NAME</code></li>
-     * <li><code>PropertyType::PATH</code></li>
-     * <li><code>PropertyType::REFERENCE</code></li>
-     * </ul>
-     * See <code>{@link PropertyType}</code>.
-     * <p>
-     * The type returned is that which was set at property creation.
-     */
-    public function getType();
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/ValueFactory.php b/contrib/phpcr/PHPCR/ValueFactory.php
deleted file mode 100644
index e71fcd4..0000000
--- a/contrib/phpcr/PHPCR/ValueFactory.php
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-require_once 'PHPCR/Value.php';
-require_once 'PHPCR/ValueFormatException.php';
-require_once 'PHPCR/RepositoryException.php';
-
-/**
- * The ValueFactory object provides methods for the creation Value
- * objects that can then be used to set properties.
- */
-interface ValueFactory
-{
-    /**
-     * Returns a Value object of with the specified value and an inferred
-     * type.
-     *
-     * @param the specified value
-     * @return a Value object
-     * @throws ValueFormatException if the specified value format is invalid
-     * @throws RepositoryException if a repository error occurs
-     */
-    public function createValue($value);
-
-}
-
-?>
diff --git a/contrib/phpcr/PHPCR/ValueFormatException.php b/contrib/phpcr/PHPCR/ValueFormatException.php
deleted file mode 100644
index 455dd9f..0000000
--- a/contrib/phpcr/PHPCR/ValueFormatException.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/RepositoryException.php';
-
-
-/**
- * Exception thrown when an attempt is made to assign a
- * value to a property that has an invalid format, given the type of the
- * property. Also thrown if an attempt is made to read the value of
- * a property using a type-specific read method of a type into which it is not
- * convertable.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- */
-class ValueFormatException extends RepositoryException
-{
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/Workspace.php b/contrib/phpcr/PHPCR/Workspace.php
deleted file mode 100644
index 4c78598..0000000
--- a/contrib/phpcr/PHPCR/Workspace.php
+++ /dev/null
@@ -1,599 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/InvalidItemStateException.php';
-require_once 'PHPCR/NoSuchWorkspaceException.php';
-require_once 'PHPCR/nodetype/ConstraintViolationException.php';
-require_once 'PHPCR/version/VersionException.php';
-require_once 'PHPCR/AccessDeniedException.php';
-require_once 'PHPCR/PathNotFoundException.php';
-require_once 'PHPCR/ItemExistsException.php';
-require_once 'PHPCR/lock/LockException.php';
-require_once 'PHPCR/RepositoryException.php';
-require_once 'PHPCR/UnsupportedRepositoryOperationException.php';
-/* require_once 'PHPCR/version/Version.php'; */
-require_once 'PHPCR/IOException.php';
-require_once 'PHPCR/InvalidSerializedDataException.php';
-require_once 'PHPCR/query/QueryManager.php';
-require_once 'PHPCR/NamespaceRegistry.php';
-require_once 'PHPCR/nodetype/NodeTypeManager.php';
-require_once 'PHPCR/observation/ObservationManager.php';
-
-
-/**
- * Represents a view onto the the content repository.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- */
-interface Workspace
-{
-    /**
-     * A constant used as the value of the flag <code>uuidBehavior</code> in
-     * the methods {@link #getImportContentHandler} and {@link #importXML}.
-     * See those methods for details.
-     */
-    const IMPORT_UUID_CREATE_NEW = 0;
-
-    /**
-     * A constant used as the value of the flag <code>uuidBehavior</code> in
-     * the methods {@link #getImportContentHandler} and {@link #importXML}.
-     * See those methods for details.
-     */
-    const IMPORT_UUID_COLLISION_REMOVE_EXISTING = 1;
-
-    /**
-     * A constant used as the value of the flag <code>uuidBehavior</code> in
-     * the methods {@link #getImportContentHandler} and {@link #importXML}.
-     * See those methods for details.
-     */
-    const IMPORT_UUID_COLLISION_REPLACE_EXISTING = 2;
-
-    /**
-     * A constant used as the value of the flag <code>uuidBehavior</code> in
-     * the methods {@link #getImportContentHandler} and {@link #importXML}.
-     * See those methods for details.
-     */
-    const IMPORT_UUID_COLLISION_THROW = 3;
-
-
-    /**
-     * Returns the <code>Session</code> object through which this <code>Workspace</code>
-     * object was acquired.
-     *
-     * @return a <code>{@link Session}</code> object.
-     */
-    public function getSession();
-
-    /**
-     * Returns the name of the actual persistent workspace represented by this
-     * <code>Workspace</code> object.
-     *
-     * @return the name of this workspace.
-     */
-    public function getName();
-
-    /**
-     * This method copies the subtree at <code>srcAbsPath</code> in <code>srcWorkspace</code>
-     * to <code>destAbsPath</code> in <code>this</code> workspace. Unlike <code>clone</code>,
-     * this method <i>does</i> assign new UUIDs to the new copies of referenceable nodes.
-     * This operation is performed entirely within the persistent workspace, it does not involve
-     * transient storage and therefore does not require a <code>save</code>.
-     * <p/>
-     * The <code>destAbsPath</code> provided must not
-     * have an index on its final element. If it does then a <code>RepositoryException</code>
-     * is thrown. Strictly speaking, the <code>destAbsPath</code> parameter is actually an <i>absolute path</i>
-     * to the parent node of the new location, appended with the new <i>name</i> desired for the
-     * copied node. It does not specify a position within the child node
-     * ordering. If ordering is supported by the node type of
-     * the parent node of the new location, then the new copy of the node is appended to the end of the
-     * child node list.
-     * <p/>
-     * This method cannot be used to copy just an individual property by itself.
-     * It copies an entire node and its subtree (including, of course, any properties contained therein).
-     * <p/>
-     * A <code>NoSuchWorkspaceException</code> is thrown if <code>srcWorkspace</code> does not
-     * exist or if the current Session does not have permission to access it.
-     * <p/>
-     * A <code>ConstraintViolationException</code> is thrown if the operation would violate a node-type
-     * or other implementation-specific constraint.
-     * <p/>
-     * A <code>VersionException</code> is thrown if the parent node of <code>destAbsPath</code> is
-     * versionable and checked-in, or is non-versionable but its nearest versionable ancestor is
-     * checked-in.
-     * <p/>
-     * An <code>AccessDeniedException</code> is thrown if the current session (i.e. the session that
-     * was used to acquire this <code>Workspace</code> object) does not have sufficient access rights
-     * to complete the operation.
-     * <p/>
-     * A <code>PathNotFoundException</code> is thrown if the node at <code>srcAbsPath</code> or the
-     * parent of the new node at <code>destAbsPath</code> does not exist.
-     * <p/>
-     * An <code>ItemExistException</code> is thrown if a property already exists at
-     * <code>destAbsPath</code> or a node already exist there, and same name
-     * siblings are not allowed.
-     * <p/>
-     * A <code>LockException</code> is thrown if a lock prevents the copy.
-     *
-     * @param srcWorkspace the name of the worksapce from which the copy is to be made.
-     * @param srcAbsPath the path of the node to be copied.
-     * @param destAbsPath the location to which the node at <code>srcAbsPath</code>
-     * is to be copied in <code>this</code> workspace.
-     * @throws NoSuchWorkspaceException if <code>srcWorkspace</code> does not
-     * exist or if the current <code>Session</code> does not have permission to access it.
-     * @throws ConstraintViolationException if the operation would violate a
-     * node-type or other implementation-specific constraint
-     * @throws VersionException if the parent node of <code>destAbsPath</code> is
-     * versionable and checked-in, or is non-versionable but its nearest versionable ancestor is
-     * checked-in.
-     * @throws AccessDeniedException if the current session does have permission to access
-     * <code>srcWorkspace</code> but otherwise does not have sufficient access rights to
-     * complete the operation.
-     * @throws PathNotFoundException if the node at <code>srcAbsPath</code> or
-     * the parent of the new node at <code>destAbsPath</code> does not exist.
-     * @throws ItemExistsException if a property already exists at
-     * <code>destAbsPath</code> or a node already exist there, and same name
-     * siblings are not allowed.
-     * @throws LockException if a lock prevents the copy.
-     * @throws RepositoryException if the last element of <code>destAbsPath</code>
-     * has an index or if another error occurs.
-     */
-    public function copy( $srcWorkspace, $srcAbsPath, $destAbsPath );
-
-    /**
-     * Clones the subtree at the node <code>srcAbsPath</code> in <code>srcWorkspace</code> to the new location at
-     * <code>destAbsPath</code> in <code>this</code> workspace. This method does not assign new UUIDs to
-     * the new nodes but preserves the UUIDs (if any) of their respective source nodes.
-     * <p/>
-     * If <code>removeExisting</code> is true and an existing node in this workspace
-     * (the destination workspace) has the same UUID as a node being cloned from
-     * <code>srcWorkspace</code>, then the incoming node takes precedence, and the
-     * existing node (and its subtree) is removed. If <code>removeExisting</code>
-     * is false then a UUID collision causes this method to throw a
-     * <code>ItemExistsException</code> and no changes are made.
-     * <p/>
-     * If successful, the change is persisted immediately, there is no need to call <code>save</code>.
-     * <p/>
-     * The <code>destAbsPath</code> provided must not
-     * have an index on its final element. If it does then a <code>RepositoryException</code>
-     * is thrown. Strictly speaking, the <code>destAbsPath</code> parameter is actually an <i>absolute path</i>
-     * to the parent node of the new location, appended with the new <i>name</i> desired for the
-     * cloned node. It does not specify a position within the child node
-     * ordering. If ordering is supported by the node type of the parent node of the new
-     * location, then the new clone of the node is appended to the end of the child node list.
-     * <p/>
-     * This method cannot be used to clone just an individual property by itself. It clones an
-     * entire node and its subtree (including, of course, any properties contained therein).
-     * <p/>
-     * A <code>NoSuchWorkspaceException</code> is thrown if <code>srcWorkspace</code> does not
-     * exist or if the current <code>Session</code> does not have permission to access it.
-     * <p/>
-     * A <code>ConstraintViolationException</code> is thrown if the operation would violate a node-type
-     * or other implementation-specific constraint.
-     * <p/>
-     * A <code>VersionException</code> is thrown if the parent node of <code>destAbsPath</code> is
-     * versionable and checked-in, or is non-versionable but its nearest versionable ancestor is
-     * checked-in. This exception will also be thrown if <code>removeExisting</code> is <code>true</code>,
-     * and a UUID conflict occurs that would require the moving and/or altering of a node that is checked-in.
-     * <p/>
-     * An <code>AccessDeniedException</code> is thrown if the current session (i.e. the session that
-     * was used to acquire this <code>Workspace</code> object) does not have sufficient access rights
-     * to complete the operation.
-     * <p/>
-     * A <code>PathNotFoundException</code> is thrown if the node at <code>srcAbsPath</code> or the
-     * parent of the new node at <code>destAbsPath</code> does not exist.
-     * <p/>
-     * An <code>ItemExistsException</code> is thrown if a node or property already exists at
-     * <code>destAbsPath</code>
-     * <p/>
-     * An <code>ItemExistException</code> is thrown if a property already exists at
-     * <code>destAbsPath</code> or a node already exist there, and same name
-     * siblings are not allowed or if <code>removeExisting</code> is false and a
-     * UUID conflict occurs.
-     * <p/>
-     * A <code>LockException</code> is thrown if a lock prevents the clone.
-     *
-     * @param srcWorkspace The name of the workspace from which the node is to be copied.
-     * @param srcAbsPath the path of the node to be copied in <code>srcWorkspace</code>.
-     * @param destAbsPath the location to which the node at <code>srcAbsPath</code>
-     * is to be copied in <code>this</code> workspace.
-     * @param removeExisting if <code>false</code> then this method throws an
-     * <code>ItemExistsException</code> on UUID conflict with an incoming node.
-     * If <code>true</code> then a UUID conflict is resolved by removing the existing node
-     * from its location in this workspace and cloning (copying in) the one from
-     * <code>srcWorkspace</code>.
-     *
-     * @throws NoSuchWorkspaceException if <code>destWorkspace</code> does not exist.
-     * @throws ConstraintViolationException if the operation would violate a
-     * node-type or other implementation-specific constraint.
-     * @throws VersionException if the parent node of <code>destAbsPath</code> is
-     * versionable and checked-in, or is non-versionable but its nearest versionable ancestor is
-     * checked-in. This exception will also be thrown if <code>removeExisting</code> is <code>true</code>,
-     * and a UUID conflict occurs that would require the moving and/or altering of a node that is checked-in.
-     * @throws AccessDeniedException if the current session does not have
-     * sufficient access rights to complete the operation.
-     * @throws PathNotFoundException if the node at <code>srcAbsPath</code> or
-     * the parent of the new node at <code>destAbsPath</code> does not exist.
-     * @throws ItemExistsException if a property already exists at
-     * <code>destAbsPath</code> or a node already exist there, and same name
-     * siblings are not allowed or if <code>removeExisting</code> is false and a
-     * UUID conflict occurs.
-     * @throws LockException if a lock prevents the clone.
-     * @throws RepositoryException if the last element of <code>destAbsPath</code>
-     * has an index or if another error occurs.
-     */
-    public function clone_( $srcAbsPath, $destAbsPath, $srcWorkspace = null, $removeExisting = null );
-
-    /**
-     * Moves the node at <code>srcAbsPath</code> (and its entire subtree) to the
-     * new location at <code>destAbsPath</code>. If successful,
-     * the change is persisted immediately, there is no need to call <code>save</code>.
-     * Note that this is in contrast to {@link Session#move} which operates within the
-     * transient space and hence requires a <code>save</code>.
-     * <p/>
-     * The <code>destAbsPath</code> provided must not
-     * have an index on its final element. If it does then a <code>RepositoryException</code>
-     * is thrown. Strictly speaking, the <code>destAbsPath</code> parameter is actually an <i>absolute path</i>
-     * to the parent node of the new location, appended with the new <i>name</i> desired for the
-     * moved node. It does not specify a position within the child node
-     * ordering. If ordering is supported by the node type of
-     * the parent node of the new location, then the newly moved node is appended to the end of the
-     * child node list.
-     * <p/>
-     * This method cannot be used to move just an individual property by itself.
-     * It moves an entire node and its subtree (including, of course, any properties contained therein).
-     * <p/>
-     * A <code>ConstraintViolationException</code> is thrown if the operation would violate a node-type
-     * or other implementation-specific constraint.
-     * <p/>
-     * A <code>VersionException</code> is thrown if the parent node of <code>destAbsPath</code>
-     * or the parent node of <code>srcAbsPath</code> is versionable and checked-in, or is
-     * non-versionable but its nearest versionable ancestor is checked-in.
-     * <p/>
-     * An <code>AccessDeniedException</code> is thrown if the current session (i.e. the session that
-     * was used to acquire this <code>Workspace</code> object) does not have sufficient access rights
-     * to complete the operation.
-     * <p/>
-     * A <code>PathNotFoundException</code> is thrown if the node at <code>srcAbsPath</code> or the
-     * parent of the new node at <code>destAbsPath</code> does not exist.
-     * <p/>
-     * An <code>ItemExistException</code> is thrown if a property already exists at
-     * <code>destAbsPath</code> or a node already exist there, and same name
-     * siblings are not allowed.
-     * <p/>
-     * A <code>LockException</code> if a lock prevents the move.
-     *
-     * @param srcAbsPath the path of the node to be moved.
-     * @param destAbsPath the location to which the node at <code>srcAbsPath</code>
-     * is to be moved.
-     * @throws ConstraintViolationException if the operation would violate a
-     * node-type or other implementation-specific constraint
-     * @throws VersionException if the parent node of <code>destAbsPath</code>
-     * or the parent node of <code>srcAbsPath</code> is versionable and checked-in,
-     * or is non-versionable but its nearest versionable ancestor is checked-in.
-     * @throws AccessDeniedException if the current session (i.e. the session that
-     * was used to aqcuire this <code>Workspace</code> object) does not have
-     * sufficient access rights to complete the operation.
-     * @throws PathNotFoundException if the node at <code>srcAbsPath</code> or
-     * the parent of the new node at <code>destAbsPath</code> does not exist.
-     * @throws ItemExistsException if a property already exists at
-     * <code>destAbsPath</code> or a node already exist there, and same name
-     * siblings are not allowed.
-     * @throws LockException if a lock prevents the move.
-     * @throws RepositoryException if the last element of <code>destAbsPath</code>
-     * has an index or if another error occurs.
-     */
-    public function move( $srcAbsPath, $destAbsPath );
-
-    /**
-     * Restores a set of versions at once. Used in cases where a "chicken and egg" problem of
-     * mutually referring <code>REFERENCE</code> properties would prevent the restore in any
-     * serial order.
-     * <p>
-     * If the restore succeeds the changes made to <code>this</code> node are
-     * persisted immediately, there is no need to call <code>save</code>.
-     * <p>
-     * The following restrictions apply to the set of versions specified:
-     * <p>
-     * If <code>S</code> is the set of versions being restored simultaneously,
-     * <ol>
-     *   <li>
-     *    For every version <code>V</code> in <code>S</code> that corresponds to
-     *     a <i>missing</i> node, there must also be a parent of V in S.
-     *   </li>
-     *   <li>
-     *     <code>S</code> must contain at least one version that corresponds to
-     *     an existing node in the workspace.
-     *   </li>
-     * </ol>
-     * If either of these restrictions does not hold, the restore will fail
-     * because the system will be unable to determine the path locations to which
-     * one or more versions are to be restored. In this case a
-     * <code>VersionException</code> is thrown.
-     * <p/>
-     * The versionable nodes in this workspace that correspond to the versions being restored
-     * define a set of (one or more) subtrees. A UUID collision occurs when this workspace
-     * contains a node <i>outside these subtrees</i> that has the same UUID as one of the nodes
-     * that would be introduced by the <code>restore</code> operation <i>into one of these subtrees</i>.
-     * The result in such a case is governed by the <code>removeExisting</code> flag.
-     * If <code>removeExisting</code> is <code>true</code> then the incoming node takes precedence,
-     * and the existing node (and its subtree) is removed. If <code>removeExisting</code>
-     * is <code>false</code> then a <code>ItemExistsException</code> is thrown and no changes are made.
-     * Note that this applies not only to cases where the restored
-     * node itself conflicts with an existing node but also to cases where a conflict occurs with any
-     * node that would be introduced into the workspace by the restore operation. In particular, conflicts
-     * involving subnodes of the restored node that have <code>OnParentVersion</code> settings of
-     * <code>COPY</code> or <code>VERSION</code> are also governed by the <code>removeExisting</code> flag.
-     * <p/>
-     * An <code>UnsupportedRepositoryOperationException</code> is thrown if versioning is not supported.
-     * <p/>
-     * An <code>InvalidItemStateException</code> is thrown if this <code>Session</code> (not necessarily this <code>Node</code>)
-     * has pending unsaved changes.
-     * <p/>
-     * A <code>LockException</code> is thrown if a lock prevents the restore.
-     *
-     * @param versions The set of versions to be restored
-     * @param removeExisting governs what happens on UUID collision.
-     *
-     * @throws ItemExistsException if <code>removeExisting</code> is <code>false</code>
-     * and a UUID collision occurs with a node being restored.
-     * @throws UnsupportedRepositoryOperationException if versioning is not supported.
-     * @throws VersionException if the set of versions to be restored is such that the
-     * original path location of one or more of the versions cannot be determined or
-     * if the <code>restore</code> would change the state of a existing verisonable
-     * node that is currently checked-in.
-     * @throws LockException if a lock prevents the restore.
-     * @throws InvalidItemStateException if this <code>Session</code> (not necessarily this <code>Node</code>) has pending unsaved changes.
-     * @throws RepositoryException if another error occurs.
-     */
-    public function restore( /* Version */ $versions, $removeExisting );
-
-    /**
-     * Gets the <code>QueryManager</code>.
-     * Returns the <code>QueryManager</code> object, through search methods are accessed.
-     *
-     * @throws RepositoryException if an error occurs.
-     * @return the <code>QueryManager</code> object.
-     */
-    public function getQueryManager();
-
-    /**
-     * Returns the <code>NamespaceRegistry</code> object, which is used to access information
-     * and (in level 2) set the mapping between namespace prefixes and URIs.
-     *
-     * @throws RepositoryException if an error occurs.
-     * @return the <code>NamespaceRegistry</code>.
-     */
-    public function getNamespaceRegistry();
-
-    /**
-     * Returns the <code>NodeTypeManager</code> through which node type
-     * information can be queried. There is one node type registry per
-     * repository, therefore the <code>NodeTypeManager</code> is not
-     * workspace-specific; it provides introspection methods for the
-     * global, repository-wide set of available node types.
-     *
-     * @throws RepositoryException if an error occurs.
-     * @return a <code>NodeTypeManager</code> object.
-     */
-    public function getNodeTypeManager();
-
-    /**
-     * If the the implemention supports observation
-     * this method returns the <code>ObservationManager</code> object;
-     * otherwise it throws an <code>UnsupportedRepositoryOperationException</code>.
-     *
-     * @throws UnsupportedRepositoryOperationException if the implementation does not support observation.
-     * @throws RepositoryException if an error occurs.
-     *
-     * @return an <code>ObservationManager</code> object.
-     */
-    public function getObservationManager();
-
-    /**
-     * Returns an string array containing the names of all workspaces
-     * in this repository that are accessible to this user, given the
-     * <code>Credentials</code> that were used to get the <code>Session</code>
-     * tied to this <code>Workspace</code>.
-     * <p/>
-     * In order to access one of the listed workspaces, the user performs another
-     * <code>Repository.login</code>, specifying the name of the desired workspace,
-     * and receives a new <code>Session</code> object.
-     *
-     * @return string array of names of accessible workspaces.
-     * @throws RepositoryException
-     */
-    public function getAccessibleWorkspaceNames();
-
-    /**
-     * Returns a <code>org.xml.sax.ContentHandler</code> which can be used to push SAX events into the repository.
-     * If the incoming XML stream (in the form of SAX events) does not appear to be a JCR system view XML document then it is
-     * interpreted as a document view XML document.
-     * <p>
-     * The incoming XML is deserialized into a subtree of items immediately below the node at
-     * <code>parentAbsPath</code>.
-     * <p>
-     * The special properties <code>jcr:primaryType</code> and <code>jcr:mixinTypes</code> are
-     * taken into account during deserialization in order to determine the node types of the newly created nodes.
-     * <p>
-     * This method simply returns the <code>ContentHandler</code> without altering the state of the
-     * repsoitory; the actual deserialization is done through the methods of the <code>ContentHandler</code>.
-     * Invalid XML data will cause the <code>ContentHandler</code> to throw a <code>SAXException</code>.
-     * <p>
-     * As SAX events are fed into the <code>ContentHandler</code>, changes are made directly at the
-     * workspace level, without going through the <code>Session</code>. As a result, there is not need
-     * to call <code>save</code>. The advantage of this
-     * direct-to-workspace method is that a large import will not result in a large cache of pending
-     * nodes in the <code>Session</code>. The disadvantage is that structures that violate node type constraints
-     * cannot be imported, fixed and then saved. Instead, a constraint violation will cause the
-     * <code>ContentHandler</code> to throw a <code>SAXException</code>. See <code>Session.getImportContentHandler</code> for a version of
-     * this method that <i>does</i> go through the <code>Session</code>.
-     * <p>
-     * The flag <code>uuidBehavior</code> governs how the UUIDs of incoming (deserialized) nodes are
-     * handled. There are four options:
-     * <ul>
-     * <li>{@link #IMPORT_UUID_CREATE_NEW}: Incoming referenceable nodes are assigned newly
-     * created UUIDs upon additon to the workspace. As a result UUID collisions never occur.
-     * <li>{@link #IMPORT_UUID_COLLISION_REMOVE_EXISTING}: If an incoming referenceable node
-     * has the same UUID as a node already existing in the workspace, then the already exisitng node
-     * (and its subtree) is removed from wherever it may be in the workspace before the incoming node
-     * is added. Note that this can result in nodes "disappearing" from locations in the worksapce that
-     * are remote from the location to which the incoming subtree is being written.
-     * <li>{@link #IMPORT_UUID_COLLISION_REPLACE_EXISTING}: If an incoming referenceable node
-     * has the same UUID as a node already existing in the workspace then the already existing node
-     * is replaced by the incoming node in the same position as the existing node. Note that this may
-     * result in the incoming subtree being disaggregated and "spread around" to different locations
-     * in the workspace. In the most extreme case this behavior may result in no node at all
-     * being added as child of <code>parentAbsPath</code>. This will occur if the topmost element
-     * of the incoming XML has the same UUID as an existing node elsewhere in the workspace.
-     * <li>{@link #IMPORT_UUID_COLLISION_THROW}: If an incoming referenceable node
-     * has the same UUID as a node already existing in the workspace then a SAXException
-     * is thrown by the returned <code>ContentHandler</code> during deserialization.
-     * </ul>
-     * A <code>SAXException</code> will be thrown by the returned <code>ContentHandler</code>
-     * during deserialization if the top-most element of the incoming XML would deserialize to
-     * a node with the same name as an existing child of <code>parentAbsPath</code> and that
-     * child does not allow same-name siblings.
-     * <p>
-     * A <code>SAXException</code> will also be thrown by the returned <code>ContentHandler</code>
-     * during deserialzation if <code>uuidBehavior</code> is set to
-     * <code>IMPORT_UUID_COLLISION_REMOVE_EXISTING</code> and an incoming node has the same UUID as
-     * the node at <code>parentAbsPath</code> or one of its ancestors.
-     * <p>
-     * A <code>PathNotFoundException</code> is thrown if no node exists at <code>parentAbsPath</code>.
-     * <p>
-     * A <code>ConstraintViolationException</code> is thrown if the new subtree cannot be added to the node at
-     * <code>parentAbsPath</code> due to node-type or other implementation-specific constraints, and this can
-     * be determined before the first SAX event is sent. Unlike {@link Session#getImportContentHandler},
-     * this method also enforces node type constraints by throwing <code>SAXException</code>s during
-     * deserialization.
-     * <p/>
-     * A <code>VersionException</code> is thrown if the node at <code>parentAbsPath</code> is versionable
-     * and checked-in, or is non-versionable but its nearest versionable ancestor is checked-in.
-     * <p>
-     * A <code>LockException</code> is thrown if a lock prevents the addition ofthe subtree.
-     * <p>
-     * A <code>RepositoryException</code> is thrown if another error occurs.
-     *
-     * @param parentAbsPath the absolute path of a node under which (as child) the imported subtree will be built.
-     * @param uuidBehavior a four-value flag that governs how incoming UUIDs are handled.
-     * @return an org.xml.sax.ContentHandler whose methods may be called to feed SAX events into the deserializer.
-     *
-     * @throws PathNotFoundException if no node exists at <code>parentAbsPath</code>.
-     * @throws ConstraintViolationException if the new subtree cannot be added to the node at
-     * <code>parentAbsPath</code> due to node-type or other implementation-specific constraints,
-     * and this can be determined before the first SAX event is sent.
-     * @throws VersionException if the node at <code>parentAbsPath</code> is versionable
-     * and checked-in, or is non-versionable but its nearest versionable ancestor is checked-in.
-     * @throws LockException if a lock prevents the addition of the subtree.
-     * @throws RepositoryException if another error occurs.
-     */
-    public function getImportContentHandler( $parentAbsPath, $uuidBehavior );
-
-    /**
-     * Deserializes an XML document and adds the resulting item subtree as a child of the node at
-     * <code>parentAbsPath</code>.
-     * <p>
-     * If the incoming XML stream does not appear to be a JCR system view XML document then it is interpreted as a
-     * <b>document view</b> XML document.
-     * <p>
-     * The special properties <code>jcr:primaryType</code> and <code>jcr:mixinTypes</code> are
-     * taken into account during deserialization in order to determine the node types of the newly
-     * created nodes.
-     * <p>
-     * Changes are made directly at the workspace level, without going through the <code>Session</code>.
-     * As a result, there is not need to call <code>save</code>. The advantage of this
-     * direct-to-workspace method is that a large import will not result in a large cache of
-     * pending nodes in the <code>Session</code>. The disadvantage is that invalid data cannot
-     * be imported, fixed and then saved. Instead, invalid data will cause this method to throw an
-     * <code>InvalidSerializedDataException</code>. See <code>Session.importXML</code> for
-     * a version of this method that <i>does</i> go through the <code>Session</code>.
-     * <p/>
-     * The flag <code>uuidBehavior</code> governs how the UUIDs of incoming (deserialized) nodes are
-     * handled. There are four options:
-     * <ul>
-     * <li>{@link #IMPORT_UUID_CREATE_NEW}: Incoming referenceable nodes are assigned newly
-     * created UUIDs upon additon to the workspace. As a result UUID collisions never occur.
-     * <li>{@link #IMPORT_UUID_COLLISION_REMOVE_EXISTING}: If an incoming referenceable node
-     * has the same UUID as a node already existing in the workspace then the already exisitng node
-     * (and its subtree) is removed from wherever it may be in the workspace before the incoming node
-     * is added. Note that this can result in nodes "disappearing" from locations in the worksapce that
-     * are remote from the location to which the incoming subtree is being written. If an incoming node
-     * has the same UUID as the existing root node of this workspace then
-     * <li>{@link #IMPORT_UUID_COLLISION_REPLACE_EXISTING}: If an incoming referenceable node
-     * has the same UUID as a node already existing in the workspace then the already existing node
-     * is replaced by the incoming node in the same position as the existing node. Note that this may
-     * result in the incoming subtree being disaggregated and "spread around" to different locations
-     * in the workspace. In the most extreme edge case this behavior may result in no node at all
-     * being added as child of <code>parentAbsPath</code>. This will occur if the topmost element
-     * of the incoming XML has the same UUID as an existing node elsewhere in the workspace.
-     * <li>{@link #IMPORT_UUID_COLLISION_THROW}: If an incoming referenceable node
-     * has the same UUID as a node already existing in the workspace then an <code>ItemExistsException</code>
-     * is thrown.
-     * </ul>
-     * An <code>ItemExistsException</code> will be thrown if <code>uuidBehavior</code>
-     * is set to <code>IMPORT_UUID_CREATE_NEW</code> or <code>IMPORT_UUID_COLLISION_THROW</code>
-     * and the import would would overwrite an existing child of <code>parentAbsPath</code>.
-     * <p>
-     * An IOException is thrown if an I/O error occurs.
-     * <p>
-     * If no node exists at <code>parentAbsPath</code>, a <code>PathNotFoundException</code> is thrown.
-     * <p>
-     * An ItemExisitsException is thrown if the top-most element of the incoming XML would deserialize
-     * to a node with the same name as an existing child of <code>parentAbsPath</code> and that
-     * child does not allow same-name siblings, or if a <code>uuidBehavior</code> is set to
-     * <code>IMPORT_UUID_COLLISION_THROW</code> and a UUID collision occurs.
-     * <p>
-     * If node-type or other implementation-specific constraints
-     * prevent the addition of the subtree, a <code>ConstraintViolationException</code> is thrown.
-     * <p>
-     * A <code>ConstraintViolationException</code> will also be thrown if <code>uuidBehavior</code>
-     * is set to <code>IMPORT_UUID_COLLISION_REMOVE_EXISTING</code> and an incoming node has the same
-     * UUID as the node at <code>parentAbsPath</code> or one of its ancestors.
-     * <p>
-     * A <code>VersionException</code> is thrown if the node at <code>parentAbsPath</code> is versionable
-     * and checked-in, or is non-versionable but its nearest versionable ancestor is checked-in.
-     * <p>
-     * A <code>LockException</code> is thrown if a lock prevents the addition of the subtree.
-     *
-     * @param parentAbsPath the absolute path of the node below which the deserialized subtree is added.
-     * @param in The <code>Inputstream</code> from which the XML to be deserilaized is read.
-     * @param uuidBehavior a four-value flag that governs how incoming UUIDs are handled.
-     *
-     * @throws IOException if an error during an I/O operation occurs.
-     * @throws PathNotFoundException if no node exists at <code>parentAbsPath</code>.
-     * @throws ConstraintViolationException if node-type or other implementation-specific constraints
-     * prevent the addition of the subtree or if <code>uuidBehavior</code>
-     * is set to <code>IMPORT_UUID_COLLISION_REMOVE_EXISTING</code> and an incoming node has the same
-     * UUID as the node at <code>parentAbsPath</code> or one of its ancestors.
-     * @throws VersionException if the node at <code>parentAbsPath</code> is versionable
-     * and checked-in, or is non-versionable but its nearest versionable ancestor is checked-in.
-     * @throws InvalidSerializedDataException if incoming stream is not a valid XML document.
-     * @throws ItemExistsException if the top-most element of the incoming XML would deserialize
-     * to a node with the same name as an existing child of <code>parentAbsPath</code> and that
-     * child does not allow same-name siblings, or if a <code>uuidBehavior</code> is set to
-     * <code>IMPORT_UUID_COLLISION_THROW</code> and a UUID collision occurs.
-     * @throws LockException if a lock prevents the addition of the subtree.
-     * @throws RepositoryException is another error occurs.
-     */
-    public function importXML( $parentAbsPath, $in, $uuidBehavior );
-}
-
-?>
diff --git a/contrib/phpcr/PHPCR/lock/Lock.php b/contrib/phpcr/PHPCR/lock/Lock.php
deleted file mode 100644
index 51bbc42..0000000
--- a/contrib/phpcr/PHPCR/lock/Lock.php
+++ /dev/null
@@ -1,116 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/lock/LockException.php';
-require_once 'PHPCR/RepositoryException.php';
-
-
-/**
- * Represents a lock placed on an item.
- * <p/>
- * <b>Level 2 only</b>
- * <p/>
- * A lock is associated with an item and a user (not a ticket)
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- * @subpackage lock
- */
-interface Lock
-{
-    /**
-     * Returns the user ID of the user who owns this lock. This is the value of the
-     * <code>jcr:lockOwner</code> property of the lock-holding node. It is also the
-     * value returned by <code>Session.getUserId</code> at the time that the lock was
-     * placed. The lock owner's identity is only provided for informational purposes.
-     * It does not govern who can perform an unlock or make changes to the locked nodes;
-     * that depends entirely upon who the token holder is.
-     * @return a user ID.
-     */
-    public function getLockOwner();
-
-    /**
-     * Returns <code>true</code> if this is a deep lock; <code>false</code> otherwise.
-     *
-     * @return a boolean
-     */
-    public function isDeep();
-
-    /**
-     * Returns the lock holding node. Note that <code>N.getLock().getNode()</code>
-     * (where <code>N</code> is a locked node) will only return <code>N</code>
-     * if <code>N</code> is the lock holder. If <code>N</code> is in the subtree
-     * of the lock holder, <code>H</code>, then this call will return <code>H</code>.
-     *
-     * @return an <code>Node</code>.
-     */
-    public function getNode();
-
-    /**
-     * May return the lock token for this lock.
-     * <p/>
-     * If this <code>Session</code> holds the lock token for this lock, then this method will
-     * return that lock token. If this <code>Session</code> does not hold the applicable lock
-     * token then this method will return null.
-     *
-     * @return a <code>String</code>.
-     */
-    public function getLockToken();
-
-    /**
-     * Returns true if this <code>Lock</code> object represents a lock that is currently in effect.
-     * If this lock has been unlocked either explicitly or due to an implementation-specific limitation
-     * (like a timeout) then it returns <code>false</code>. Note that this method is intended for
-     * those cases where one is holding a <code>Lock</code> Java object and wants to find out
-     * whether the lock (the JCR-level entity that is attached to the lockable node) that this
-     * object originally represented still exists. For example, a timeout or explicit
-     * <code>unlock</code> will remove a lock from a node but the <code>Lock</code>
-     * Java object corresponding to that lock may still exist, and in that case its
-     * <code>isLive</code> method will return <code>false</code>.
-     * @return a <code>boolean</code>.
-     */
-    public function isLive();
-
-    /**
-     * Returns <code>true</code> if this is a session-scoped lock. Returns
-     * <code>false</code> if this is an open-scoped lock.
-     *
-     * @return a <code>boolean</code>
-     */
-    public function isSessionScoped();
-
-    /**
-     * Refreshes (brings back to life) a previously unlocked <code>Lock</code> object
-     * (one for which <code>isLive</code> returns <code>false</code>). If this lock
-     * is still live (<code>isLive</code> returns <code>true</code>) or if this <code>Session</code>
-     * does not hold the correct lock token for this lock, then a <code>LockException</code>
-     * is thrown. A <code>RepositoryException</code> is thrown if another error occurs.
-     *
-     * The implementation may either revive an existing lock or issue a new lock
-     * (removing this one from the session and substituting the new one).
-     * This is an implementation-specific issue.
-     * @throws LockException if this lock is still live (<code>isLive</code> returns <code>true</code>)
-     * or if this <code>Session</code> does not hold the correct lock token for this lock.
-     * @throws RepositoryException if another error occurs.
-     */
-    public function refresh();
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/lock/LockException.php b/contrib/phpcr/PHPCR/lock/LockException.php
deleted file mode 100644
index 0a581a3..0000000
--- a/contrib/phpcr/PHPCR/lock/LockException.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/RepositoryException.php';
-
-
-/**
- * Exception thrown by access-related methods.
- * <p>
- * <b>Level 2 only</b>
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- * @subpackage lock
- */
-class LockException extends RepositoryException
-{
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/nodetype/ConstraintViolationException.php b/contrib/phpcr/PHPCR/nodetype/ConstraintViolationException.php
deleted file mode 100644
index 96dab14..0000000
--- a/contrib/phpcr/PHPCR/nodetype/ConstraintViolationException.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/RepositoryException.php';
-
-
-/**
- * Exception thrown when an action would violate
- * a constraint on repository structure. For example, when an attempt is made
- * to persistently add an item to a node that would violate that node's node type.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- * @subpackage nodetype
- */
-class ConstraintViolationException extends RepositoryException
-{
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/nodetype/ItemDefinition.php b/contrib/phpcr/PHPCR/nodetype/ItemDefinition.php
deleted file mode 100644
index 236aada..0000000
--- a/contrib/phpcr/PHPCR/nodetype/ItemDefinition.php
+++ /dev/null
@@ -1,102 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * An item definition.
- *
- * @author Markus Nix <mnix@mayflower.de>
- */
-interface ItemDefinition
-{
-    /**
-     * Gets the node type that contains the declaration of <i>this</i>
-     * <code>ItemDefinition</code>.
-     *
-     * @return a <code>NodeType</code> object.
-     */
-    public function getDeclaringNodeType();
-
-    /**
-     * Gets the name of the child item. If <code>"*"</code>, this
-     * <code>ItemDefinition</code> defines a residual set of child items. That is,
-     * it defines the characteristics of all those child items with names apart
-     * from the names explicitly used in other child item definitions.
-     *
-     * @return a <code>String</code> denoting the name or <code>"*"</code>.
-     */
-    public function getName();
-
-    /**
-     * Reports whether the item is to be automatically created when its parent node is created.
-     * If <code>true</code>, then this <code>ItemDefinition</code> will necessarily not be a residual
-     * set definition but will specify an actual item name (in other words getName() will not
-     * return �*�).
-     *
-     * @return a <code>boolean</code>.
-     */
-    public function isAutoCreate();
-
-    /**
-     * Reports whether the item is mandatory. A mandatory child node is one that,
-     * if its parent node exists, must also exist. A mandatory property is one that
-     * must have a value. In the case of single-value properties this means that it
-     * must exist (since there is no such thing a null value). In the case of
-     * multi-value properties this means that the property must exist and must have
-     * at least one value (it cannot hold an empty array).
-     * <p/>
-     * A mandatory item cannot be removed, short of removing its parent.
-     * Nor can it be set to the empty array (if it is a multi-value property).
-     * <p/>
-     * An attempt to save a node that has a mandatory child item without first
-     * creating that child item and, if it is a property, giving it a value,
-     * will throw a <code>ConstraintViolationException</code> on <code>save</code>.
-     *
-     * @return a <code>boolean</code>
-     */
-    public function isMandatory();
-
-    /**
-     * Gets the on-parent-version status of the child item. This governs what to do if
-     * the parent node of this child item is versioned.
-     *
-     * @return an <code>int</code>.
-     */
-    public function getOnParentVersion();
-
-    /**
-     * Reports whether the child item is protected. In level 2 implementations, a protected item is one that cannot be removed
-     * (except by removing its parent) or modified through the the standard write methods of this API (that is, Item.remove,
-     * Node.addNode, Node.setProperty and Property.setValue).
-     * <p/>
-     * A protected node may be removed or modified (in a level 2 implementation), however, through some
-     * mechanism not defined by this specification or as a side-effect of operations other than
-     * the standard write methods of the API. For example, in those repositories that support versioning, the
-     * <code>Node.checkin</code> method has the side-effect of changing a node's <code>jcr:isCheckedOut</code>
-     * property, even though that property is protected.
-     * <p/>
-     * Note that when a node is protected this means that all its
-     * properties are also protected (regardless of their protected setting). The protected status of a property
-     * only becomes relevant if its parent node is not protected.
-     *
-     * @return a <code>boolean</code>.
-     */
-    public function isProtected();
-}
-
-?>
diff --git a/contrib/phpcr/PHPCR/nodetype/NoSuchNodeTypeException.php b/contrib/phpcr/PHPCR/nodetype/NoSuchNodeTypeException.php
deleted file mode 100644
index 619c2b3..0000000
--- a/contrib/phpcr/PHPCR/nodetype/NoSuchNodeTypeException.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/RepositoryException.php';
-
-
-/**
- * Exception thrown by node type-related methods.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- * @subpackage nodetype
- */
-class NoSuchNodeTypeException extends RepositoryException
-{
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/nodetype/NodeDefinition.php b/contrib/phpcr/PHPCR/nodetype/NodeDefinition.php
deleted file mode 100644
index 15c4a69..0000000
--- a/contrib/phpcr/PHPCR/nodetype/NodeDefinition.php
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-require_once 'PHPCR/nodetype/ItemDefinition.php';
-
-
-/**
- * A node definition. Used in node typed definition
- *
- * @author Markus Nix <mnix@mayflower.de>
- */
-interface NodeDefinition extends ItemDefinition
-{
-    /**
-     * Gets the minimum set of primary node types that the child node must have.
-     * Returns an array to support those implementations with multiple
-     * inheritance. The simplest case would be to return <code>nt:base</code>,
-     * which is the base of all primary node types and therefore, in this
-     * context, represents the least restrictive requirement.
-     * <p>
-     * A node must still have only one assigned primary node type, though
-     * this attribute can restrict that node type by taking advantage of any
-     * inheritance hierarchy that the implementation may support.
-     *
-     * @return an array of <code>NodeType</code> objects.
-     */
-    public function getRequiredPrimaryTypes();
-
-    /**
-     * Gets the default primary node type that will be assigned to the child
-     * node if it is created without an explicitly specified primary node type.
-     * This node type must be a subtype of (or the same type as) the node types
-     * returned by <code>getRequiredPrimaryTypes</code>.
-     * <p/>
-     * If <code>null</code> is returned this indicates that no default primary
-     * type is specified and that therefore an attempt to create this node without
-     * specifying a node type will throw a <code>ConstraintViolationException</code>.
-     *
-     * @return a <code>NodeType</code>.
-     */
-    public function getDefaultPrimaryType();
-
-    /**
-     * Reports whether this child node can have same-name siblings. In other
-     * words, whether the parent node can have more than one child node of this
-     * name.
-     *
-     * @return a boolean.
-     */
-    public function allowSameNameSibs();
-}
-
-?>
diff --git a/contrib/phpcr/PHPCR/nodetype/NodeType.php b/contrib/phpcr/PHPCR/nodetype/NodeType.php
deleted file mode 100644
index 793d488..0000000
--- a/contrib/phpcr/PHPCR/nodetype/NodeType.php
+++ /dev/null
@@ -1,179 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/Value.php';
-require_once 'PHPCR/nodetype/PropertyDefinition.php';
-require_once 'PHPCR/nodetype/NodeDefinition.php';
-require_once 'PHPCR/nodetype/NodeType.php';
-
-
-/**
- * Represents a node type.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- * @subpackage nodetype
- */
-interface NodeType
-{
-    /**
-     * Returns the name of the node type.
-     *
-     * @return the name of the node type
-     */
-    public function getName();
-
-    /**
-     * Returns <code>true</code> if this node type is a mixin node type.
-     * Returns <code>false</code> if this node type is a primary node type.
-     *
-     * @return a boolean
-     */
-    public function isMixin();
-
-    /**
-     * Returns <code>true</code> if nodes of this type must support orderable child nodes; returns <code>false</code>
-     * otherwise. If a node type returns <code>true</code> on a call to this method, then all nodes of that node type
-     * <i>must</i> support the method {@link Node#orderBefore}. If a node type returns <code>false</code>
-     * on a call to this method, then nodes of that node type <i>may</i> support these ordering methods. Only the primary
-     * node type of a node controls that node's status in this regard. This setting on a mixin node type will not have any effect
-     * on the node.
-     *
-     * @return Returns <code>true</code> if nodes of this type must support orderable child nodes; returns
-     * <code>false</code> otherwise.
-     */
-    public function hasOrderableChildNodes();
-
-    /**
-     * Returns the name of the primary item (one of the child items of the node's of this node type).
-     * If this node has no primary item, then this method returns <code>null</code>.
-     * This indicator is used by the method {@link Node#getPrimaryItem()}.
-     *
-     * @return the name of the primary item.
-     */
-    public function getPrimaryItemName();
-
-    /**
-     * Returns all supertypes of this node type including both those directly
-     * declared and those inherited. For primary types, this list will always
-     * include at least <code>nt:base</code>. For mixin types, there is no
-     * required base type.
-     *
-     * @see #getDeclaredSupertypes
-     *
-     * @return an array of <code>NodeType</code> objects.
-     */
-    public function getSupertypes();
-
-    /**
-     * Returns all <i>direct</i> supertypes as specified in the declaration of
-     * <i>this</i> node type. In single inheritance systems this will always be
-     * an array of size 0 or 1. In systems that support multiple inheritance of
-     * node types this array may be of size greater than 1.
-     *
-     * @see #getSupertypes
-     *
-     * @return an array of <code>NodeType</code> objects.
-     */
-    public function getDeclaredSupertypes();
-
-    /**
-     * Returns true if this node type is <code>nodeTypeName</code>
-     * or a subtype of <code>nodeTypeName</code>, otherwise returns
-     * <code>false</code>.
-     * @param nodeTypeName the name of a node type.
-     * @return a boolean
-     */
-    public function isNodeType( $nodeTypeName );
-
-    /**
-     * Returns an array containing the property definitions of this node type,
-     * including the property definitions inherited from supertypes of this node
-     * type.
-     *
-     * @see #getDeclaredPropertyDefinitions
-     *
-     * @return an array containing the property definitions.
-     */
-    public function getPropertyDefinitions();
-
-    /**
-     * Returns an array containing the property definitions explicitly specified
-     * in the declaration of <i>this</i> node type. This does <i>not</i> include
-     * property definitions inherited from supertypes of this node type.
-     *
-     * @see #getPropertyDefinitions
-     *
-     * @return an array containing the property definitions.
-     */
-    public function getDeclaredPropertyDefinitions();
-
-    /**
-     * Returns an array containing the child node definitions of this node type,
-     * including the child node definitions inherited from supertypes of this
-     * node type.
-     *
-     * @see #getDeclaredChildNodeDefinitions
-     *
-     * @return an array containing the child node definitions.
-     */
-    public function getChildNodeDefinitions();
-
-    /**
-     * Returns an array containing the child node definitions explicitly
-     * specified in the declaration of <i>this</i> node type. This does
-     * <i>not</i> include child node definitions inherited from supertypes of
-     * this node type.
-     *
-     * @see #getChildNodeDefinitions
-     * @return an array containing the child node definitions.
-     */
-    public function getDeclaredChildNodeDefinitions();
-
-    /**
-     * Returns <code>true</code> if setting <code>propertyName</code> to
-     * <code>value</code> is allowed by this node type. Otherwise returns
-     * <code>false</code>.
-     *
-     * @param propertyName The name of the property
-     * @param value A <code>Value</code> object.
-     */
-    public function canSetProperty( $propertyName, $value );
-
-    /**
-     * Returns <code>true</code> if adding a child node called
-     * <code>childNodeName</code> is allowed by this node type.
-     * <p>
-     *
-     * @param childNodeName The name of the child node.
-     * @param nodeTypeName The name of the node type of the child node.
-     */
-    public function canAddChildNode( $childNodeName, $nodeTypeName = null );
-
-    /**
-     * Returns true if removing the child item called <code>itemName</code> is allowed by this node type.
-     * Otherwise returns <code>false</code>.
-     *
-     * @param itemName The name of the child item
-     */
-    public function canRemoveItem( $itemName );
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/nodetype/NodeTypeIterator.php b/contrib/phpcr/PHPCR/nodetype/NodeTypeIterator.php
deleted file mode 100644
index 52aabbe..0000000
--- a/contrib/phpcr/PHPCR/nodetype/NodeTypeIterator.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/RangeIterator.php';
-require_once 'PHPCR/NoSuchElementException.php';
-
-
-/**
- * An iterator for <code>NodeType</code> objects.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- * @subpackage nodetype
- */
-interface NodeTypeIterator extends RangeIterator
-{
-    /**
-     * Returns the next <code>NodeType</code> in the iteration.
-     *
-     * @return the next <code>NodeType</code> in the iteration.
-     * @throws NoSuchElementException
-     *         if iteration has no more <code>NodeType</code>s.
-     */
-    public function nextNodeType();
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/nodetype/NodeTypeManager.php b/contrib/phpcr/PHPCR/nodetype/NodeTypeManager.php
deleted file mode 100644
index 14edff9..0000000
--- a/contrib/phpcr/PHPCR/nodetype/NodeTypeManager.php
+++ /dev/null
@@ -1,77 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/RepositoryException.php';
-require_once 'PHPCR/nodetype/NodeType.php';
-require_once 'PHPCR/nodetype/NoSuchNodeTypeException.php';
-require_once 'PHPCR/nodetype/NodeTypeIterator.php';
-
-
-/**
- * Allows for the retrieval of node types.
- * Accessed via Workspace#getNodeTypeManager.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- * @subpackage nodetype
- */
-interface NodeTypeManager
-{
-    /**
-     * Returns the named node type.
-     * <p>
-     * Throws a <code>NoSuchNodeTypeException</code> if a node type by that name does not exist.
-     * <p>
-     * Throws a <code>RepositoryException</code> if another error occurs.
-     *
-     * @param nodeTypeName the name of an existing node type.
-     * @return A <code>NodeType</code> object.
-     * @throws NoSuchNodeTypeException if no node type by the given name exists.
-     * @throws RepositoryException if another error occurs.
-     */
-    public function getNodeType( $nodeTypeName );
-
-    /**
-     * Returns an iterator over all available node types (primary and mixin).
-     *
-     * @return An <code>NodeTypeIterator</code>.
-     * @throws RepositoryException if an error occurs.
-     */
-    public function getAllNodeTypes();
-
-    /**
-     * Returns an iterator over all available primary node types.
-     *
-     * @return An <code>NodeTypeIterator</code>.
-     * @throws RepositoryException if an error occurs.
-     */
-    public function getPrimaryNodeTypes();
-
-    /**
-     * Returns an iterator over all available mixin node types.
-     * If none are available, an empty iterator is returned.
-     *
-     * @return An <code>NodeTypeIterator</code>.
-     * @throws RepositoryException if an error occurs.
-     */
-    public function getMixinNodeTypes();
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/nodetype/PropertyDefinition.php b/contrib/phpcr/PHPCR/nodetype/PropertyDefinition.php
deleted file mode 100644
index 0fc6cb8..0000000
--- a/contrib/phpcr/PHPCR/nodetype/PropertyDefinition.php
+++ /dev/null
@@ -1,239 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-require_once 'PHPCR/Value.php';
-require_once 'PHPCR/nodetype/ItemDefinition.php';
-
-
-/**
- * A property definition. Used in node type definitions.
- *
- * @author Markus Nix <mnix@mayflower.de>
- */
-interface PropertyDefinition extends ItemDefinition
-{
-    /**
-     * Gets the required type of the property. One of:
-     * <ul>
-     *   <li><code>PropertyType::STRING</code></li>
-     *   <li><code>PropertyType::DATE</code></li>
-     *   <li><code>PropertyType::BINARY</code></li>
-     *   <li><code>PropertyType::DOUBLE</code></li>
-     *   <li><code>PropertyType::LONG</code></li>
-     *   <li><code>PropertyType::BOOLEAN</code></li>
-     *   <li><code>PropertyType::NAME</code></li>
-     *   <li><code>PropertyType::PATH</code></li>
-     *   <li><code>PropertyType::REFERENCE</code></li>
-     *   <li><code>PropertyType::UNDEFINED</code></li>
-     * </ul>
-     * <code>PropertyType.UNDEFINED</code> is returned if this property may be
-     * of any type.
-     *
-     * @return an int
-     */
-    public function getRequiredType();
-
-    /**
-     * Gets the array of constraint strings. Each string in the array specifies
-     * a constraint on the value of the property. The constraints are OR-ed together,
-     * meaning that in order to be valid, the value must meet at least one of the
-     * constraints. For example, a constraint array of <code>["constraint1", "constraint2",
-     * "constraint3"]</code> has the interpretation: "the value of this property must
-     * meet either constraint1, constraint2 or constraint3".
-     * <p>
-     * Reporting of value constraints is optional. An implementation may return
-     * <code>null</code>, indicating that value constraint information is unavailable
-     * (though a constraint may still exist).
-     * <p/>
-     * Returning an empty array, on the other hand, indicates that value constraint information
-     * is available and that no constraints are placed on this value.
-     * <p>
-     * In the case of multi-value properties, the constraint string array
-     * returned applies to all the values of the property.
-     * <p>
-     * The constraint strings themselves having differing formats and interpretations
-     * depending on the type of the property in question. The following describes the
-     * value constraint syntax for each property type:
-     * <ul>
-     * <li>
-     * <code>STRING</code>: The constraint string is a regular expression pattern. For example the
-     * regular expression "<code>.*</code>" means "any string, including the empty string". Whereas
-     * a simple literal string (without any RE-specific meta-characters) like "<code>banana</code>"
-     * matches only the string "<code>banana</code>".
-     * </li>
-     * <li>
-     * <code>PATH</code>: The constraint string is a <i>JCR path</i> with an optional "<code>*</code>" character after
-     * the last "<code>/</code>" character. For example,  possible constraint strings for a property
-     * of type <code>PATH</code> include:
-     * <ol>
-     * <li>
-     * "<code>/myapp:products/myapp:televisions</code>"
-     * </li>
-     * <li>
-     * "<code>/myapp:products/myapp:televisions/</code>"
-     * </li>
-     * <li>
-     * "<code>/myapp:products/*</code>"
-     * </li>
-     * <li>
-     * "<code>myapp:products/myapp:televisions</code>"
-     * </li>
-     * <li>
-     * "<code>../myapp:televisions</code>"
-     * </li>
-     * <li>
-     * "<code>../myapp:televisions/*</code>"
-     * </li>
-     * </ol>
-     * The following principles apply:
-     * <ul>
-     * <li>
-     * The "*" means "matches descendants" not "matches any subsequent path". For example,
-     * <code>/a/*</code> does not match <code>/a/../c</code>.
-     * The constraint must match the normalized path.
-     * </li>
-     * <li>
-     * Relative path constraint only match relative path values and absolute path
-     * constraints only match absolute path values.
-     * </li>
-     * <li>
-     * A trailing "<code>/</code>" has no effect (hence, <code>1</code> and <code>2</code>, above, are equivalent).
-     * </li>
-     * <li>
-     * The trailing "<code>*</code>" character means that the value of the <code>PATH</code> property is
-     * restricted to the indicated subtree (in other words any additional relative path
-     * can replace the "<code>*</code>"). For example, 3, above would allow
-     * <code>/myapp:products/myapp:radios</code>, <code>/myapp:products/myapp:microwaves/X900</code>, and so
-     * forth.
-     * </li>
-     * <li>
-     * A constraint without a "<code>*</code>" means that the <code>PATH</code> property is restricted to that
-     * precise path. For example, <code>1</code>, above, would allow only the value
-     * <code>/myapp:products/myapp:televisions</code>.
-     * </li>
-     * <li>
-     * The constraint can indicate either a relative path or an absolute path
-     * depending on whether it includes a leading "<code>/</code>" character. <code>1</code> and <code>4</code>, above for
-     * example, are distinct.
-     * </li>
-     * <li>
-     * The string returned must reflect the namespace mapping in the current <code>Session</code>
-     * (i.e., the current state of the namespace registry overlaid with any
-     * session-specific mappings). Constraint strings for <code>PATH</code> properties should be
-     * stored in fully-qualified form (using the actual URI instead of the prefix) and
-     * then be converted to prefix form according to the current mapping upon the
-     * <code>PropertyDefinition.getValueConstraints</code> call.
-     * </li>
-     * </ul>
-     * </li>
-     * <li>
-     * <code>NAME</code>: The constraint string is a <i>JCR name</i> in prefix form. For example
-     * "<code>myapp:products</code>". No wildcards or other pattern matching are supported. As with
-     * <code>PATH</code> properties, the string returned must reflect the namespace mapping in the
-     * current <code>Session</code>. Constraint strings for <code>NAME</code> properties should be stored in
-     * fully-qualified form (using the actual URI instead of the prefix) and then be
-     * converted to prefix form according to the current mapping.
-     * </li>
-     * <li>
-     * <code>REFERENCE</code>: The constraint string is a <i>JCR name</i> in prefix form. This name is
-     * interpreted as a node type name and the <code>REFERENCE</code> property is restricted to
-     * referring only to nodes that have at least the indicated node type. For
-     * example, a constraint of "<code>mytype:document</code>" would indicate that the REFERENCE
-     * property in question can only refer to nodes that have at least the node type
-     * <code>mytype:document</code> (assuming this was the only constraint returned in the array,
-     * recall that the array of constraints are to be "OR-ed" together). No wildcards or other
-     * pattern matching are supported. As with <code>PATH</code> properties, the string returned
-     * must reflect the namespace mapping in the current <code>Session</code>. Constraint strings
-     * for <code>REFERENCE</code> properties should be stored in fully-qualified form (using the
-     * actual URI instead of the prefix) and then be converted to prefix form according to the
-     * current mapping.
-     * </li>
-     * <li>
-     * <code>BOOLEAN</code>: Either "<code>true</code>" or "<code>false</code>".
-     * </li>
-     * </ul>
-     * The remaining types all have value constraints in the form of inclusive or
-     * exclusive ranges: i.e., "<code>[min, max]</code>", "<code>(min, max)</code>",
-     * "<code>(min, max]</code>" or "<code>[min, max)</code>". Where "<code>[</code>"
-     * and "<code>]</code>" indicate "inclusive", while "<code>(</code>" and "<code>)</code>"
-     * indicate "exclusive". A missing <code>min</code> or <code>max</code> value
-     * indicates no bound in that direction. For example [,5] means no minimum but a
-     * maximum of 5 (inclusive) while [,] means simply that any value will suffice,
-     * The meaning of the <code>min</code> and <code>max</code> values themselves
-     * differ between types as follows:
-     * <ul>
-     * <li>
-     * <code>BINARY</code>: <code>min</code> and <code>max</code> specify the allowed
-     * size range of the binary value in bytes.
-     * </li>
-     * <li>
-     * <code>DATE</code>: <code>min</code> and <code>max</code> are dates specifying the
-     * allowed date range. The date strings must be in the ISO8601-compliant format:
-     * <code>YYYY-MM-DDThh:mm:ss.sssTZD</code>.
-     * </li>
-     * <li>
-     * <code>LONG</code>, <code>DOUBLE</code>: min and max are numbers.
-     * </li>
-     * </ul>
-     * Because constraints are returned as an array of disjunctive constraints,
-     * in many cases the elements of the array can serve directly as a "choice list".
-     * This may, for example, be used by an application to display options to the
-     * end user indicating the set of permitted values.
-     *
-     * @return a <code>String</code> array.
-     */
-    public function getValueConstraints();
-
-    /**
-     * Gets the default value(s) of the property. These are the values
-     * that the property defined by this PropertyDefinition will be assigned if it
-     * is automatically created (that is, if {@link #isAutoCreate()}
-     * returns <code>true</code>).
-     * <p>
-     * This method returns an array of Value objects. If the property is
-     * multi-valued, then this array represents the full set of values
-     * that the property will be assigned upon being auto-created.
-     * Note that this could be the empty array. If the property is single-valued,
-     * then the array returned will be of size 1.
-     * <p/>
-     * If <code>null</code> is returned, then the property has no fixed default value.
-     * This does not exclude the possibility that the property still assumes some
-     * value automatically, but that value may be parameterized (for example,
-     * "the current date") and hence not expressable as a single fixed value.
-     * In particular, this <i>must</i> be the case if <code>isAutoCreate</code>
-     * returns <code>true</code> and this method returns <code>null</code>.
-     *
-     * @return an array of <code>Value</code> objects.
-     */
-    public function getDefaultValues();
-
-    /**
-     * Reports whether this property can have multiple values. Note that the
-     * <code>isMultiple</code> flag is special in that a given node type may
-     * have two property definitions that are identical in every respect except
-     * for the their <code>isMultiple</code> status. For example, a node type
-     * can specify two string properties both called <code>X</code>, one of
-     * which is multi-valued and the other not.
-     *
-     * @return a <code>boolean</code>
-     */
-    public function isMultiple();
-}
-
-?>
diff --git a/contrib/phpcr/PHPCR/observation/Event.php b/contrib/phpcr/PHPCR/observation/Event.php
deleted file mode 100644
index a302dd8..0000000
--- a/contrib/phpcr/PHPCR/observation/Event.php
+++ /dev/null
@@ -1,118 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/RepositoryException.php';
-
-
-/**
- * All events used by the ObservationManager system are subclassed from this interface
- * <p>
- * <b>Level 2 only</b>
- * <p>
- * For details see the <i>ObservationManager</i> section of the JCR standard document.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- * @subpackage observation
- */
-interface Event
-{
-    /**
-     * An event of this type is generated when a node is added.
-     */
-    const NODE_ADDED = 1;
-
-    /**
-     * An event of this type is generated when a node is removed.
-     */
-    const NODE_REMOVED = 2;
-
-    /**
-     * An event of this type is generated when a property is added.
-     */
-    const PROPERTY_ADDED = 4;
-
-    /**
-     * An event of this type is generated when a property is removed.
-     */
-    const PROPERTY_REMOVED = 8;
-
-    /**
-     * An event of this type is generated when a property is changed.
-     */
-    const PROPERTY_CHANGED = 16;
-
-
-    /**
-     * Returns the type of this event: a constant defined by this interface.
-     * One of:
-     * <ul>
-     * <li><code>NODE_ADDED</code></li>
-     * <li><code>NODE_REMOVED</code></li>
-     * <li><code>PROPERTY_ADDED</code></li>
-     * <li><code>PROPERTY_REMOVED</code></li>
-     * <li><code>PROPERTY_CHANGED</code></li>
-     * </ul>
-     *
-     * @return the type of this event.
-     */
-    public function getType();
-
-    /**
-     * Returns the absolute path of the parent node connected with this event.
-     * The interpretation given to the returned path depends upon the type of the event:
-     * <ul>
-     *   <li>
-     *     If the event type is <code>NODE_ADDED</code> then this method returns the absolute path of
-     *     the node that was added.
-     *   </li>
-     *   <li>
-     *     If the event type is <code>NODE_REMOVED</code> then this method returns the absolute path of
-     *     the node that was removed.
-     *   </li>
-     *   <li>
-     *     If the event type is <code>PROPERTY_ADDED</code> then this method returns the absolute path of
-     *     the property that was added.
-     *   </li>
-     *   <li>
-     *     If the event type is <code>PROPERTY_REMOVED</code> then this method returns the absolute path of
-     *     the property that was removed.
-     *   </li>
-     *   <li>
-     *     If the event type is <code>PROPERTY_CHANGED</code> then this method returns the absolute path of
-     *     of the changed property.
-     *   </li>
-     * </ul>
-     *
-     * @throws RepositoryException if an error occurs.
-     * @return the absolute path of the parent node connected with this event.
-     */
-    public function getPath();
-
-    /**
-     * Returns the user ID connected with this event. This is the string returned by getUserId of the session that
-     * caused the event.
-     *
-     * @return a <code>String</code>.
-     */
-    public function getUserId();
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/observation/EventIterator.php b/contrib/phpcr/PHPCR/observation/EventIterator.php
deleted file mode 100644
index eb897cc..0000000
--- a/contrib/phpcr/PHPCR/observation/EventIterator.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/RangeIterator.php';
-require_once 'PHPCR/observation/Event.php';
-require_once 'PHPCR/NoSuchElementException.php';
-
-
-/**
- * Allows easy iteration through a list of <code>Event</code>s
- * with <code>nextEvent</code> as well as a <code>skip</code> method inherited from
- * <code>RangeIterator</code>.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- * @subpackage observation
- */
-interface EventIterator extends RangeIterator
-{
-     /**
-      * Returns the next <code>Event</code> in the iteration.
-      *
-      * @return the next <code>Event</code> in the iteration.
-      * @throws NoSuchElementException if iteration has no more <code>Event</code>s.
-     */
-    public function nextEvent();
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/observation/EventListener.php b/contrib/phpcr/PHPCR/observation/EventListener.php
deleted file mode 100644
index d87d22e..0000000
--- a/contrib/phpcr/PHPCR/observation/EventListener.php
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/observation/EventIterator.php';
-
-
-/**
- * An event listener.
- * <p>
- * <b>Level 2 only</b>
- * <p>
- * An <code>EventListener</code> can be registered via the
- * <code>observation.ObservationManager</code> object. Event listeners are
- * notified asynchronously, and see events after they occur and the transaction
- * is committed. An event listener only sees events for which the ticket that
- * registered it has sufficient access rights.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- * @subpackage observation
- */
-interface EventListener
-{
-    /**
-     * Gets called when an event occurs.
-     *
-     * @param events The event set recieved.
-     */
-    public function onEvent( EventIterator $events );
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/observation/EventListenerIterator.php b/contrib/phpcr/PHPCR/observation/EventListenerIterator.php
deleted file mode 100644
index e1cb6d4..0000000
--- a/contrib/phpcr/PHPCR/observation/EventListenerIterator.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/RangeIterator.php';
-require_once 'PHPCR/observation/EventListener.php';
-require_once 'PHPCR/NoSuchElementException.php';
-
-
-/**
- * Allows easy iteration through a list of <code>EventListener</code>s
- * with <code>nextEventListener</code> as well as a <code>skip</code> method inherited from
- * <code>RangeIterator</code>.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- * @subpackage observation
- */
-interface EventListenerIterator extends RangeIterator
-{
-     /**
-      * Returns the next <code>EventListener</code> in the iteration.
-      *
-      * @return the next <code>EventListener</code> in the iteration.
-      * @throws NoSuchElementException if iteration has no more <code>EventListener</code>s.
-     */
-    public function nextEventListener();
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/observation/ObservationManager.php b/contrib/phpcr/PHPCR/observation/ObservationManager.php
deleted file mode 100644
index 956750f..0000000
--- a/contrib/phpcr/PHPCR/observation/ObservationManager.php
+++ /dev/null
@@ -1,110 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/RepositoryException.php';
-require_once 'PHPCR/observation/EventListener.php';
-require_once 'PHPCR/observation/EventListenerIterator.php';
-
-
-/**
- * The ObservationManager object.
- * <p>
- * Allows for the registration and deregistration of event listeners.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- * @subpackage observation
- */
-interface ObservationManager
-{
-    /**
-     * Adds an event listener that listens for the specified <code>eventTypes</code> (a combination of one or more
-     * event types encoded as a bit mask value).
-     * <p>
-     * The set of events can be filtered by specifying restrictions based on characteristics of the node associated
-     * with the event. In the case of  event types <code>NODE_ADDED</code> and <code>NODE_REMOVED</code>, the node
-     * associated with an event is the node at (or formerly at) the path returned by <code>Event.getPath</code>.
-     * In the case of  event types <code>PROPERTY_ADDED</code>,  <code>PROPERTY_REMOVED</code> and
-     * <code>PROPERTY_CHANGED</code>, the node associated with an event is the parent node of the property at
-     * (or formerly at) the path returned by <code>Event.getPath</code>:
-     * <ul>
-     *   <li>
-     *     <code>absPath</code>, <code>isDeep</code>: Only events whose associated node is at
-     *     <code>absPath</code> (or within its subtree, if <code>isDeep</code> is <code>true</code>) will be received.
-     *     It is permissible to register a listener for a path where no node currently exists.
-     *   </li>
-     *   <li>
-     *     <code>uuid</code>: Only events whose associated node has one of the UUIDs in this list will be
-     *     received. If his parameter is <code>null</code> then no UUID-related restriction is placed on events
-     *     received.
-     *   </li>
-     *   <li>
-     *     <code>nodeTypeName</code>: Only events whose associated node has one of the node types
-     *     (or a subtype of one of the node types) in this list will be received. If his parameter is
-     *     <code>null</code> then no node type-related restriction is placed on events received.
-     *   </li>
-     * </ul>
-     * The restrictions are "ANDed" together. In other words, for a particular node to be "listened to" it must meet all the restrictions.
-     * <p>
-     * Additionally, if <code>noLocal</code> is <code>true</code>, then events generated by the session through which
-     * the listener was registered are ignored. Otherwise, they are not ignored.
-     * <p>
-     * The filters of an already-registered <code>EventListener</code> can be changed at runtime by re-registering the
-     * same <code>EventListener</code> object (i.e. the same actual Java object) with a new set of filter arguments.
-     * The implementation must ensure that no events are lost during the changeover.
-     *
-     * @param listener an {@link EventListener} object.
-     * @param eventTypes A combination of one or more event type constants encoded as a bitmask.
-     * @param absPath an absolute path.
-     * @param isDeep a <code>boolean</code>.
-     * @param uuid array of UUIDs.
-     * @param nodeTypeName array of node type names.
-     * @param noLocal a <code>boolean</code>.
-     * @throws RepositoryException If an error occurs.
-     */
-    public function addEventListener( EventListener $listener, $eventTypes, $absPath, $isDeep, $uuid, $nodeTypeName, $noLocal );
-
-    /**
-     * Deregisters an event listener.
-     * <p>
-     * A listener may be deregistered while it is being executed. The
-     * deregistration method will block until the listener has completed
-     * executing. An exception to this rule is a listener which deregisters
-     * itself from within the <code>onEvent</code> method. In this case, the
-     * deregistration method returns immediately, but deregistration will
-     * effectively be delayed until the listener completes.
-     *
-     * @param listener The listener to deregister.
-     *
-     * @throws RepositoryException If an error occurs.
-     */
-    public function removeEventListener( EventListener $listener );
-
-    /**
-     * Returns all event listeners that have been registered through this session.
-     * If no listeners have been registered, an empty iterator is returned.
-     *
-     * @return an <code>EventListenerIterator</code>.
-     * @throws RepositoryException
-     */
-    public function getRegisteredEventListeners();
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/query/InvalidQueryException.php b/contrib/phpcr/PHPCR/query/InvalidQueryException.php
deleted file mode 100644
index c3b663c..0000000
--- a/contrib/phpcr/PHPCR/query/InvalidQueryException.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/RepositoryException.php';
-
-
-/**
- * Thrown by methods of <code>Query</code>.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- * @subpackage query
- */
-class InvalidQueryException extends RepositoryException
-{
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/query/Query.php b/contrib/phpcr/PHPCR/query/Query.php
deleted file mode 100644
index 5f58a7f..0000000
--- a/contrib/phpcr/PHPCR/query/Query.php
+++ /dev/null
@@ -1,157 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/ItemExistsException.php';
-require_once 'PHPCR/PathNotFoundException.php';
-require_once 'PHPCR/RepositoryException.php';
-require_once 'PHPCR/nodetype/ConstraintViolationException.php';
-require_once 'PHPCR/lock/LockException.php';
-
-
-/**
- * A <code>Query</code> object.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- * @subpackage query
- */
-interface Query
-{
-    /**
-     * A String constant representing the XPath query language applied to the <i>document view</i>
-     * XML mapping of the workspace.
-     * <p/>
-     * This language must be supported in level 1 repositories.
-     * <p/>
-     * Used when defining a query using {@link QueryManager#createQuery}.
-     * Also among the strings returned by {@link QueryManager#getSupportedQueryLanguages}.
-     */
-    const XPATH = "xpath";
-
-    /**
-     * A String constant representing the SQL query language applied to the <i>database view</i>
-     * of the workspace.
-     * <p/>
-     * This language is optional.
-     * <p/>
-     * Used when defining a query using {@link QueryManager#createQuery}.
-     * Also among the strings returned by {@link QueryManager#getSupportedQueryLanguages}.
-     */
-    const SQL = "sql";
-
-
-    /**
-     * Executes this query and returns a <code>{@link QueryResult}</code>.
-     *
-     * @return a <code>QueryResult</code>
-     * @throws RepositoryException if an error occurs
-     */
-    public function execute();
-
-    /**
-     * Returns the statement set for this query. Returns <code>null</code>
-     * if no statement is currently set.
-     *
-     * @return the query statement.
-     */
-    public function getStatement();
-
-    /**
-     * Returns the language set for this query. This will be one of the
-     * QueryLanguage constants returned by
-     * QueryManager.getSupportedQueryLanguages(). If the query was created
-     * using a mechanism outside the specification, this method may return 0.
-     *
-     * @return the query language.
-     */
-    public function getLanguage();
-
-    /**
-     * If this is a Query object that has been stored using
-     * <code>storeAsNode($string)</code> (regardless of whether it has
-     * been saved yet) or retrieved using
-     * <code>QueryManager.getQuery($node)</code>), then this method returns
-     * the path of the <code>nt:query</code> node that stores the query. If
-     * this is a transient query (that is, a <code>Query</code> object created
-     * with <code>QueryManager.createQuery($string, $string)</code> but not
-     * yet stored) then this method throws an ItemNotFoundException.
-     *
-     * @return path of persisted node representing this query in content.
-     */
-    public function getStoredQueryPath();
-
-    /**
-     * Creates a node representing this Query in content.
-     *
-     * In a level 1 repository this method throws an
-     * UnsupportedRepositoryOperationException.
-     *
-     * In a level 2 repository it creates a node of type nt:query at absPath
-     * and returns that node.
-     *
-     * In order to persist the newly created node, a save must be performed
-     * that includes the parent of this new node within its scope. In other
-     * words, either a Session.save or an Item.save on the parent or
-     * higher-degree ancestor of absPath must be performed.
-     *
-     * An ItemExistsException will be thrown either immediately (by this
-     * method), or on save, if an item at the specified path already exists
-     * and same-name siblings are not allowed. Implementations may differ
-     * on when this validation is performed.
-     *
-     * A PathNotFoundException will be thrown either immediately , or on
-     * save, if the specified path implies intermediary nodes that do not
-     * exist. Implementations may differ on when this validation is performed.
-     *
-     * A ConstraintViolationExceptionwill be thrown either immediately or
-     * on save, if adding the node would violate a node type or
-     * implementation-specific constraintor if an attempt is made to add
-     * a node as the child of a property. Implementations may differ on when
-     * this validation is performed.
-     *
-     * A VersionException will be thrown either immediately (by this method),
-     * or on save, if the node to which the new child is being added is
-     * versionable and checked-in or is non-versionable but its nearest
-     * versionable ancestor is checked-in. Implementations may differ on when
-     * this validation is performed.
-     *
-     * A LockException will be thrown either immediately (by this method), or
-     * on save, if a lock prevents the addition of the node. Implementations
-     * may differ on when this validation is performed.
-     *
-     * @param absPath path at which to persist this query.
-     * @return the newly created node.
-     * @throws ItemExistsException If an item already exists at the indicated position
-     * @throws PathNotFoundException If the path cannot be found
-     * @throws ConstraintViolationException If creating the node would violate a
-     * node type (or other implementation specific) constraint.
-     * @throws VersionException f the node to which the new child is being
-     * added is versionable and checked-in or is non-versionable but its
-     * nearest versionable ancestor is checked-in and this implementation
-     * performs this validation immediately instead of waiting until save.
-     * @throws LockException if a lock prevents the addition of the node and
-     * this implementation performs this validation immediately instead of
-     * waiting until save.
-     * @throws RepositoryException If another error occurs.
-     */
-    public function storeAsNode( $absPath );
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/query/QueryManager.php b/contrib/phpcr/PHPCR/query/QueryManager.php
deleted file mode 100644
index 3318dd8..0000000
--- a/contrib/phpcr/PHPCR/query/QueryManager.php
+++ /dev/null
@@ -1,79 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/RepositoryException.php';
-require_once 'PHPCR/Node.php';
-require_once 'PHPCR/query/Query.php';
-require_once 'PHPCR/query/InvalidQueryException.php';
-
-
-/**
- * This interface encapsulates methods for the management of search queries.
- * Provides methods for the creation and retrieval of search queries.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- * @subpackage query
- */
-interface QueryManager
-{
-    /**
-     * Creates a new query by specifying the query statement itself and the
-     * language in which the query is stated.  If the query statement is
-     * syntactically invalid, given the language specified, an
-     * InvalidQueryException is thrown. language must specify a query language
-     * from among those returned by QueryManager.getSupportedQueryLanguages(); if it is not
-     * then an InvalidQueryException is thrown.
-     *
-     * @throws InvalidQueryException if statement is invalid or language is unsupported.
-     * @throws RepositoryException if another error occurs
-     * @return A <code>Query</code> object.
-     */
-    public function createQuery( $statement, $language );
-
-    /**
-     * Retrieves an existing persistent query. If <code>node</code>
-     * is not a valid persisted query (that is, a node of type
-     * <code>nt:query</code>), an <code>InvalidQueryException</code>
-     * is thrown.
-     * <p/>
-     * Persistent queries are created by first using <code>QueryManager.createQuery</code>
-     * to create a <code>Query</code> object and then calling <code>Query.save</code> to
-     * persist the query to a location in the workspace.
-     *
-     * @param node a persisted query (that is, a node of type <code>nt:query</code>).
-     * @throws InvalidQueryException If <code>node</code> is not a valid persisted query
-     * (that is, a node of type <code>nt:query</code>).
-     * @throws RepositoryException if another error occurs
-     * @return a <code>Query</code> object.
-     */
-    public function getQuery( Node $node );
-
-    /**
-     * Returns an array of integers identifying the supported query languages.
-     * See QueryLanguage.
-     *
-     * @return An string array.
-     * @throws RepositoryException if an error occurs.
-     */
-    public function getSupportedQueryLanguages();
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/query/QueryResult.php b/contrib/phpcr/PHPCR/query/QueryResult.php
deleted file mode 100644
index 3d7715c..0000000
--- a/contrib/phpcr/PHPCR/query/QueryResult.php
+++ /dev/null
@@ -1,67 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/NodeIterator.php';
-require_once 'PHPCR/query/RowIterator.php';
-require_once 'PHPCR/RepositoryException.php';
-
-
-/**
- * A QueryResult object. Returned in an iterator by query.Query#execute()
- * Query.execute()
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- * @subpackage query
- */
-interface QueryResult
-{
-    /**
-     * Returns an array of all the property names (column names) in this result set.
-     *
-     * @return array of strings
-     * @throws RepositoryException if an error occurs.
-     */
-    public function getColumnNames();
-
-    /**
-     * Returns an iterator over the <code>Row</code>s of the query result table.
-     * If an <code>ORDER BY</code> clause was specified in the query, then the
-     * order of the returned properties in the iterator will reflect the order
-     * specified in that clause. If no items match, an empty iterator is returned.
-     *
-     * @return a <code>RowIterator</code>
-     * @throws RepositoryException if an error occurs.
-     */
-    public function getRows();
-
-    /**
-     * Returns an iterator over all nodes that match the query. If an <code>ORDER BY</code>
-     * clause was specified in the query, then the order of the returned nodes in the iterator
-     * will reflect the order specified in that clause. If no nodes match, an empty iterator
-     * is returned.
-     *
-     * @return a <code>NodeIterator</code>
-     * @throws RepositoryException if an error occurs.
-     */
-    public function getNodes();
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/query/Row.php b/contrib/phpcr/PHPCR/query/Row.php
deleted file mode 100644
index ee51a7c..0000000
--- a/contrib/phpcr/PHPCR/query/Row.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/Value.php';
-require_once 'PHPCR/RepositoryException.php';
-require_once 'PHPCR/ItemNotFoundException.php';
-
-
-/**
- * A row in the query result table.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- * @subpackage query
- */
-interface Row
-{
-    /**
-     * Returns an array of all the values in the same order as the property names
-     * (column names) returned by {@link QueryResult#getPropertyNames()}.
-     *
-     * @return a <code>Value</code> array.
-     * @throws RepositoryException if an error occurs
-     */
-    public function getValues();
-
-    /**
-     * Returns the value of the indicated  property in this <code>Row</code>.
-     * <p/>
-     * If <code>propertyName</code> is not among the column names of the query result
-     * table, an <code>ItemNotFoundException</code> is thrown.
-     *
-     * @return a <code>Value</code>
-     * @throws ItemNotFoundException if <code>propertyName</code> s not among the
-     * column names of the query result table
-     * @throws RepositoryException if anopther error occurs.
-     */
-    public function getValue( $propertyName );
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/query/RowIterator.php b/contrib/phpcr/PHPCR/query/RowIterator.php
deleted file mode 100644
index 134a8f7..0000000
--- a/contrib/phpcr/PHPCR/query/RowIterator.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/RangeIterator.php';
-require_once 'PHPCR/query/Row.php';
-require_once 'PHPCR/NoSuchElementException.php';
-
-
-
-/**
- * @package phpcr
- * @subpackage query
- */
-interface RowIterator extends RangeIterator
-{
-    /**
-     * Returns the next <code>Row</code> in the iteration.
-     *
-     * @return the next <code>Row</code> in the iteration.
-     * @throws NoSuchElementException if iteration has no more <code>Row</code>s.
-     */
-    public function nextRow();
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/util/ISO8601.php b/contrib/phpcr/PHPCR/util/ISO8601.php
deleted file mode 100644
index 8fbf013..0000000
--- a/contrib/phpcr/PHPCR/util/ISO8601.php
+++ /dev/null
@@ -1,68 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-/**
- * The <code>ISO8601</code> utility class provides helper methods
- * to deal with date/time formatting using a specific ISO8601-compliant
- * format (see <a href="http://www.w3.org/TR/NOTE-datetime">ISO 8601</a>).
- * <p/>
- * Currently we only support the format <code>yyyy-mm-ddThh:mm:ss</code>,
- * which includes the complete date plus hours, minutes, seconds and a decimal
- * fraction of a second. Currently there is no timezone support
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @todo Timezone support
- * @package phpcr
- * @subpackage util
- */
-final class ISO8601
-{
-    /**
-     * Parses a ISO8601-compliant date/time string.
-     *
-     * @param  text the date/time string to be parsed
-     * @return <code>date</code>, or <code>null</code> if the input could
-     *         not be parsed
-     * @return mixed date or false if an parsing error occured
-     * @static
-     */
-    public static function parse( $text ) {
-        $year   = substr( $iso,  0, 4 );
-        $month  = substr( $iso,  4, 2 );
-        $day    = substr( $iso,  6, 2 );
-        $hour   = substr( $iso,  9, 2 );
-        $minute = substr( $iso, 12, 2 );
-        $second = substr( $iso, 15, 2 );
-
-        // correctly parsed? if not, return false
-        return $year . $month . $day . 'T' . $hour . ':' . $minute . ':' . $second;
-    }
-
-    /**
-     * Returns ISO formatted date
-     *
-     * @access public
-     */
-    public function format( $val ) {
-        // TODO
-    }
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/util/TraversingItemVisitor.php b/contrib/phpcr/PHPCR/util/TraversingItemVisitor.php
deleted file mode 100644
index 844ad5b..0000000
--- a/contrib/phpcr/PHPCR/util/TraversingItemVisitor.php
+++ /dev/null
@@ -1,201 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/ItemVisitor.php';
-require_once 'PHPCR/Property.php';
-require_once 'PHPCR/RepositoryException.php';
-require_once 'PHPCR/Node.php';
-
-
-/**
- * An implementaion of <code>ItemVisitor</code>.
- * <p/>
- * <b>Level 1 and 2</b>
- * <p/>
- * <code>TraversingItemVisitor</code> is an abstract utility class
- * which allows to easily traverse an <code>Item</code> hierarchy.
- * <p/>
- * <p><code>TraversingItemVisitor</code> makes use of the Visitor Pattern
- * as described in the book 'Design Patterns' by the Gang Of Four
- * (Gamma et al.).
- * <p/>
- * <p>Tree traversal is done observing the left-to-right order of
- * child <code>Item</code>s if such an order is supported and exists.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- * @subpackage util
- */
-abstract class TraversingItemVisitor implements ItemVisitor
-{
-    /**$currentQueue
-     * indicates if traversal should be done in a breadth-first
-     * manner rather than depth-first (which is the default)
-     *
-     * @var bool
-     */
-    protected $breadthFirst = false;
-
-    /**
-     * the 0-based level up to which the hierarchy should be traversed
-     * (if it's -1, the hierarchy will be traversed until there are no
-     * more children of the current item)
-     *
-     * @var int
-     */
-    protected $maxLevel = -1;
-
-    /**
-     * queues used to implement breadth-first traversal
-     *
-     * @var array
-     */
-    private $currentQueue;
-    private $nextQueue;
-
-    /**
-     * used to track hierarchy level of item currently being processed
-     *
-     * @var int
-     */
-    private $currentLevel;
-
-
-    /**
-     * Constructs a new instance of this class.
-     *
-     * @param breadthFirst if <code>breadthFirst</code> is true then traversal
-     *                     is done in a breadth-first manner; otherwise it is done in a
-     *                     depth-first manner (which is the default behaviour).
-     */
-    public function __construct( $breadthFirst = false, $maxLevel = -1 ) {
-        $this->breadthFirst = $breadthFirst;
-
-        if ( $this->breadthFirst === true ) {
-            $this->currentQueue = array();
-            $this->nextQueue    = array();
-        }
-
-        $this->currentLevel = 0;
-        $this->maxLevel = $maxLevel;
-    }
-
-
-    /**
-     * Implement this method to add behaviour performed before a
-     * <code>Property</code> or <code>Node</code> is visited.
-     *
-     * @param  entry that is accepting this visitor.
-     * @param  level    hierarchy level of this property (the root node starts at level 0)
-     * @throws RepositoryException if an error occurrs
-     */
-    protected abstract function entering( $entry, $level );
-
-    /**
-     * Implement this method to add behaviour performed after a
-     * <code>Property</code> is visited.
-     *
-     * @param  entry the <code>Property</code> that is accepting this visitor.
-     * @param  level    hierarchy level of this property (the root node starts at level 0)
-     * @throws RepositoryException if an error occurrs
-     */
-    protected abstract function leaving( $entry, $level );
-
-    /**
-     * Called when the Visitor is passed to a <code>Node</code>.
-     * <p/>
-     * It calls <code>TraversingItemVisitor.entering(Node, int)</code> followed by
-     * <code>TraversingItemVisitor.leaving(Node, int)</code>. Implement these abstract methods to
-     * specify behaviour on 'arrival at' and 'after leaving' the <code>Node</code>.
-     * <p/>
-     * If this method throws, the visiting process is aborted.
-     *
-     * @param Either Node or Property that is accepting this visitor.
-     * @throws RepositoryException if an error occurrs
-     */
-    public function visit( $entry ) {
-        if ( $entry instanceof Property ) {
-            $this->entering( $entry, $this->currentLevel );
-            $this->leaving( $entry, $this->currentLevel );
-        } else {
-            try {
-                if ( !$this->breadthFirst ) {
-                    // depth-first traversal
-                    $this->entering( $entry, $this->currentLevel );
-
-                    if ( $this->maxLevel == -1 || $this->currentLevel < $this->maxLevel ) {
-                        $this->currentLevel++;
-
-                        $nodeIter = $entry->getNodes();
-
-                        while ( $nodeIter->hasNext() ) {
-                            $nodeIter->nextNode()->accept( $this );
-                        }
-
-                        $propIter = $entry->getProperties();
-
-                        while ( $propIter->hasNext()) {
-                            $propIter->nextProperty()->accept( $this );
-                        }
-
-                        $currentLevel--;
-                    }
-
-                    $this->leaving( $entry, $this->currentLevel );
-                } else {
-                    // breadth-first traversal
-                    $this->entering( $entry, $this->currentLevel );
-                    $this->leaving( $entry, $this->currentLevel );
-
-                    if ( $this->maxLevel == -1 || $this->currentLevel < $this->maxLevel ) {
-                        $nodeIter = $entry->getNodes();
-
-                        while ( $nodeIter->hasNext() ) {
-                            $this->nextQueue[] = $nodeIter->nextNode();
-                        }
-
-                        $propIter = $entry->getProperties();
-
-                        while ( $propIter->hasNext() ) {
-                            $this->nextQueue[] = $propIter->nextProperty();
-                        }
-                    }
-
-                    while ( !empty( $this->currentQueue ) || !empty( $this->nextQueue ) ) {
-                        if ( empty( $this->currentQueue ) ) {
-                            $this->currentLevel++;
-                            $this->currentQueue = $this->nextQueue;
-                            $this->nextQueue = array();
-                        }
-
-                        $this->currentQueue = array_shift( $this->currentQueue );
-                    }
-
-                    $this->currentLevel = 0;
-               }
-            } catch ( RepositoryException $re ) {
-                $this->currentLevel = 0;
-                throw $re;
-            }
-        }
-    }
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/version/OnParentVersionAction.php b/contrib/phpcr/PHPCR/version/OnParentVersionAction.php
deleted file mode 100644
index 3edd2ff..0000000
--- a/contrib/phpcr/PHPCR/version/OnParentVersionAction.php
+++ /dev/null
@@ -1,279 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/IllegalArgumentException.php';
-
-
-/**
- * The possible actions specified by the <code>onParentVersion</code> attribute
- * in a property definition within a node type definition.
- * <p>
- * <b>Level 2 only</b>
- * <p>
- * This interface defines the following actions:
- * <UL>
- *    <LI>COPY
- *    <LI>VERSION
- *    <LI>INITIALIZE
- *    <LI>COMPUTE
- *    <LI>IGNORE
- *    <LI>ABORT
- * </UL>
- * <p>
- * Every item (node or property) in the repository has a status indicator that
- * governs what happens to that item when its parent node is versioned. This
- * status is defined by the onParentVersion attribute in the PropertyDef or
- * NodeDef that applies to the item in question. This PropertyDef or NodeDef is
- * part of the NodeType of the parent node of the item in question.
- * <p>
- * For example, let N be a versionable node in workspace W of repository R.
- * Furthermore, let N be of node type T, where T is a sub-type of
- * nt:versionable and T allows N to have one property called P and one child
- * node called C.
- * <p>
- * What happens to P and C when N is versioned depends on their respective
- * OnParentVersion attribute as defined in the PropertyDef for P and the
- * NodeDef for C, found in the definition of node type T.
- * <p>
- * The possible values for the OnParentVersion attribute are: COPY, VERSION,
- * INITIALIZE, COMPUTE, NOTHING and FORBIDDEN.
- * <p>
- * The sections below describe, for each possible value of the OnParentVersion
- * attribute, what happens to C and P when,
- * <ul>
- * <li>N.checkin() is performed, creating the new version VN and adding to the
- * version history.
- * <li>N.restore(VN)  is performed, restoring the version VN.
- * </ul>
- * <p>
- * COPY
- * <p>
- * Child Node
- * <p>
- * On checkin of N, C and all its descendent items, down to the leaves of the
- * subtree, will be copied to the version storage as a child subtree of VN. The
- * copy of C and its subtree will not have its own version history but will be
- * part of the state preserved in VN. C itself need not be versionable.
- * <p>
- * On restore of VN, the copy of C and its subtree stored will be restored as
- * well, replacing the current C and its subtree in the workspace.
- * <p>
- * Property
- * <p>
- * On checkin of N, P will be copied to the version storage as a child of VN.
- * This copy of P is part of the state preserved in VN.
- * <p>
- * On restore of VN, the copy of P stored as its child will be restored as
- * well, replacing the current P in the workspace.
- * <p>
- * VERSION
- * <p>
- * Child Node
- * <p>
- * On checkin of N, the node VN will get a child reference to the version
- * history of C (not to C or any actual version of C). In practice, this means
- * that the root version of C's version history becomes the child of VN
- * because, as mentioned before, the root version is used as the referent when
- * a reference to the version history as a whole is required. This also
- * requires that C itself be versionable (otherwise it would not have a version
- * history). If C is not versionable then behavior of IGNORE applies on checkin
- * (see below).
- * <p>
- * On restore of VN, if the workspace currently has an already existing node
- * corresponding to C's version history, then that instance of C becomes the
- * child of the restored N. If the workspace does not have an instance of C
- * then one is restored from C's version history. The workspace in which the
- * restore is being performed will determine which particular version of C will
- * be restored. This determination depends on the configuration of the
- * workspace and is outside the scope of this specification.
- * <p>
- * Property
- * <p>
- * In the case of properties, an OnParentVersion attribute of VERSION has the
- * same effect as COPY.
- * <p>
- * INITIALIZE
- * <p>
- * Child Node
- * <p>
- * On checkin of N, a new node C will be created and placed in version storage
- * as a child of VN. This new C will be initialized just as it would be if
- * created normally in a workspace. No state information of the current C in
- * the workspace is preserved. The new C will not have its own version history
- * but will be part of the state preserved in VN. C itself need not be
- * versionable.
- * <p>
- * On restore of VN, the C stored as its child will be restored as well,
- * replacing the current C in the workspace.
- * <p>
- * Property
- * <p>
- * On checkin of N, a new P will be created and placed in version storage as a
- * child of VN. The new P will be initialized just as it would be if created
- * normally in a workspace. The new P is part of the state preserved in VN.
- * <p>
- * On restore of VN, the P stored as its child will be restored as well,
- * replacing the current P in the workspace.
- * <p>
- * COMPUTE
- * <p>
- * Child Node
- * <p>
- * On checkin of N, a new node C will be created and placed in version storage
- * as a child of VN. This new C will be initialized according to some
- * configuration-specific procedure beyond the scope of this specification. The
- * new C will not have its own version history but will be part of the state
- * preserved in VN. C itself need not be versionable.
- * <p>
- * On restore of VN, the C stored as its child will be restored as well,
- * replacing the current C in the workspace.
- * <p>
- * Property
- * <p>
- * On checkin of N, a new P will be created and placed in version storage as a
- * child of VN. The new P will be initialized according to some
- * configuration-specific procedure beyond the scope of this specification. The
- * new P is part of the state preserved in VN.
- * <p>
- * On restore of VN, the P stored as its child will be restored as well,
- * replacing the current P in the workspace.
- * <p>
- * IGNORE
- * <p>
- * Child Node
- * <p>
- * On checkin of N, no state information about C will be stored in VN.
- * <p>
- * On restore of VN, the child node C of the current N will remain and not be
- * removed, despite not being included in the state recorded in VN, since its
- * IGNORE status tells the system to leave it alone.
- * <p>
- * Property
- * <p>
- * On checkin of N, no state information about P will be stored in VN.
- * <p>
- * On restore of VN, the property P of the current N will remain and not be
- * removed, despite not being included in the state of recorded in VN, since
- * its IGNORE status tells the system to leave it alone.
- * <p>
- * ABORT
- * <p>
- * Child Node or Property
- * <p>
- * On checkin of N an exception will be thrown. Having a child node or property
- * with an OnParentVersion attribute of ABORT prevents the parent node from
- * being checked-in.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- * @subpackage version
- */
-final class OnParentVersionAction
-{
-    /**
-     * The action constants.
-     */
-    const COPY       = 1;
-    const VERSION    = 2;
-    const INITIALIZE = 3;
-    const COMPUTE    = 4;
-    const IGNORE     = 5;
-    const ABORT      = 6;
-
-    /**
-     * The names of the defined on-version actions,
-     * as used in serialization.
-     */
-    const ACTIONNAME_COPY       = "COPY";
-    const ACTIONNAME_VERSION    = "VERSION";
-    const ACTIONNAME_INITIALIZE = "INITIALIZE";
-    const ACTIONNAME_COMPUTE    = "COMPUTE";
-    const ACTIONNAME_IGNORE     = "IGNORE";
-    const ACTIONNAME_ABORT      = "ABORT";
-
-
-    /**
-     * Private constructor to prevent instantiation
-     */
-    private function __construct() {
-    }
-
-
-    /**
-     * Returns the name of the specified <code>action</code>,
-     * as used in serialization.
-     * @param  int    $action the on-version action
-     * @return string the name of the specified <code>action</code>
-     * @throws IllegalArgumentException if <code>action</code>
-     * is not a valid on-version action.
-     */
-    public static function nameFromValue( $action ) {
-        switch ( $action ) {
-            case self::COPY:
-               return self::ACTIONNAME_COPY;
-
-            case self::VERSION:
-                return self::ACTIONNAME_VERSION;
-
-            case self::INITIALIZE:
-                return self::ACTIONNAME_INITIALIZE;
-
-            case self::COMPUTE:
-                return self::ACTIONNAME_COMPUTE;
-
-            case self::IGNORE:
-                return self::ACTIONNAME_IGNORE;
-
-            case self::ABORT:
-                return self::ACTIONNAME_ABORT;
-
-            default:
-               throw new IllegalArgumentException("unknown on-version action: " + $action);
-        }
-    }
-
-    /**
-     * Returns the numeric constant value of the on-version action with the
-     * specified name.
-     * @param  string $name the name of the on-version action
-     * @return int    the numeric constant value
-     * @throws IllegalArgumentException if <code>name</code>
-     * is not a valid on-version action name.
-     */
-    public static function valueFromName( $name ) {
-        if ( $name == self::ACTIONNAME_COPY ) {
-            return self::COPY;
-        } else if ( $name == self::ACTIONNAME_VERSION ) {
-            return self::VERSION;
-        } else if ( $name == self::ACTIONNAME_INITIALIZE ) {
-            return self::INITIALIZE;
-        } else if ( $name == self::ACTIONNAME_COMPUTE ) {
-            return self::COMPUTE;
-        } else if ( $name == self::ACTIONNAME_IGNORE ) {
-            return self::IGNORE;
-        } else if ( $name == self::ACTIONNAME_ABORT ) {
-            return self::ABORT;
-        } else {
-            throw new IllegalArgumentException( "unknown on-version action: " + $name );
-        }
-    }
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/version/Version.php b/contrib/phpcr/PHPCR/version/Version.php
deleted file mode 100644
index fe58f4e..0000000
--- a/contrib/phpcr/PHPCR/version/Version.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/Node.php';
-require_once 'PHPCR/version/VersionHistory.php';
-require_once 'PHPCR/RepositoryException.php';
-
-
-/**
- * A <code>Version</code> object wraps an <code>nt:version</code> node. It
- * provides convenient access to version information.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- * @subpackage version
- */
-interface Version extends Node
-{
-    /**
-     * Returns the <code>VersionHistory</code> that contains this <code>Version</code>.
-     * @return the <code>VersionHistory</code> that contains this <code>Version</code>.
-     * @throws RepositoryException if an error occurs.
-     */
-     public function getContainingHistory();
-
-    /**
-     * Returns the date this version was created. This corresponds to the value
-     * of the <code>jcr:created</code> property in the <code>nt:version</code>
-     * node that represents this version.
-     *
-     * @return date
-     * @throws RepositoryException if an error occurs.
-     */
-    public function getCreated();
-
-    /**
-     * Returns the successor versions of this version. This corresponds to
-     * returning all the <code>nt:version</code> nodes referenced by the
-     * <code>jcr:successors</code> multi-value property in the
-     * <code>nt:version</code> node that represents this version.
-     *
-     * @return a <code>Version</code> array.
-     * @throws RepositoryException if an error occurs.
-     */
-    public function getSuccessors();
-
-    /**
-     * Returns the predecessor versions of this version. This corresponds to
-     * returning all the <code>nt:version</code> nodes whose
-     * <code>jcr:successors</code> property includes a reference to the
-     * <code>nt:version</code> node that represents this version.
-     *
-     * @return a <code>Version</code> array.
-     * @throws RepositoryException if an error occurs.
-     */
-    public function getPredecessors();
-}
-
-?>
diff --git a/contrib/phpcr/PHPCR/version/VersionException.php b/contrib/phpcr/PHPCR/version/VersionException.php
deleted file mode 100644
index 0134c87..0000000
--- a/contrib/phpcr/PHPCR/version/VersionException.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/RepositoryException.php';
-
-
-/**
- * Exception thrown by Version.addSuccessor if an invalid
- * version graph operation is attempted.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- * @subpackage version
- */
-class VersionException extends RepositoryException
-{
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/version/VersionHistory.php b/contrib/phpcr/PHPCR/version/VersionHistory.php
deleted file mode 100644
index 7809d54..0000000
--- a/contrib/phpcr/PHPCR/version/VersionHistory.php
+++ /dev/null
@@ -1,212 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/RepositoryException.php';
-require_once 'PHPCR/version/Version.php';
-require_once 'PHPCR/version/VersionIterator.php';
-require_once 'PHPCR/ReferentialIntegrityException.php';
-require_once 'PHPCR/AccessDeniedException.php';
-require_once 'PHPCR/UnsupportedRepositoryOperationException.php';
-require_once 'PHPCR/version/VersionException.php';
-
-
-/**
- * A <code>VersionHistory</code> object wraps an <code>nt:versionHistory</code>
- * node. It provides convenient access to version history information.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- * @subpackage version
- */
-interface VersionHistory
-{
-    /**
-     * Returns the UUID of the versionable node for which this is the version history.
-     *
-     * @return the UUID of the versionable node for which this is the version history.
-     * @throws RepositoryException if an error occurs.
-     */
-    public function getVersionableUUID();
-
-    /**
-     * Returns the root version of this version history.
-     *
-     * @return a <code>Version</code> object.
-     * @throws RepositoryException if an error occurs.
-     */
-    public function getRootVersion();
-
-    /**
-     * Returns an iterator over all the versions within this version history
-     * The order of the returned objects will not necessarily correspond to the
-     * order of versions in terms of the successor relation. To traverse the
-     * version graph one must traverse the <code>jcr:successor REFERENCE</code>
-     * properties starting with the root version. A version history will always
-     * have at least one version, the root version. Therefore, this method will
-     * always return an iterator of at least size 1.
-     *
-     * @return a <code>VersionIterator</code> object.
-     * @throws RepositoryException if an error occurs.
-     */
-    public function getAllVersions();
-
-    /**
-     * Retrieves a particular version from this version history by version name.
-     * <p/>
-     * Throws a <code>VersionException</code> if the specified version is not in
-     * this version history.
-     *
-     * @param versionName a version name
-     * @return a <code>Version</code> object.
-     * @throws VersionException if the specified version is not in this version history.
-     * @throws RepositoryException if an error occurs.
-     */
-    public function getVersion( $versionName );
-
-    /**
-     * Retrieves a particular version from this version history by version label.
-     * <p/>
-     * Throws a <code>VersionException</code> if the specified <code>label</code> is not in
-     * this version history.
-     *
-     * @param label a version label
-     * @return a <code>Version</code> object.
-     * @throws VersionException if the specified <code>label</code> is not in this version history.
-     * @throws RepositoryException if an error occurs.
-     */
-    public function getVersionByLabel( $label );
-
-    /**
-     * Adds the specified label to the specified version. This corresponds to adding a
-     * value to the <code>jcr:versionLabels</code> multi-value property of the
-     * <code>nt:version</code> node that represents the specified version.
-     * <p/>
-     * Note that this change is made immediately; there is no need to call <code>save</code>.
-     * In fact, since the the version storage is read-only with respect to normal repository
-     * methods, <code>save</code> does not even function in this context.
-     * <p/>
-     * Within a particular version history, a given label may appear a maximum of once.
-     * If the specified label is already assigned to a version in this history and
-     * <code>moveLabel</code> is <code>true</code> then the label is removed from its
-     * current location and added to the version with the specified <code>versionName</code>.
-     * If <code>moveLabel</code> is <code>false</code>, then an attempt to add a label that
-     * already exists in this version history will throw a <code>VersionException</code>.
-     *
-     * @param versionName the name of the version to which the label is to be added.
-     * @param label the label to be added.
-     * @param moveLabel if <code>true</code>, then if <code>label</code> is already assigned to a version in
-     * this version history, it is moved to the new version specified; if <code>false</code>, then attempting
-     * to assign an already used label will throw a <code>VersionException</code>.
-     *
-     * @throws VersionException if an attempt is made to add an existing label to a version history
-     * and <code>moveLabel</code> is <code>false</code> or if the specifed version does not exisit in
-     * this version history.
-     * @throws RepositoryException if another error occurs.
-     */
-    public function addVersionLabel( $versionName, $label, $moveLabel );
-
-    /**
-     * Removes the specified label from among the labels of this version history.
-     * This corresponds to removing a property from the <code>jcr:versionLabels</code>
-     * child node of the <code>nt:versionHistory</code> node that represents this version
-     * history.
-     * <p/>
-     * Note that this change is made immediately; there is no need to call <code>save</code>.
-     * In fact, since the the version storage is read-only with respect to normal repository
-     * methods, <code>save</code> does not even function in this context.
-     * <p/>
-     * If a label is specified that does not exist in this version history,
-     * a <code>VersionException</code> is thrown.
-     *
-     * @param label a version label
-     * @throws VersionException if the name labvel does not exist in this version history.
-     * @throws RepositoryException if another error occurs.
-     */
-    public function removeVersionLabel( $label );
-
-    /**
-     * Returns true if the given version has the given <code>label</code>.
-     * @param version a Version object
-     * @param label a version label
-     * @return a <code>boolean</code>.
-     * @throws VersionException if the specified <code>version</code> is not of this version history.
-     * @throws RepositoryException if another error occurs.
-     *
-     */
-    public function hasVersionLabel( Version $version, $label );
-
-    /**
-     * Returns all version labels of the given <code>version</code> - empty array if none.
-     * Throws a <code>VersionException</code> if the specified <code>version</code> is not
-     * in this version history.
-     * @param version
-     * @return a <code>String</code> array containing all the labels of the given version
-     * @throws VersionException if the specified <code>version</code> is not in this version history.
-     * @throws RepositoryException if another error occurs.
-     */
-    public function getVersionLabels( Version $version );
-
-    /**
-     * Removes the named version from this version history and automatically
-     * repairs the version graph. If the version to be removed is <code>V</code>, <code>V</code>'s
-     * predecessor set is <code>P</code> and <code>V</code>'s successor set is <code>S</code>, then
-     * the version graph is repaired s follows:
-     * <ul>
-     * <li>For each member of <code>P</code>, remove the reference to <code>V</code> from its
-     * successor list and add references to each member of <code>S</code>.
-     * <li>For each member of <code>S</code>, remove the reference to <code>V</code> from its
-     * predecessor list and add references to each member of <code>P</code>.
-     * </ul>
-     * Note that this change is made immediately; there is no need to call <code>save</code>.
-     * In fact, since the the version storage is read-only with respect to normal repository
-     * methods, <code>save</code> does not even function in this context.
-     * <p/>
-     * A <code>ReferentialIntegrityException</code> will be thrown if the specified version is
-     * currently the target of a <code>REFERENCE</code> property elsewhere in the repository
-     * (not just in this workspace) and the current <code>Session</code> has read access to
-     * that <code>REFERENCE</code> property.
-     * <p/>
-     * An <code>AccessDeniedException</code> will be thrown if the current <code>Session</code>
-     * does not have permission to remove the specified version or if the specified version is
-     * currently the target of a <code>REFERENCE</code> property elsewhere in the repository
-     * (not just in this workspace) and the current <code>Session</code> does not have read
-     * access to that <code>REFERENCE</code> property.
-     * <p/>
-     * Throws an <code>UnsupportedRepositoryOperationException</code> if this operation is
-     * not supported by the implementation.
-     * <p/>
-     * Throws a <code>VersionException</code> if the named version is not in this <code>VersionHistory</code>.
-     *
-     * @param versionName the name of a version in this version history.
-     * @throws ReferentialIntegrityException if the specified version is currently the target of a
-     * <code>REFERENCE</code> property elsewhere in the repository (not necessarily in this workspace)
-     * and the current <code>Session</code> has read access to that <code>REFERENCE</code> property.
-     * @throws AccessDeniedException if the current Session does not have permission to remove the
-     * specified version or if the specified version is currently the target of a <code>REFERENCE</code>
-     * property elsewhere in the repository (not just in this workspace) and the current <code>Session</code>
-     * does not have read access to that <code>REFERENCE</code> property.
-     * @throws UnsupportedRepositoryOperationException if this operation is not supported by the implementation.
-     * @throws VersionException if the named version is not in this version history.
-     * @throws RepositoryException if another error occurs.
-     */
-    public function removeVersion( $versionName );
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/PHPCR/version/VersionIterator.php b/contrib/phpcr/PHPCR/version/VersionIterator.php
deleted file mode 100644
index 7a6b7c3..0000000
--- a/contrib/phpcr/PHPCR/version/VersionIterator.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-require_once 'PHPCR/RangeIterator.php';
-require_once 'PHPCR/version/Version.php';
-require_once 'PHPCR/NoSuchElementException.php';
-
-
-/**
- * Allows easy iteration through a list of <code>Version</code> objects
- * with <code>nextNode</code> as well as a <code>skip</code> method inherited from
- * <code>RangeIterator</code>.
- *
- * @author Markus Nix <mnix@mayflower.de>
- * @package phpcr
- * @subpackage version
- */
-interface VersionIterator extends RangeIterator
-{
-     /**
-      * Returns the next <code>Version</code> in the iteration.
-      *
-      * @return the next <code>Version</code> in the iteration.
-      * @throws NoSuchElementException if iteration has no more <code>Version</code>s.
-     */
-    public function nextVersion();
-}
-
-?>
\ No newline at end of file
diff --git a/contrib/phpcr/package.xml b/contrib/phpcr/package.xml
deleted file mode 100644
index 0da59fc..0000000
--- a/contrib/phpcr/package.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE package SYSTEM "http://pear.php.net/dtd/package-1.0">
-<package version="1.0">
-  <name>PHPCR</name>
-  <summary>Port of JSR-170 Specification to PHP</summary>
-  <description>
-    The JSR-170 API defines how an application and a content
-    repository interact with respect to a number of content services.
-    For example the versioning facilities of a content repository are
-    clearly defined, so an application knows how to browse the version
-    history, check in and check out content items, or update and merge
-    content in a standard fashion. This is the PHP pot of the API.
-  </description>
-  <maintainers>
-    <maintainer>
-      <user>mnix</user>
-      <name>Markus Nix</name>
-      <email>mnix@docuverse.de</email>
-      <role>lead</role>
-    </maintainer>
-  </maintainers>
-  <release>
-    <version>0.2</version>
-    <date>2005-06-15</date>
-    <license>Apache License</license>
-    <state>alpha</state>
-    <notes>Changes reflect most of the latest changes in the JCR spec.</notes>
-    <deps>
-      <dep type="php" rel="ge" version="5.0.0" optional="no"/>
-    </deps>
-    <filelist>
-      <dir name="PHPCR" role="php">
-        <file>AccessDeniedException.php</file>
-        <file>Credentials.php</file>
-        <file>IllegalArgumentException.php</file>
-        <file>IllegalStateException.php</file>
-        <file>InvalidItemStateException.php</file>
-        <file>InvalidSerializedDataException.php</file>
-        <file>IOException.php</file>
-        <file>Item.php</file>
-        <file>ItemExistsException.php</file>
-        <file>ItemNotFoundException.php</file>
-        <file>ItemVisitor.php</file>
-        <file>LoginException.php</file>
-        <file>MergeException.php</file>
-        <file>NamespaceException.php</file>
-        <file>NamespaceRegistry.php</file>
-        <file>Node.php</file>
-        <file>NodeIterator.php</file>
-        <file>NoSuchElementException.php</file>
-        <file>NoSuchWorkspaceException.php</file>
-        <file>NumberFormatException.php</file>
-        <file>PathNotFoundException.php</file>
-        <file>Property.php</file>
-        <file>PropertyIterator.php</file>
-        <file>PropertyType.php</file>
-        <file>RangeIterator.php</file>
-        <file>ReferentialIntegrityException.php</file>
-        <file>Repository.php</file>
-        <file>RepositoryException.php</file>
-        <file>SAXException.php</file>
-        <file>Session.php</file>
-        <file>SimpleCredentials.php</file>
-        <file>UnsupportedRepositoryOperationException.php</file>
-        <file>Value.php</file>
-        <file>ValueFormatException.php</file>
-        <file>Workspace.php</file>
-        <file>lock/Lock.php</file>
-        <file>lock/LockException.php</file>
-        <file>nodetype/ConstraintViolationException.php</file>
-        <file>nodetype/NodeType.php</file>
-        <file>nodetype/NodeTypeIterator.php</file>
-        <file>nodetype/NodeTypeManager.php</file>
-        <file>nodetype/NoSuchNodeTypeException.php</file>
-        <file>nodetype/ItemDefinition.php</file>
-        <file>nodetype/NodeDefinition.php</file>
-        <file>nodetype/PropertyDefinition.php</file>
-        <file>observation/Event.php</file>
-        <file>observation/EventIterator.php</file>
-        <file>observation/EventListener.php</file>
-        <file>observation/EventListenerIterator.php</file>
-        <file>observation/ObservationManager.php</file>
-        <file>query/InvalidQueryException.php</file>
-        <file>query/Query.php</file>
-        <file>query/QueryManager.php</file>
-        <file>query/QueryResult.php</file>
-        <file>query/Row.php</file>
-        <file>query/RowIterator.php</file>
-        <file>util/ISO8601.php</file>
-        <file>util/TraversingItemVisitor.php</file>
-        <file>version/OnParentVersionAction.php</file>
-        <file>version/Version.php</file>
-        <file>version/VersionException.php</file>
-        <file>version/VersionHistory.php</file>
-        <file>version/VersionIterator.php</file>
-      </dir>
-    </filelist>
-  </release>
-  <changelog>
-    <release>
-      <version>0.1</version>
-      <date>2005-05-06</date>
-      <license>Apache License</license>
-      <state>alpha</state>
-    </release>
-  </changelog>
-</package>
diff --git a/contrib/tck-webapp/maven.xml b/contrib/tck-webapp/maven.xml
deleted file mode 100644
index 9efc360..0000000
--- a/contrib/tck-webapp/maven.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                       as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 
-        default="tck-war" 
-        xmlns:m="jelly:maven"
-        xmlns:ant="jelly:ant"
-        xmlns:j="jelly:core">
-
-    <goal name="tck-war">
-        <attainGoal name="jackrabbit-install" />
-        <attainGoal name="jar:jar" />
-        <attainGoal name="war:war" />
-    </goal>
-
-    <goal name="jackrabbit-install">
-    <!-- build the dependend sub project -->
-        <m:reactor 
-            basedir="../.."
-            includes="project.xml"
-            goals="multiproject:install"
-            banner="Building"
-            ignoreFailures="false"/>
-     </goal>
-
-     <!-- post goal for cleaning the subprojects -->
-     <postGoal name="clean">
-         <m:reactor 
-            basedir="${basedir}"
-            includes="../../project.xml"
-            goals="clean"
-            banner="Cleaning"
-            ignoreFailures="true"/>
-     </postGoal>
-
-     <postGoal name="war:webapp">
-         <ant:copy file="target/${pom.artifactId}-${pom.currentVersion}.jar" todir="target/tck-webapp/WEB-INF/lib" />
-         <ant:delete dir="target/tck-webapp/WEB-INF/classes/org" />
-     </postGoal>
-</project>
diff --git a/contrib/tck-webapp/project.properties b/contrib/tck-webapp/project.properties
deleted file mode 100644
index b2f4db6..0000000
--- a/contrib/tck-webapp/project.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-# ------------------------------------------------------------------------
-maven.repo.remote = http://www.ibiblio.org/maven/,http://www.day.com/maven/
-maven.test.skip = true
-
-# force to compile for java 1.4
-maven.compile.source=1.4
-maven.compile.target=1.4
diff --git a/contrib/tck-webapp/project.xml b/contrib/tck-webapp/project.xml
deleted file mode 100644
index 9940151..0000000
--- a/contrib/tck-webapp/project.xml
+++ /dev/null
@@ -1,181 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                       as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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>
-    <!-- ====================================================================== -->
-    <!-- P R O J E C T  D E S C R I P T I O N                                   -->
-    <!-- ====================================================================== -->
-    <id>tck-webapp</id>
-    <!-- <type>war</type> -->
-    <name>Day TCK web application</name>
-    <currentVersion>1.0</currentVersion>
-
-
-    <!-- ====================================================================== -->
-    <!-- D E P E N D E N C I E S                                                -->
-    <!-- ====================================================================== -->
-    <dependencies>
-
-        <!-- dependencies from jackrabbit that we want to bundle -->
-        <dependency>
-            <groupId>concurrent</groupId>
-            <artifactId>concurrent</artifactId>
-            <version>1.3.4</version>
-            <properties>
-                <war.bundle>true</war.bundle>
-            </properties>
-        </dependency>
-        <dependency>
-            <groupId>commons-collections</groupId>
-            <artifactId>commons-collections</artifactId>
-            <version>3.1</version>
-            <properties>
-                <war.bundle>true</war.bundle>
-            </properties>
-        </dependency>
-        <dependency>
-            <groupId>lucene</groupId>
-            <artifactId>lucene</artifactId>
-            <version>1.4.3</version>
-            <properties>
-                <war.bundle>true</war.bundle>
-            </properties>
-        </dependency>
-        <dependency>
-            <groupId>xerces</groupId>
-            <artifactId>xercesImpl</artifactId>
-            <version>2.6.2</version>
-            <properties>
-                <war.bundle>true</war.bundle>
-            </properties>
-        </dependency>
-
-        <!-- jcr -->    
-        <dependency>
-            <groupId>jsr170</groupId>
-            <artifactId>jcr</artifactId>
-            <version>1.0</version>
-        </dependency>
-        <!-- dependencies from jcr that we want to bundle -->
-        <dependency>
-            <groupId>org.apache.jackrabbit</groupId>
-            <artifactId>jackrabbit</artifactId>
-            <version>1.0-SNAPSHOT</version>
-            <properties>
-                <war.bundle>true</war.bundle>
-            </properties>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.jackrabbit</groupId>
-            <artifactId>jackrabbit-db</artifactId>
-            <version>1.0-SNAPSHOT</version>
-            <properties>
-                <war.bundle>true</war.bundle>
-            </properties>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.derby</groupId>
-            <artifactId>derby</artifactId>
-            <version>10.1.1.0</version>
-            <properties>
-                <war.bundle>true</war.bundle>
-            </properties>
-        </dependency>
-
-        <dependency>
-            <groupId>commons-logging</groupId>
-            <artifactId>commons-logging</artifactId>
-            <version>1.0</version>
-            <properties>
-                <war.bundle>true</war.bundle>
-            </properties>
-        </dependency>
-    <!-- -->
-
-    <!-- own dependencies -->    
-        <dependency>
-            <groupId>jdom</groupId>
-            <artifactId>jdom</artifactId>
-            <version>1.0</version>
-            <properties>
-                <war.bundle>true</war.bundle>
-            </properties>
-        </dependency>
-        <dependency>
-            <groupId>log4j</groupId>
-            <artifactId>log4j</artifactId>
-            <version>1.2.8</version>
-            <properties>
-                <war.bundle>true</war.bundle>
-            </properties>
-        </dependency>
-        <dependency>
-            <groupId>commons-fileupload</groupId>
-            <artifactId>commons-fileupload</artifactId>
-            <version>1.0</version>
-            <properties>
-                <war.bundle>true</war.bundle>
-            </properties>
-        </dependency>
-    <!-- -->
-    
-    <!-- own dependencies (build only) -->
-        <dependency>
-            <groupId>servletapi</groupId>
-            <artifactId>servletapi</artifactId>
-            <version>2.3</version>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>3.8.1</version>
-            <properties>
-                <war.bundle>true</war.bundle>
-            </properties>
-        </dependency>
-    
-     </dependencies>
-
-    <!-- ====================================================================== -->
-    <!-- B U I L D  D E S C R I P T I O N                                       -->
-    <!-- ====================================================================== -->
-    <build>
-        <sourceDirectory>${basedir}/src/java</sourceDirectory>
-        <sourceModifications>
-            <sourceModification>
-                <className>fakeClass</className>
-                <excludes>
-                  <exclude>**/test/observation/*.java</exclude>
-                  <exclude>**/test/search/*.java</exclude>
-                </excludes>
-            </sourceModification>
-        </sourceModifications>
-        <resources>
-            <resource>
-                <directory>src/java</directory>
-                <includes>
-                    <include>**/api/**/*.java</include>
-                    <include>**/*.xml</include>
-                    <include>**/*.txt</include>
-                    <include>**/*.xsd</include>
-                    <include>**/*.properties</include>
-                    <include>**/*.dtd</include>
-                </includes>
-            </resource>
-        </resources>
-    </build>
-</project>
diff --git a/contrib/tck-webapp/src/java/org/apache/jackrabbit/tck/TckHelper.java b/contrib/tck-webapp/src/java/org/apache/jackrabbit/tck/TckHelper.java
deleted file mode 100644
index 3336084..0000000
--- a/contrib/tck-webapp/src/java/org/apache/jackrabbit/tck/TckHelper.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.tck;
-
-/**
- * Just a helper class
- */
-public class TckHelper {
-    public static String getStatus(int state) {
-    String status = "UNDEFINED";
-
-    switch (state) {
-        case TestResult.SUCCESS:
-            status = "SUCCESS";
-            break;
-        case TestResult.ERROR:
-            status = "ERROR";
-            break;
-        case TestResult.FAILURE:
-            status = "FAILURE";
-    }
-    return status;
-    }
-}
diff --git a/contrib/tck-webapp/src/java/org/apache/jackrabbit/tck/TckTestRunner.java b/contrib/tck-webapp/src/java/org/apache/jackrabbit/tck/TckTestRunner.java
deleted file mode 100644
index 66054f5..0000000
--- a/contrib/tck-webapp/src/java/org/apache/jackrabbit/tck/TckTestRunner.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.tck;
-
-import junit.framework.Test;
-import junit.runner.BaseTestRunner;
-import javax.servlet.jsp.JspWriter;
-import java.io.IOException;
-import java.io.Writer;
-import java.util.Map;
-import java.util.HashMap;
-import java.text.MessageFormat;
-
-import org.apache.jackrabbit.test.NotExecutableException;
-
-/**
- * The <code>TckTestRunner</code> class implements the <code>TestListener</code> interface.
- */
-public class TckTestRunner extends BaseTestRunner {
-    /** Test state */
-    int state;
-
-    /** The test */
-    Test test;
-
-    /** the writer */
-    Writer writer;
-
-    /*** contains all results from all tests */
-    Map results;
-
-    /** test start time */
-    long startTime;
-
-    /** time that a test took */
-    long testTime;
-
-    /** Result of a test */
-    TestResult result;
-
-    /** String containing defined log output */
-    private String logString;
-
-    /** String containing defined interaction output */
-    private String interactionString;
-
-    /** current testclass */
-    private String currentTestClass;
-
-    /** new test identifier string */
-    private String newTestString;
-
-    /** test counter */
-    private int tCount = 0;
-
-    /**
-     * The constructor inits the result map and sets the writer
-     *
-     * @param writer
-     */
-    public TckTestRunner(JspWriter writer) {
-        this.writer = writer;
-        results = new HashMap();
-        currentTestClass = "";
-    }
-
-    /**
-     * This method is called everytime a test is executed.
-     * The result object is "reset". the state is "reset" to its default value.
-     * The startTime is set.
-     *
-     * @param test The <code>Test</code> which will be executed
-     */
-    public synchronized void startTest(Test test) {
-        result = new TestResult();
-        state = TestResult.SUCCESS;
-        startTime = System.currentTimeMillis();
-        tCount++;
-    }
-
-    /**
-     * The test could not be started. This should not happen...
-     *
-     * @param message error message
-     */
-    protected void runFailed(String message) {
-        String msg = "RUN FAILED:" + message;
-        write(msg, false);
-    }
-
-    /**
-     * This method is called everytime a test is finished. it does not matter if the
-     * test was successful or not. The <code>TestResult</code> is added to the results list.
-     *
-     * @param test the current <code>Test</code>
-     */
-    public synchronized void endTest(Test test) {
-        testTime = System.currentTimeMillis() - startTime;
-        result.setTest(test);
-        result.setTestTime(testTime);
-        result.setStatus(state);
-        results.put(test.toString(), result);
-        if (!currentTestClass.equals(test.getClass().getName())) {
-            currentTestClass = test.getClass().getName();
-            write(test.toString(), true);
-        } else {
-            write(test.toString(), false);
-        }
-    }
-
-    /**
-     * This method is called when a <code>Test</code> failed.
-     * The "error" code is passed:
-     * <li>- an error occured while testing
-     * <li>- the test failed
-     * And the <code>Throwable</code> object with the information why the test failed is passed as well.
-     *
-     * @param status "error" code
-     * @param test current <code>Test</code>
-     * @param t <code>Throwable</code> of error/failure
-     */
-    public void testFailed(int status, Test test, Throwable t) {
-        if (t instanceof NotExecutableException) {
-            state = TestResult.NOT_EXECUTABLE;
-        } else {
-            state = status;
-        }
-        result.setErrorMsg(t.toString());
-    }
-
-    /**
-     * Writes test logging information to output
-     *
-     * @param msg
-     */
-    private void write(String msg, boolean newTestClass) {
-        if (writer != null) {
-            try {
-                String html;
-                if (logString!= null && !"".equals(logString)) {
-                    html = MessageFormat.format(logString, new String[]{msg, TckHelper.getStatus(state)});
-                    writer.write(html);
-                }
-
-                String color;
-                switch (state) {
-                    case TestResult.SUCCESS:
-                        color = "pass";
-                        break;
-                    case TestResult.ERROR:
-                    case TestResult.FAILURE:
-                        color = "failure";
-                        break;
-                    case TestResult.NOT_EXECUTABLE:
-                        color = "error";
-                        break;
-                    default:
-                        color = "clear";
-                }
-
-                if (interactionString!= null && !"".equals(interactionString)) {
-                    html = MessageFormat.format(interactionString, new String[]{msg, color, String.valueOf(testTime)});
-                    if (newTestClass) {
-                        html += newTestString;
-                    }
-                    writer.write(html);
-                }
-                writer.flush();
-            } catch (IOException e) {
-                // ignore
-            }
-        } else {
-            System.out.println(msg);
-        }
-    }
-
-    /**
-     * Returns all results
-     * @return all test results
-     */
-    public Map getResults() {
-        return results;
-    }
-
-    public void setLogString(String logString) {
-        this.logString = logString;
-    }
-
-    public void setInteractionString(String interactionString) {
-        this.interactionString = interactionString;
-    }
-
-    public void setNewTestString(String newTestString) {
-        this.newTestString = newTestString;
-    }
-
-    public void testStarted(String testName) {
-    }
-
-    public void testEnded(String testName) {
-    }
-
-    public int getNumberOfTests() {
-        return tCount;
-    }
-
-    public void resetNumberOfTests() {
-        tCount = 0;
-    }
-}
-
diff --git a/contrib/tck-webapp/src/java/org/apache/jackrabbit/tck/TestFinder.java b/contrib/tck-webapp/src/java/org/apache/jackrabbit/tck/TestFinder.java
deleted file mode 100644
index 5e514a0..0000000
--- a/contrib/tck-webapp/src/java/org/apache/jackrabbit/tck/TestFinder.java
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.tck;
-
-import junit.framework.TestSuite;
-import junit.framework.Test;
-import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
-import java.util.*;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.File;
-import java.io.OutputStream;
-import java.io.FileOutputStream;
-import java.io.InputStreamReader;
-import java.io.BufferedReader;
-
-/**
- * The <code>TestFinder</code> class is responsible to find all <code>TestCase</code>s which are
- * in a jar. The information which jar has to be searched is passed in the constructor.
- */
-public class TestFinder {
-    /** Jar file to search the test classes */
-    private JarFile jarFile;
-
-    /** all tests */
-    private Map allTests;
-
-    /** all test suites */
-    private Map suites;
-
-    /**
-     * The path where the jar containing the test classes and its sources is residing is passed here.
-     */
-    public TestFinder() {
-        allTests = new HashMap();
-        suites = new HashMap();
-    }
-
-    /**
-     * This method searches all tests.
-     *
-     * @param exclude file(class) name (e.g. allTests) of tests which should be excluded.
-     * @param in <code>InputStream</code> of jar file containing the test class sources
-     * @throws IOException
-     * @throws ClassNotFoundException
-     */
-    public void find(InputStream in, String exclude) throws IOException, ClassNotFoundException {
-        File tmpFile = null;
-        try {
-            // save to a temp file
-            tmpFile = File.createTempFile("tck-tests", "jar");
-            OutputStream out = null;
-            try {
-                out = new FileOutputStream(tmpFile);
-                byte[] buf = new byte[1024];
-                int len;
-                while ((len = in.read(buf)) > 0) {
-                    out.write(buf, 0, len);
-                }
-            } finally {
-                in.close();
-                out.close();
-            }
-
-            jarFile = new JarFile(tmpFile);
-
-            // go through all jar file entries and take the one we are interessted in.
-            Enumeration en = jarFile.entries();
-
-            while (en.hasMoreElements()) {
-                JarEntry entry = (JarEntry) en.nextElement();
-                String name = entry.getName();
-
-                if (!entry.isDirectory() && name.endsWith(".java")) {
-                    // only source files are from interesst
-                    String classname = name.replace('/','.').substring(0, name.lastIndexOf(".java"));
-
-                    Class testclass = Class.forName(classname);
-
-                    // check if class is really a testsuite
-                    if (!isTestSuite(testclass)) {
-                        continue;
-                    }
-
-                    // check for files to be excluded
-                    if (name.endsWith(exclude)) {
-                        continue;
-                    }
-
-                    // retrieve keyword from source file
-                    String keyword = getKeyword(entry);
-
-                    // classify testsuite (level1, level2,...)
-                    if (suites.containsKey(keyword)) {
-                        TestSuite suite = (TestSuite) suites.get(keyword);
-                        suite.addTestSuite(testclass);
-                    } else {
-                        TestSuite suite = new TestSuite(keyword);
-                        suite.addTestSuite(testclass);
-                        suites.put(keyword, suite);
-                    }
-
-                    // memorize tests
-                    allTests.put(classname, keyword);
-                }
-            }
-        } finally {
-            if (tmpFile != null) {
-                tmpFile.delete();
-            }
-        }
-    }
-
-    /**
-     * Check if the passed test class is a "real" test suite
-     *
-     * @param testclass class to check
-     * @return true if a test suite
-     */
-    private boolean isTestSuite(Class testclass) {
-        TestSuite ts = new TestSuite(testclass);
-        if (ts.countTestCases() > 0) {
-            Test t = (Test) ts.tests().nextElement();
-            if (t.toString().startsWith("warning")) {
-                return false;
-            }
-        } else {
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * Reads the keyword from the java source.
-     *
-     * @param entry <code>JarEntry</code> to parse
-     * @return returns the existing keyword or "unspecified"
-     * @throws IOException
-     */
-    private String getKeyword(JarEntry entry) throws IOException {
-        InputStream input = jarFile.getInputStream(entry);
-        InputStreamReader isr = new InputStreamReader(input);
-        BufferedReader reader = new BufferedReader(isr);
-        String line;
-        while ((line = reader.readLine()) != null) {
-            String keyword;
-            if ((keyword = parseLine(line)) != null) {
-                return keyword;
-            }
-        }
-        reader.close();
-        return "unspecified";
-    }
-
-    /**
-     * Parses a line and checks for the "keywords" keyword
-     *
-     * @param line line to parse
-     * @return the kewyword string or null
-     */
-    private String parseLine(String line) {
-        int pos = line.indexOf("keywords");
-        int len = "keywords".length();
-        String word = "";
-
-        if ( pos >= 0) {
-            char l[] = line.toCharArray();
-            pos += len;
-
-            while (pos < l.length) {
-                char c = l[pos];
-
-                switch (c) {
-                    case 9: // '\t'
-                    case 10: // '\n'
-                    case 12: // '\f'
-                    case 13: // '\r'
-                    case 32: // ' '
-                        if (!"".equals(word)) {
-                            return word;
-                        }
-                        break;
-                    default:
-                        word += c;
-                }
-                pos++;
-            }
-        }
-        return ("".equals(word)) ? null : word;
-    }
-
-    /**
-     * Returns all tests categorized by it's keyword
-     * @return all tests
-     */
-    public Map getTests() {
-        return allTests;
-    }
-
-    /**
-     * Returns all built test suites. the suites are categorized:
-     * <li> - level1
-     * <li> - level 2
-     * <li> - optional...
-     *
-     * @return test suites
-     */
-    public Map getSuites() {
-        return suites;
-    }
-}
diff --git a/contrib/tck-webapp/src/java/org/apache/jackrabbit/tck/TestResult.java b/contrib/tck-webapp/src/java/org/apache/jackrabbit/tck/TestResult.java
deleted file mode 100644
index 9c31535..0000000
--- a/contrib/tck-webapp/src/java/org/apache/jackrabbit/tck/TestResult.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.tck;
-
-import junit.framework.Test;
-
-/**
- * The <code>TestResult</code> class is just a helper class to store test results.
- */
-public class TestResult {
-
-    /** Test succeeded */
-    public static final int SUCCESS = 0;
-
-    /** An error occured while testing */
-    public static final int ERROR = 1;
-
-    /** The test failed */
-    public static final int FAILURE = 2;
-
-    /** The test cannot be executed */
-    public static final int NOT_EXECUTABLE = 4;
-
-    /** The test */
-    private Test test;
-
-    /** Test status */
-    private int status;
-
-    /** Error message */
-    private String errorMsg;
-
-    /** Time that consumed while testing */
-    private long testTime;
-
-    public TestResult() {
-        // do nothing
-    }
-
-    public long getTestTime() {
-        return testTime;
-    }
-
-    public void setTestTime(long testTime) {
-        this.testTime = testTime;
-    }
-
-    public Test getTest() {
-        return test;
-    }
-
-    public void setTest(Test test) {
-        this.test = test;
-    }
-
-    public int getStatus() {
-        return status;
-    }
-
-    public void setStatus(int status) {
-        this.status = status;
-    }
-
-    public String getErrorMsg() {
-        return errorMsg;
-    }
-
-    public void setErrorMsg(String errorMsg) {
-        this.errorMsg = errorMsg;
-    }
-}
diff --git a/contrib/tck-webapp/src/java/org/apache/jackrabbit/tck/TestResultParser.java b/contrib/tck-webapp/src/java/org/apache/jackrabbit/tck/TestResultParser.java
deleted file mode 100644
index 6c15b13..0000000
--- a/contrib/tck-webapp/src/java/org/apache/jackrabbit/tck/TestResultParser.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package org.apache.jackrabbit.tck;
-
-import java.io.IOException;
-import java.io.StringReader;
-import java.io.ByteArrayOutputStream;
-
-import java.util.Map;
-import java.util.TreeMap;
-
-import javax.xml.parsers.*;
-import javax.jcr.Node;
-import javax.jcr.Session;
-import javax.jcr.RepositoryException;
-
-import org.xml.sax.*;
-import org.xml.sax.helpers.*;
-
-
-
-/**
- * Builds a simple HTML page which lists tip titles
- * and provides links to HTML and text versions
- */
-public class TestResultParser extends DefaultHandler {
-
-    Map results = new TreeMap();
-    String strLevels[] = new String[]{"level1", "level2", "sql", "locking", "versioning", "uuid", "observation"};
-    String currLevel = "";
-
-    boolean status = false;
-    boolean getStatValue = false;
-
-    public TestResultParser() {
-        super();
-
-        for (int i = 0; i < strLevels.length; i++) {
-            results.put(strLevels[i], null);
-        }
-    }
-
-    public void startElement(String namespace,
-                            String localName,
-                            String qName,
-                            Attributes atts) {
-        if (localName.equals("node")) {
-            String name = atts.getValue("sv:name");
-            if (results.containsKey(name)) {
-                currLevel = name;
-                results.put(currLevel, new Boolean(true));
-            }
-        } else if (localName.equals("property")) {
-            String name = atts.getValue("sv:name");
-            if (name.equals("status")) {
-                status = true;
-            }
-        } else if (localName.equals("value") && status) {
-            getStatValue = true;
-            status = false;
-        }
-    }
-
-    public Map interpretResult(String xmldoc) throws ParserConfigurationException, SAXException, IOException {
-
-        SAXParserFactory spf = SAXParserFactory.newInstance();
-        SAXParser sp = spf.newSAXParser();
-        ParserAdapter pa = new ParserAdapter(sp.getParser());
-        pa.setContentHandler(this);
-        pa.parse(new InputSource(new StringReader(xmldoc)));
-        return results;
-    }
-
-    public void characters (char ch[], int start, int length) {
-        if (getStatValue) {
-            String val = new String(ch, start, length);
-            if (!"0".equals(val)) {
-                results.put(currLevel, new Boolean(false));
-            }
-            getStatValue = false;
-        }
-    }
-}
-
diff --git a/contrib/tck-webapp/src/java/org/apache/jackrabbit/tck/Tester.java b/contrib/tck-webapp/src/java/org/apache/jackrabbit/tck/Tester.java
deleted file mode 100644
index 4d99f06..0000000
--- a/contrib/tck-webapp/src/java/org/apache/jackrabbit/tck/Tester.java
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.tck;
-
-import junit.framework.TestSuite;
-import junit.framework.TestResult;
-import junit.framework.TestCase;
-
-import javax.jcr.nodetype.ConstraintViolationException;
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
-import javax.jcr.InvalidItemStateException;
-import javax.jcr.AccessDeniedException;
-import javax.servlet.jsp.JspWriter;
-import java.io.IOException;
-import java.text.MessageFormat;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.ArrayList;
-
-import org.apache.jackrabbit.test.AbstractJCRTest;
-import org.apache.jackrabbit.test.RepositoryHelper;
-
-/**
- * The <code>Tester</code> starts the all tests and saves all tests.
- */
-public class Tester {
-
-    /** Object containing all tests */
-    TestFinder tests;
-
-    /** all test results are stored here */
-    Map results;
-
-    /** the test listener */
-    TckTestRunner runner;
-
-    /** the jsp writer */
-    JspWriter writer;
-
-    /** The string to be writen after finishing a suite */
-    String finishedSuiteString;
-
-    /** the exclude list */
-    Map excludeList;
-
-    /** the numberf of executed tests */
-    int numOfTests;
-
-    /**
-     * The constructor...
-     *
-     * @param tests All tests found using <code>TestFinder</code>
-     */
-    public Tester(TestFinder tests, TckTestRunner runner, JspWriter writer, Map excludeList) {
-        this.tests = tests;
-        results = new HashMap();
-        this.runner = runner;
-        this.writer = writer;
-        this.excludeList = excludeList;
-        numOfTests = 0;
-
-        // set the configuration for the to be tested repository
-        AbstractJCRTest.helper = new RepositoryHelper(WebAppTestConfig.getCurrentConfig());
-    }
-
-    /**
-     * Calling this method starts the testing. All test results will be stored in the
-     * results hashmap for further use.
-     *
-     * @return the result list (map)
-     */
-    public Map run() {
-
-        // get suites (level1, level2, ...)
-        Iterator suites = tests.getSuites().keySet().iterator();
-
-        while (suites.hasNext()) {
-            TestSuite suite = (TestSuite) tests.getSuites().get(suites.next());
-
-            TestResult result = new TestResult();
-            result.addListener(runner);
-
-            TestSuite updatedTS = applyExcludeList(suite);
-
-            try {
-                runner.resetNumberOfTests();
-                updatedTS.run(result);
-                results.putAll(runner.getResults());
-                write(updatedTS);
-                numOfTests += runner.getNumberOfTests();
-            } catch (Exception e) {
-                // ignore
-            }
-        }
-        return results;
-    }
-
-    /**
-     * This method goes through the exclude list and removes tests in the test suites
-     * which should NOT be performed.
-     *
-     * @param suite Test suite
-     * @return false if the whole test suite has to be skipped
-     */
-    private TestSuite applyExcludeList(TestSuite suite) {
-        TestSuite updatedTS = new TestSuite();
-        updatedTS.setName(suite.getName());
-        Enumeration suiteMemberClasses = suite.tests();
-
-        while (suiteMemberClasses.hasMoreElements()) {
-            TestSuite testClass = (TestSuite) suiteMemberClasses.nextElement();
-            String testClassName = testClass.toString();
-
-            if (excludeList.containsKey(testClassName)) {
-                continue;
-            } else {
-                TestSuite ts = new TestSuite();
-                ts.setName(testClassName);
-                List testcases = new ArrayList();
-                boolean recreate = false;
-
-                Enumeration testMethods = testClass.tests();
-                while (testMethods.hasMoreElements()) {
-                    TestCase tc = (TestCase) testMethods.nextElement();
-                    String methodname = tc.getName();
-                    if (excludeList.containsKey(testClassName + "#" + methodname)) {
-                        recreate = true;
-                    } else {
-                        testcases.add(tc);
-                    }
-                }
-                if (recreate) {
-                    TestSuite recreatedTS = new TestSuite(ts.toString());
-                    Iterator itr = testcases.iterator();
-
-                    while (itr.hasNext()) {
-                        recreatedTS.addTest((TestCase) itr.next());
-                    }
-                    updatedTS.addTest(recreatedTS);
-                } else {
-                    updatedTS.addTest(testClass);
-                }
-
-            }
-        }
-        return updatedTS;
-    }
-
-
-    public void setfinishedSuiteString(String line) {
-        finishedSuiteString = line;
-    }
-
-    /**
-     * Writes a predefined string to the output after finishing a test suite
-     */
-    private void write(TestSuite suite) throws IOException {
-        if (writer != null) {
-            writer.write(MessageFormat.format(finishedSuiteString, new String[]{suite.toString(), String.valueOf(suite.testCount())}));
-        }
-    }
-
-    /**
-     * This method stores the result underneath the passed node in this structure:
-     * <pre>
-     * node
-     *  + suite name 1
-     *    + test 1
-     *    + test 2
-     *    ...
-     *  + suite name 2
-     *    + test a
-     *    + test b
-     *    ...
-     *  ....
-     * </pre>
-     * @param node parent <code>Node</code> for storage
-     * @throws javax.jcr.RepositoryException
-     * @throws ConstraintViolationException
-     * @throws javax.jcr.InvalidItemStateException
-     * @throws javax.jcr.AccessDeniedException
-     */
-    public void storeResults(Node node) throws RepositoryException, ConstraintViolationException, InvalidItemStateException, AccessDeniedException {
-        // create categories: level1, level2....
-        Iterator keyItr = tests.getSuites().keySet().iterator();
-        while (keyItr.hasNext()) {
-            node.addNode((String) keyItr.next());
-        }
-
-        // save test results here
-        Iterator itr = results.keySet().iterator();
-        while (itr.hasNext()) {
-            String key = (String) itr.next();
-            org.apache.jackrabbit.tck.TestResult tr = (org.apache.jackrabbit.tck.TestResult) results.get(key);
-            String className = tr.getTest().getClass().getName();
-            String testName = key.substring(0, key.indexOf("("));
-            String keyword = (String) tests.getTests().get(className);
-            if (keyword != null) {
-                Node testResNode = node.addNode(keyword + "/" + key);
-                testResNode.setProperty("name", testName);
-                testResNode.setProperty("status", tr.getStatus());
-                if (tr.getErrorMsg() != null) {
-                   testResNode.setProperty("errrormsg", tr.getErrorMsg());
-                }
-                testResNode.setProperty("testtime", tr.getTestTime());
-            }
-        }
-        node.save();
-    }
-
-    /**
-     * Returns the number of executed tests
-     *
-     * @return number of executed tests
-     */
-    public int getNumberOfExecutedTests() {
-        return numOfTests;
-    }
-}
diff --git a/contrib/tck-webapp/src/java/org/apache/jackrabbit/tck/WebAppTestConfig.java b/contrib/tck-webapp/src/java/org/apache/jackrabbit/tck/WebAppTestConfig.java
deleted file mode 100644
index a235646..0000000
--- a/contrib/tck-webapp/src/java/org/apache/jackrabbit/tck/WebAppTestConfig.java
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.tck;
-
-import org.apache.jackrabbit.tck.j2ee.RepositoryServlet;
-import org.apache.jackrabbit.test.JNDIRepositoryStub;
-import org.apache.jackrabbit.test.RepositoryStub;
-
-import javax.jcr.*;
-import javax.servlet.http.HttpServletRequest;
-import javax.naming.Context;
-import java.io.InputStream;
-import java.io.IOException;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.Properties;
-import java.util.Iterator;
-import java.util.Enumeration;
-import java.util.Set;
-
-import junit.framework.TestSuite;
-import junit.framework.TestCase;
-
-
-/**
- * The <code>WebAppTestConfig</code> class reads and saves the config in the tck web app specific way.
- */
-public class WebAppTestConfig {
-
-
-
-    /** default property names */
-    public final static String[] propNames = {JNDIRepositoryStub.PROP_PREFIX + "." + JNDIRepositoryStub.PROP_WORKSPACE_NAME,
-                                              JNDIRepositoryStub.REPOSITORY_LOOKUP_PROP,
-                                              Context.PROVIDER_URL,
-                                              Context.INITIAL_CONTEXT_FACTORY,
-                                              JNDIRepositoryStub.PROP_PREFIX + "." + JNDIRepositoryStub.PROP_SUPERUSER_NAME,
-                                              JNDIRepositoryStub.PROP_PREFIX + "." + JNDIRepositoryStub.PROP_SUPERUSER_PWD,
-                                              JNDIRepositoryStub.PROP_PREFIX + "." + JNDIRepositoryStub.PROP_READWRITE_NAME,
-                                              JNDIRepositoryStub.PROP_PREFIX + "." + JNDIRepositoryStub.PROP_READWRITE_PWD,
-                                              JNDIRepositoryStub.PROP_PREFIX + "." + JNDIRepositoryStub.PROP_READONLY_NAME,
-                                              JNDIRepositoryStub.PROP_PREFIX + "." + JNDIRepositoryStub.PROP_READONLY_PWD,
-                                              JNDIRepositoryStub.PROP_PREFIX + "." + JNDIRepositoryStub.PROP_TESTROOT,
-                                              JNDIRepositoryStub.PROP_PREFIX + "." + JNDIRepositoryStub.PROP_NODE_NAME1,
-                                              JNDIRepositoryStub.PROP_PREFIX + "." + JNDIRepositoryStub.PROP_NODE_NAME2,
-                                              JNDIRepositoryStub.PROP_PREFIX + "." + JNDIRepositoryStub.PROP_NODE_NAME3,
-                                              JNDIRepositoryStub.PROP_PREFIX + "." + JNDIRepositoryStub.PROP_NODE_NAME4,
-                                              JNDIRepositoryStub.PROP_PREFIX + "." + JNDIRepositoryStub.PROP_PROP_NAME1,
-                                              JNDIRepositoryStub.PROP_PREFIX + "." + JNDIRepositoryStub.PROP_PROP_NAME2,
-                                              JNDIRepositoryStub.PROP_PREFIX + "." + JNDIRepositoryStub.PROP_NAMESPACES,
-                                              JNDIRepositoryStub.PROP_PREFIX + "." + JNDIRepositoryStub.PROP_NODETYPE};
-
-    /**
-     * Reads the config entries from the repository
-     *
-     * @return test config
-     */
-    public static Map getConfig() {
-        Map config = new HashMap();
-        try {
-            Session repSession = RepositoryServlet.getSession();
-            Node configNode = repSession.getRootNode().getNode("testconfig");
-            PropertyIterator pitr = configNode.getProperties();
-
-            while (pitr.hasNext()) {
-                Property p = pitr.nextProperty();
-                config.put(p.getName(), p.getString());
-            }
-        } catch (RepositoryException e) {
-            return new HashMap();
-        }
-        return config;
-    }
-
-    /**
-     * Reads the original config from the property file.
-     *
-     * @return original read only config
-     */
-    public static Map getOriConfig() {
-        Properties props = new Properties();
-        InputStream is = WebAppTestConfig.class.getClassLoader().getResourceAsStream(JNDIRepositoryStub.STUB_IMPL_PROPS);
-        if (is != null) {
-            try {
-                props.load(is);
-            } catch (IOException e) {
-                // ignore
-            }
-        }
-
-        // add additional props
-        Set keys = props.keySet();
-        if (!keys.contains(JNDIRepositoryStub.REPOSITORY_LOOKUP_PROP)) {
-            props.put(JNDIRepositoryStub.REPOSITORY_LOOKUP_PROP, "");
-        }
-        if (!keys.contains(Context.PROVIDER_URL)) {
-            props.put(Context.PROVIDER_URL, "");
-        }
-        if (!keys.contains(Context.INITIAL_CONTEXT_FACTORY)) {
-            props.put(Context.INITIAL_CONTEXT_FACTORY, "");
-        }
-
-        return props;
-    }
-
-    /**
-     * Saves the configuration entries which needs to be set.
-     *
-     * @param request request with config changes
-     * @param repSession <code>Session</code> used to write config
-     * @throws RepositoryException
-     */
-    public static void save(HttpServletRequest request, Session repSession) throws RepositoryException {
-        // create config node if not yet existing
-        Node testConfig;
-        if (repSession.getRootNode().hasNode("testconfig")) {
-            testConfig = repSession.getRootNode().getNode("testconfig");
-        } else {
-            testConfig = repSession.getRootNode().addNode("testconfig", "nt:unstructured");
-            repSession.getRootNode().save();
-        }
-
-        // save config entries
-        Iterator allPropNames = getCurrentConfig().keySet().iterator();
-
-        while (allPropNames.hasNext()) {
-            String pName = (String) allPropNames.next();
-            setEntry(pName, request, testConfig);
-        }
-
-        // save
-        testConfig.save();
-    }
-
-    /**
-     * This method saves a single property
-     *
-     * @param propName property name
-     * @param propValue property value
-     * @param repSession session
-     * @throws RepositoryException
-     */
-    public static void saveProperty(String propName, String propValue, Session repSession) throws RepositoryException {
-        // create config node if not yet existing
-        Node testConfig;
-        if (repSession.getRootNode().hasNode("testconfig")) {
-            testConfig = repSession.getRootNode().getNode("testconfig");
-        } else {
-            testConfig = repSession.getRootNode().addNode("testconfig", "nt:unstructured");
-            repSession.getRootNode().save();
-        }
-
-        testConfig.setProperty(propName, propValue);
-
-        // save
-        testConfig.save();
-    }
-
-    /**
-     * Set config entry
-     *
-     * @param propname config property name
-     * @param request request to read property value
-     * @param testConfig  test config <code>Node</code>
-     * @throws RepositoryException
-     */
-    private static void setEntry(String propname, HttpServletRequest request, Node testConfig) throws RepositoryException {
-        if (request.getParameter(propname) != null) {
-            testConfig.setProperty(propname, request.getParameter(propname));
-        }
-    }
-
-    /**
-     * Returns all test case specific configuration entries
-     *
-     * @param suite test suite
-     * @return all test case specific conf entries
-     */
-    public static Map getTestCaseSpecificConfigs(TestSuite suite) {
-        Map currentConfig = getCurrentConfig();
-        Map configs = new HashMap();
-
-        // check for "package" defined props
-        String pname = suite.getName();
-        if ("versioning".equals(pname)) {
-            pname = "version";
-        }
-        configs.putAll(getProperties(pname, currentConfig));
-
-        Enumeration allTestClasses = suite.tests();
-
-        while (allTestClasses.hasMoreElements()) {
-            TestSuite aTest = (TestSuite) allTestClasses.nextElement();
-            String name = aTest.getName();
-            name = name.substring(name.lastIndexOf(".") + 1);
-
-            // check for class defined props
-            configs.putAll(getProperties(name, currentConfig));
-
-            // goto methods
-            Enumeration testMethods = aTest.tests();
-
-            while (testMethods.hasMoreElements()) {
-                TestCase tc = (TestCase) testMethods.nextElement();
-                String methodname = tc.getName();
-                String fullName = name + "." + methodname;
-                configs.putAll(getProperties(fullName, currentConfig));
-            }
-        }
-        return configs;
-    }
-
-    /**
-     * Returns the current configuration
-     * @return
-     */
-    public static Map getCurrentConfig() {
-        Map conf = getOriConfig();
-        conf.putAll(getConfig());
-
-        // fill all empty (== null) values with an empty string
-        Iterator itr = conf.keySet().iterator();
-        while (itr.hasNext()) {
-            String key = (String) itr.next();
-            String val = (String) conf.get(key);
-            if (val == null) {
-                conf.put(key, "");
-            }
-        }
-        return conf;
-    }
-
-    /**
-     * Returns all properties which property name starts with <code>"javax.jcr.tck." + name</code>
-     *
-     * @param name property name "extension"
-     * @param config configuration
-     * @return all properties which apply the above mentioned rule
-     */
-    private static Map getProperties(String name, Map config) {
-        Map props = new HashMap();
-
-        String pname = RepositoryStub.PROP_PREFIX + "." + name;
-
-        Iterator itr = config.keySet().iterator();
-
-        while (itr.hasNext()) {
-            String key = (String) itr.next();
-            if (key.startsWith(pname)) {
-                props.put(key, config.get(key));
-            }
-        }
-        return props;
-    }
-
-    /**
-     * Removes the custom config entries
-     *
-     * @throws RepositoryException
-     */
-    public static void resetConfiguration() throws RepositoryException {
-        Session repSession = RepositoryServlet.getSession();
-        if (repSession.getRootNode().hasNode("testconfig")) {
-            repSession.getRootNode().getNode("testconfig").remove();
-        }
-        repSession.getRootNode().save();
-    }
-}
diff --git a/contrib/tck-webapp/src/java/org/apache/jackrabbit/tck/j2ee/RepositoryServlet.java b/contrib/tck-webapp/src/java/org/apache/jackrabbit/tck/j2ee/RepositoryServlet.java
deleted file mode 100644
index 793a998..0000000
--- a/contrib/tck-webapp/src/java/org/apache/jackrabbit/tck/j2ee/RepositoryServlet.java
+++ /dev/null
@@ -1,315 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.tck.j2ee;
-
-import org.apache.log4j.PropertyConfigurator;
-import org.apache.log4j.Logger;
-import org.apache.jackrabbit.core.config.RepositoryConfig;
-import org.apache.jackrabbit.core.RepositoryImpl;
-import org.xml.sax.InputSource;
-
-import javax.servlet.http.HttpServlet;
-import javax.servlet.ServletException;
-import javax.jcr.*;
-import java.io.*;
-import java.util.Properties;
-
-/**
- * The RepositoryServlet connects (starts) to a jsr170 repository and
- * puts the reference into a class variable.
- */
-public class RepositoryServlet extends HttpServlet {
-
-    /** the logger */
-    private static Logger log;// = Logger.getLogger(RepositoryServlet.class);
-
-    /** repository configuration path */
-    public final static String INIT_PARAM_REPOSITORY_CONFIG = "repository-config";
-
-    /** repository home */
-    public final static String INIT_PARAM_REPOSITORY_HOME = "repository-home";
-
-    /** repository name */
-    public final static String INIT_PARAM_REPOSITORY_NAME = "repository-name";
-
-    /** user id name */
-    public static final String USER_ID = "jcr-userid";
-
-    /** user password name */
-    public static final String  USER_PASSWORD = "jcr-password";
-
-    /** submit url name */
-    public static final String  SUBMIT_URL = "submit-url";
-
-    /** exclude list url name */
-    public static final String  EXCLUDE_LIST_URL = "exclude-list-url";
-
-    /** tck version checker gif path */
-    public static final String  CHECK_TCK_VERSION_GIF_PATH = "check-tck-version-gif";
-
-    /** exclude list version checker gif path */
-    public static final String  CHECK_EXCLUDELIST_VERSION_GIF_PATH = "check-excludelist-version-gif";
-
-    /** exclude list version checker gif path */
-    public static final String  TCK_UPDATE_URL = "tck-update-page";
-
-    /** tck webapp jar path name */
-    public static final String  TCK_WEBAPP_JAR_PATH = "tck-webapp-jar-path";
-
-    /** log4j config */
-    public final static String PARAM_LOG4J_CONFIG = "log4j-config";
-
-    /** the repository to read/write test results and config */
-    private static RepositoryImpl repository;
-
-    /** the user id */
-    private static String uid;
-
-    /** the password */
-    private static String pw;
-
-    /** the submit url */
-    private static String submitUrl;
-
-    /** the tck webapp jar path */
-    private static String tckWebappJarPath;
-
-    /** the exclude list url */
-    private static String excludeListUrl;
-
-    /** tck version checker path */
-    private static String tckVersionCheckerPath;
-
-    /** the exclude list checker url */
-    private static String excludeListCheckerPath;
-
-    /** the update url */
-    private static String tckUpdateUrl;
-
-    /**
-     * The init method starts the repository to read/write test results and configuration,
-     * sets the jaas config and the user id and the user password
-     *
-     * @throws ServletException
-     */
-    public void init() throws ServletException {
-        super.init();
-
-        try {
-            // setup log4j
-            // todo: do correctly
-            String log4jConfig = getServletConfig().getInitParameter(PARAM_LOG4J_CONFIG);
-            InputStream in = getServletContext().getResourceAsStream(log4jConfig);
-            if (in == null) {
-                // try normal init
-                PropertyConfigurator.configure(log4jConfig);
-            } else {
-                try {
-                    Properties log4jProperties = new Properties();
-                    log4jProperties.load(in);
-                    in.close();
-                    PropertyConfigurator.configure(log4jProperties);
-                } catch (IOException e) {
-                    throw new ServletException("Unable to load log4jProperties: " + e.toString());
-                }
-            }
-            log_info("RepositoryServlet initializing..");
-
-            // setup home directory
-            String repHome = getServletConfig().getInitParameter(INIT_PARAM_REPOSITORY_HOME);
-            if (repHome == null) {
-                log_info(INIT_PARAM_REPOSITORY_HOME + " missing.");
-                throw new ServletException(INIT_PARAM_REPOSITORY_HOME + " missing.");
-            }
-                File repositoryHome;
-            try {
-                repositoryHome = new File(repHome).getCanonicalFile();
-            } catch (IOException e) {
-                log_info(INIT_PARAM_REPOSITORY_HOME + " invalid." + e.toString());
-                throw new ServletException(INIT_PARAM_REPOSITORY_HOME + " invalid." + e.toString());
-            }
-            log_info("  repository-home = " + repositoryHome.getPath());
-
-            // setup repository
-            String repConfig = getServletConfig().getInitParameter(INIT_PARAM_REPOSITORY_CONFIG);
-            if (repConfig == null) {
-                log_info(INIT_PARAM_REPOSITORY_CONFIG + " missing.");
-                throw new ServletException(INIT_PARAM_REPOSITORY_CONFIG + " missing.");
-            }
-            log_info("  repository-config = " + repConfig);
-
-            in = getServletContext().getResourceAsStream(repConfig);
-            if (in == null) {
-                try {
-                    in = new FileInputStream(new File(repositoryHome, repConfig));
-                } catch (FileNotFoundException e) {
-                    log_info(INIT_PARAM_REPOSITORY_CONFIG + " invalid." + e.toString());
-                    throw new ServletException(INIT_PARAM_REPOSITORY_CONFIG + " invalid." + e.toString());
-                }
-            }
-
-            // get repository name
-            String repositoryName = getServletConfig().getInitParameter(INIT_PARAM_REPOSITORY_NAME);
-            if (repositoryName == null) {
-                repositoryName = "default";
-            }
-            log_info("  repository-name = " + repositoryName);
-
-            InputSource is = new InputSource(in);
-            RepositoryConfig config = RepositoryConfig.create(is, repositoryHome.getPath());
-            repository = RepositoryImpl.create(config);
-
-            log_info("JSR170 RI Repository initialized.");
-
-            // set user id and password to read/write test results and configuration
-            uid = getServletConfig().getInitParameter(USER_ID);
-            pw = getServletConfig().getInitParameter(USER_PASSWORD);
-
-            // set submit url
-            submitUrl = getServletConfig().getInitParameter(SUBMIT_URL);
-
-            // set tck webapp jar path
-            tckWebappJarPath = getServletConfig().getInitParameter(TCK_WEBAPP_JAR_PATH);
-
-            // set exclude list url
-            excludeListUrl = getServletConfig().getInitParameter(EXCLUDE_LIST_URL);
-
-            // set the tck version checker gif path
-            tckVersionCheckerPath = getServletConfig().getInitParameter(CHECK_TCK_VERSION_GIF_PATH);
-
-            // set the exclude list checker path
-            excludeListCheckerPath = getServletConfig().getInitParameter(CHECK_EXCLUDELIST_VERSION_GIF_PATH);
-
-            // set the tck update page url
-            tckUpdateUrl = getServletConfig().getInitParameter(TCK_UPDATE_URL);
-
-        } catch (RepositoryException e) {
-            log_info("Unable to initialize repository: " + e.toString(), e);
-            throw new ServletException("Unable to initialize repository: " + e.toString(), e);
-        }
-
-    }
-
-    public void destroy() {
-        super.destroy();
-        repository.shutdown();
-        log_info("RepositoryServlet shutting down...");
-    }
-
-    private void log_info(String msg) {
-        if (log != null) {
-            log.info(msg);
-        } else {
-            log(msg);
-        }
-    }
-
-    private void log_info(String msg, Throwable t) {
-        if (log != null) {
-            log.info(msg, t);
-        } else {
-            log(msg, t);
-        }
-    }
-    /**
-     * Returns the JSR170 repository
-     * @return a jsr170 repository
-     */
-    public static Repository getRepository() {
-        return repository;
-    }
-
-    /**
-     * Returns the jcr session
-     *
-     * @return
-     */
-    public static Session getSession() {
-        try {
-            return login();
-        } catch (RepositoryException e) {
-            log.error("Unable to retrieve session: " + e.toString());
-        }
-        return null;
-    }
-
-    /**
-     * Logs in to the repository. The user to login is specified in the servlet config.
-     * @throws RepositoryException
-     */
-    public static Session login()
-	    throws RepositoryException {
-
-        // login
-        Session repSession = repository.login(new SimpleCredentials(uid, pw.toCharArray()), null);
-        return repSession;
-    }
-
-    /**
-     * Returns the url where the test result have to be submitted
-     *
-     * @return submit url
-     */
-    public static String getSubmitUrl() {
-        return submitUrl;
-    }
-
-    /**
-     * Returns the path where the tck webapp jar file is placed
-     *
-     * @return path to jar
-     */
-    public static String getTckWebappJarPath() {
-        return tckWebappJarPath;
-    }
-
-    /**
-     * Returns the exclude list url
-     *
-     * @return exclude list provider url
-     */
-    public static String getExcludeListUrl() {
-        return excludeListUrl;
-    }
-
-    /**
-     * Returns the tck version checker path.
-     *
-     * @return tck version checker path
-     */
-    public static String getTckVersionCheckerPath() {
-        return tckVersionCheckerPath;
-    }
-
-    /**
-     * Returns the excludelist checker url
-     *
-     * @return exclude list checker url
-     */
-    public static String getExcludeListCheckerPath() {
-        return excludeListCheckerPath;
-    }
-
-    /**
-     * Returns the tck update url
-     *
-     * @return url pointing to update page
-     */
-    public static String getTckUpdateUrl() {
-        return tckUpdateUrl;
-    }
-}
diff --git a/contrib/tck-webapp/src/webapp/WEB-INF/classes/repositoryStubImpl.properties b/contrib/tck-webapp/src/webapp/WEB-INF/classes/repositoryStubImpl.properties
deleted file mode 100644
index 9361d4f..0000000
--- a/contrib/tck-webapp/src/webapp/WEB-INF/classes/repositoryStubImpl.properties
+++ /dev/null
@@ -1,437 +0,0 @@
-#
-# This is the configuration file for the jackrabbit repository test stub.
-#
-
-# Stub implementation class
-javax.jcr.tck.repository_stub_impl=org.apache.jackrabbit.test.JNDIRepositoryStub
-
-# some default values for testing jackrabbit
-javax.jcr.tck.jndi.repository_lookup_name=jackrabbit.repository
-java.naming.provider.url=http://www.apache.org/jackrabbit
-java.naming.factory.initial=com.day.crx.jndi.provider.MemoryInitialContextFactory
-
-# repository specific configuration
-org.apache.jackrabbit.repository.config=applications/test/repository.xml
-org.apache.jackrabbit.repository.name=repo
-org.apache.jackrabbit.repository.home=applications/test
-org.apache.jackrabbit.repository.jaas.config=applications/test/jaas.config
-
-# credential configuration
-javax.jcr.tck.superuser.name=superuser
-javax.jcr.tck.superuser.pwd=
-javax.jcr.tck.readwrite.name=user
-javax.jcr.tck.readwrite.pwd=
-javax.jcr.tck.readonly.name=anonymous
-javax.jcr.tck.readonly.pwd=
-
-# global test configuration
-javax.jcr.tck.testroot=/testroot
-javax.jcr.tck.nodetype=nt:unstructured
-javax.jcr.tck.nodename1=node1
-javax.jcr.tck.nodename2=node2
-javax.jcr.tck.nodename3=node3
-javax.jcr.tck.nodename4=node4
-javax.jcr.tck.propertyname1=prop1
-javax.jcr.tck.propertyname2=prop2
-javax.jcr.tck.workspacename=test
-
-# namespace configuration
-javax.jcr.tck.namespaces=test
-javax.jcr.tck.namespaces.test=http://www.apache.org/jackrabbit/test
-
-# sample for per test case config overriding
-# Test class: AddNodeText
-# Test method: testName
-javax.jcr.tck.AddNodeTest.testName.nodename1=myname
-
-# ==============================================================================
-# JAVAX.JCR CONFIGURATION
-# ==============================================================================
-
-# Test class: ItemDefTest
-javax.jcr.tck.ItemDefTest.testroot=/testdata
-
-# Test class: ItemReadMethodsTest
-javax.jcr.tck.ItemReadMethodsTest.testroot=/testdata
-
-# Test class: NodeReadMethodsTest
-javax.jcr.tck.NodeReadMethodsTest.testroot=/testdata
-
-# Test class: PropertyTypeTest
-javax.jcr.tck.PropertyTypeTest.testroot=/testdata
-
-# Test class: BinaryPropertyTest
-javax.jcr.tck.BinaryPropertyTest.testroot=/testdata
-
-# Test class: BooleanPropertyTest
-javax.jcr.tck.BooleanPropertyTest.testroot=/testdata
-
-# Test class: DatePropertyTest
-javax.jcr.tck.DatePropertyTest.testroot=/testdata
-
-# Test class: DoublePropertyTest
-javax.jcr.tck.DoublePropertyTest.testroot=/testdata
-
-# Test class: LongPropertyTest
-javax.jcr.tck.LongPropertyTest.testroot=/testdata
-
-# Test class: NamePropertyTest
-javax.jcr.tck.NamePropertyTest.testroot=/testdata
-
-# Test class: PathPropertyTest
-javax.jcr.tck.PathPropertyTest.testroot=/testdata
-
-# Test class: ReferencePropertyTest
-javax.jcr.tck.ReferencePropertyTest.testroot=/testdata
-
-# Test class: StringPropertyTest
-javax.jcr.tck.StringPropertyTest.testroot=/testdata
-
-# Test class: SetValueVersionExceptionTest
-# nodetype2: nodetype with a reference property
-javax.jcr.tck.SetValueVersionExceptionTest.nodetype2=nt:linkedFile
-# propertyname3: name of the single value reference property
-javax.jcr.tck.SetValueVersionExceptionTest.propertyname3=jcr:content
-
-# Test class: UndefinedPropertyTest
-javax.jcr.tck.UndefinedPropertyTest.testroot=/testdata
-
-# Test class: PropertyReadMethodsTest
-javax.jcr.tck.PropertyReadMethodsTest.testroot=/testdata
-
-# Test class: NodeIteratorTest
-javax.jcr.tck.NodeIteratorTest.testroot=/testdata
-
-# Test class: NodeDiscoveringNodeTypesTest
-javax.jcr.tck.NodeDiscoveringNodeTypesTest.testroot=/testdata
-
-# Test class: RepositoryDescriptorTest
-javax.jcr.tck.RepositoryDescriptorTest.testroot=/testdata
-
-# Test class: WorkspaceReadMethodsTest
-javax.jcr.tck.WorkspaceReadMethodsTest.testroot=/testdata
-
-# Test class: SessionReadMethodsTest
-javax.jcr.tck.SessionReadMethodsTest.testroot=/testdata
-
-# Test class: NamespaceRegistryReadMethodsTest
-javax.jcr.tck.NamespaceRegistryReadMethodsTest.testroot=/testdata
-
-# Test class: NamespaceRemappingTest
-javax.jcr.tck.NamespaceRemappingTest.testroot=/testdata
-
-# Test class: SessionTest
-# Test method: testMoveItemExistsException
-# nodetype that does not allow same name siblings
-javax.jcr.tck.SessionTest.testMoveItemExistsException.nodetype2=nt:folder
-# valid node type that can be added as child of nodetype2
-javax.jcr.tck.SessionTest.testMoveItemExistsException.nodetype3=nt:hierarchyNode
-
-# Test class: SessionTest
-# Test method: testSaveContstraintViolationException
-# nodetype that has a property that is mandatory but not autocreated
-javax.jcr.tck.SessionTest.testSaveContstraintViolationException.nodetype2=nt:file
-
-# Test class: SessionUUIDTest
-# node type that has a property of type PropertyType.REFERENCE
-javax.jcr.tck.SessionUUIDTest.nodetype=nt:unstructured
-# name of the property that is of type PropertyType.REFERENCE
-javax.jcr.tck.SessionUUIDTest.propertyname1=foobar
-# nodetype that has nodetype mix:referenceable assigned
-javax.jcr.tck.SessionUUIDTest.nodetype2=test:refTargetNode
-
-# Test class: SessionUUIDTest
-# Test method: testSaveMovedRefNode
-# name of the property that can be modified
-javax.jcr.tck.SessionUUIDTest.testSaveMovedRefNode.propertyname1=foobar
-
-# Test class: NodeTest
-# Test method: testAddNodeItemExistsException
-# nodetype that does not allow same name siblings and allows child nodes of
-# the same type
-javax.jcr.tck.NodeTest.testAddNodeItemExistsException.nodetype=nt:folder
-
-# Test class: NodeTest
-# Test method: testRemoveMandatoryNode
-# nodetype that has a mandatory child node definition
-javax.jcr.tck.NodeTest.testRemoveMandatoryNode.nodetype2=nt:file
-# nodetype of the  mandatory child
-javax.jcr.tck.NodeTest.testRemoveMandatoryNode.nodetype3=nt:base
-# name of the mandatory node
-javax.jcr.tck.NodeTest.testRemoveMandatoryNode.nodename3=jcr:content
-
-# Test class: NodeTest
-# Test method: testSaveContstraintViolationException
-# nodetype that has a property that is mandatory but not autocreated
-javax.jcr.tck.NodeTest.testSaveContstraintViolationException.nodetype2=nt:file
-
-# Test class: NodeUUIDTest
-# node type that has a property of type PropertyType.REFERENCE
-javax.jcr.tck.NodeUUIDTest.nodetype=nt:unstructured
-# name of the property that is of type PropertyType.REFERENCE
-javax.jcr.tck.NodeUUIDTest.propertyname1=ref
-# nodetype that has nodetype mix:referenceable assigned
-javax.jcr.tck.NodeUUIDTest.nodetype2=test:refTargetNode
-
-# Test class: NodeUUIDTest
-# Test method: testSaveMovedRefNode
-# name of the property that can be modified
-javax.jcr.tck.NodeUUIDTest.testSaveMovedRefNode.propertyname1=foobar
-# nodetype that has nodetype mix:referenceable assigned
-
-# Test class: NodeOrderableChildNodesTest
-# nodetype that supports orderable child nodes
-javax.jcr.tck.NodeOrderableChildNodesTest.nodetype2=nt:unstructured
-# valid node type that can be added as child of nodetype 2
-javax.jcr.tck.NodeOrderableChildNodesTest.nodetype3=nt:unstructured
-
-# Test class: NodeOrderableChildNodesTest
-# Test method: testOrderBeforeUnsupportedRepositoryOperationException
-# nodetype that does not allow ordering of child nodes
-javax.jcr.tck.NodeOrderableChildNodesTest.testOrderBeforeUnsupportedRepositoryOperationException.nodetype2=nt:folder
-# valid node type that can be added as child of nodetype 2
-javax.jcr.tck.NodeOrderableChildNodesTest.testOrderBeforeUnsupportedRepositoryOperationException.nodetype3=nt:hierarchyNode
-
-# Test class: SetPropertyNodeTest
-# nodetype which is referenceable
-javax.jcr.tck.SetPropertyNodeTest.nodetype=test:setProperty
-
-# Test class: SetPropertyValueTest
-# property that allows multiple values
-javax.jcr.tck.SetPropertyValueTest.propertyname2=test:multiProperty
-javax.jcr.tck.SetPropertyValueTest.nodetype=test:setProperty
-
-# Test class: SetPropertyStringTest
-# property that allows multiple values
-javax.jcr.tck.SetPropertyStringTest.propertyname2=test:multiProperty
-javax.jcr.tck.SetPropertyStringTest.nodetype=test:setProperty
-
-# Test class: WorkspaceCloneSameNameSibsTest
-javax.jcr.tck.WorkspaceCloneSameNameSibsTest.sameNameSibsFalseNodeType=test:sameNameSibsFalseChildNodeDefinition
-javax.jcr.tck.WorkspaceCloneSameNameSibsTest.sameNameSibsTrueNodeType=nt:unstructured
-
-# Test class: WorkspaceCopyBetweenWorkspacesSameNameSibsTest
-javax.jcr.tck.WorkspaceCopyBetweenWorkspacesSameNameSibsTest.sameNameSibsFalseNodeType=test:sameNameSibsFalseChildNodeDefinition
-javax.jcr.tck.WorkspaceCopyBetweenWorkspacesSameNameSibsTest.sameNameSibsTrueNodeType=nt:unstructured
-
-# Test class: WorkspaceCopySameNameSibsTest
-javax.jcr.tck.WorkspaceCopySameNameSibsTest.sameNameSibsFalseNodeType=test:sameNameSibsFalseChildNodeDefinition
-javax.jcr.tck.WorkspaceCopySameNameSibsTest.sameNameSibsTrueNodeType=nt:unstructured
-
-# Test class: WorkspaceMoveSameNameSibsTest
-javax.jcr.tck.WorkspaceMoveSameNameSibsTest.sameNameSibsFalseNodeType=test:sameNameSibsFalseChildNodeDefinition
-javax.jcr.tck.WorkspaceMoveSameNameSibsTest.sameNameSibsTrueNodeType=nt:unstructured
-
-# Test class: RepositoryLoginTest
-javax.jcr.tck.RepositoryLoginTest.testroot=/testdata
-
-# Test class: RootNodeTest
-javax.jcr.tck.RootNodeTest.testroot=/testdata
-
-# Test class: ReferenceableRootNodesTest
-javax.jcr.tck.ReferenceableRootNodesTest.testroot=/testdata
-
-# Test class: ExportDocViewTest
-javax.jcr.tck.ExportDocViewTest.testroot=/testdata
-
-# ------------------------------------------------------------------------------
-# observation configuration
-# ------------------------------------------------------------------------------
-
-# Test class: AddEventListenerTest
-# Test method: testNodeType
-javax.jcr.tck.AddEventListenerTest.testNodeType.nodetype2=nt:folder
-
-# Configuration settings for the serialization.
-# Note that the serialization test tries to use as many features of the repository
-# as possible, but fails silently if a feature is not available. You have to
-# specify all of the following configuration entries, even if your repository does
-# not support the feature that is associated with them.
-
-# Root node for the example tree
-javax.jcr.tck.SerializationTest.testroot=/testdata/serialization
-
-# Node type to use for the example tree. Specify a node type that allows complex trees and all property types if possible
-javax.jcr.tck.SerializationTest.nodetype=nt:unstructured
-
-# Name of the nodes for source and target tree
-javax.jcr.tck.SerializationTest.sourceFolderName=source
-javax.jcr.tck.SerializationTest.targetFolderName=target
-javax.jcr.tck.SerializationTest.rootNodeName=test
-
-# List the properties whose values may change during serialization/deserialization. For example,
-# the UUID of a node is unique in the repository, so it will have to change when you re-import
-# a tree at a different location.
-javax.jcr.tck.SerializationTest.propertyValueMayChange= jcr:created jcr:uuid jcr:versionHistory jcr:baseVersion jcr:predecessors P_Reference
-
-# List all properties which are skipped during xml import according specification chapter 7.3.3
-javax.jcr.tck.SerializationTest.propertySkipped=
-
-# The name of the test node types. For easier diagnostics, the node types have names
-# that tell you the kind of information they store
-javax.jcr.tck.SerializationTest.nodeTypesTestNode=NodeTypes
-javax.jcr.tck.SerializationTest.mixinTypeTestNode=MixinTypes
-javax.jcr.tck.SerializationTest.propertyTypesTestNode=PropertyTypes
-javax.jcr.tck.SerializationTest.sameNameChildrenTestNode=SameNameChildren
-javax.jcr.tck.SerializationTest.multiValuePropertiesTestNode=MultiValueProperties
-javax.jcr.tck.SerializationTest.referenceableNodeTestNode=ReferenceableNode
-javax.jcr.tck.SerializationTest.orderChildrenTestNode=OrderChildren
-javax.jcr.tck.SerializationTest.namespaceTestNode=Namespace
-
-# The name of the test property types.
-javax.jcr.tck.SerializationTest.stringTestProperty=P_String
-javax.jcr.tck.SerializationTest.binaryTestProperty=P_Binary
-javax.jcr.tck.SerializationTest.dateTestProperty=P_Date
-javax.jcr.tck.SerializationTest.longTestProperty=P_Long
-javax.jcr.tck.SerializationTest.doubleTestProperty=P_Double
-javax.jcr.tck.SerializationTest.booleanTestProperty=P_Boolean
-javax.jcr.tck.SerializationTest.nameTestProperty=P_Name
-javax.jcr.tck.SerializationTest.pathTestProperty=P_Path
-javax.jcr.tck.SerializationTest.referenceTestProperty=P_Reference
-javax.jcr.tck.SerializationTest.multiValueTestProperty=P_MultiValue
-
-# node type not allowing same name sibs
-javax.jcr.tck.SerializationTest.sameNameSibsFalseChildNodeDefinition=test:sameNameSibsFalseChildNodeDefinition
-
-# Test method: testVersioningExceptionSessionFileChild
-# specified nodetype must be versionable and allow child nodes of the same type.
-javax.jcr.tck.SerializationTest.testVersioningExceptionSessionFileChild.nodetype=test:versionable
-
-# Test method: testVersioningExceptionSessionFileParent
-# specified nodetype must be versionable and allow child nodes of the same type.
-javax.jcr.tck.SerializationTest.testVersioningExceptionSessionFileParent.nodetype=test:versionable
-
-# Test method: testSessionImportXmlOverwriteException
-# requires a node type that does not allow same name siblings
-javax.jcr.tck.SerializationTest.testSessionImportXmlOverwriteException.nodetype=nt:folder
-
-# Test class: ExportSysViewTest
-javax.jcr.tck.ExportSysViewTest.testroot=/testdata
-
-# ==============================================================================
-# JAVAX.JCR.QUERY CONFIGURATION
-# ==============================================================================
-
-javax.jcr.tck.nodetype.testroot=/testdata
-
-# ==============================================================================
-# JAVAX.JCR.QUERY CONFIGURATION
-# ==============================================================================
-
-# Test class: SaveTest
-# Test method: testConstraintViolationException
-# Specified node type must not allow child nodes.
-javax.jcr.tck.SaveTest.testConstraintViolationException.nodetype=nt:query
-
-# Test class: XPathQueryLevel1Test
-javax.jcr.tck.XPathQueryLevel1Test.testroot=/testdata/query
-
-# Test class: XPathDocOrderTest
-javax.jcr.tck.XPathDocOrderTest.testroot=/testdata/query
-
-# Test class: XPathPosIndexTest
-javax.jcr.tck.XPathPosIndexTest.testroot=/testdata/query
-
-# Test class: XPathOrderByTest
-javax.jcr.tck.XPathOrderByTest.testroot=/testdata/query
-
-# Test class: XPathSyntaxTest
-javax.jcr.tck.XPathSyntaxTest.testroot=/testdata/query
-
-# Test class: XPathJcrPathTest
-javax.jcr.tck.XPathJcrPathTest.testroot=/testdata
-
-# Test class: SQLQueryLevel1Test
-javax.jcr.tck.SQLQueryLevel1Test.testroot=/testdata/query
-
-# Test class: SQLSyntaxTest
-javax.jcr.tck.SQLSyntaxTest.testroot=/testdata/query
-
-# Test class: SQLOrderByTest
-javax.jcr.tck.SQLOrderByTest.testroot=/testdata/query
-
-# Test class: DerefQueryLevel1Test
-javax.jcr.tck.DerefQueryLevel1Test.testroot=/testdata
-
-# Test class: GetLanguageTest
-javax.jcr.tck.GetLanguageTest.testroot=/testdata
-
-# Test class: GetPersistentQueryPathLevel1Test
-javax.jcr.tck.GetPersistentQueryPathLevel1Test.testroot=/testdata
-
-# Test class: GetPropertyNamesTest
-javax.jcr.tck.GetPropertyNamesTest.testroot=/testdata
-
-# Test class: GetStatementTest
-javax.jcr.tck.GetStatementTest.testroot=/testdata
-
-# Test class: GetSupportedQueryLanguagesTest
-javax.jcr.tck.GetSupportedQueryLanguagesTest.testroot=/testdata
-
-# Test class: SQLJcrPathTest
-javax.jcr.tck.SQLJcrPathTest.testroot=/testdata
-
-# Test class: SQLPathTest
-javax.jcr.tck.SQLPathTest.testroot=/testdata
-
-# Test class: PredicatesTest
-javax.jcr.tck.PredicatesTest.testroot=/testdata
-
-# Test class: SimpleSelectionTest
-javax.jcr.tck.SimpleSelectionTest.testroot=/testdata
-
-# ==============================================================================
-# JAVAX.JCR.VERSIONING CONFIGURATION
-# ==============================================================================
-
-# nodetye that is versionable. if it is not, an attempt is made to create versionable nodes
-# by adding a mix:versionable mixin-type.
-# NOTE: javax.jcr.tck.nodetype must define a non-versionable nodetype!
-javax.jcr.tck.version.versionableNodeType=test:versionable
-javax.jcr.tck.version.propertyValue=aPropertyValue
-
-# testroot for the version package
-# the test root must allow versionable and non-versionable nodes being created below
-javax.jcr.tck.version.testroot=/testroot
-
-# 3 nodes (nodeName1, nodeName2, nodeName3 with nt=versionableNodeType / nt=nonVersionableNodeType will be cloned to 2nd workspace
-# nodename1 > used to persistently create versionable node below testroot
-# nodename2 > used to create second versionable node below testroot (used for restore/workspace.restore with uuid-conflict)
-# nodename3 > used to persistently create non-versionable node below testroot
-javax.jcr.tck.version.nodename1=versionableNodeName1
-javax.jcr.tck.version.nodename2=versionableNodeName2
-javax.jcr.tck.version.nodename3=nonVersionableNodeName1
-
-# nodename 4: versionabel child-node of the first versionable node with nodeName1 and nodetype 'versionableNodeType'
-# used for:
-# + creation of a node in the 2nd workspace, that does not exist in the first workspace
-# + creation of a node in the 2nd workspace, in order to test uuid-conflicts with Workspace.restore.
-# + creation of a sub-node in the default workspace, in order to test uuid-conflicts with Node.restore.
-# + NOTE: the nodetype with 'versionableNodeType' must define its children nodes to either have COPY or VERSION
-#         OPV behaviour in order to successfully test Node.restore and Workspace.restore with uuid conflict.
-javax.jcr.tck.version.nodename4=childNodeName
-
-# path to existing String-properties and a new value for the property, that allows to test the indicated OPV behaviour
-javax.jcr.tck.OnParentVersionAbortTest.propertyname1=test:abortOnParentVersionProp
-javax.jcr.tck.OnParentVersionComputeTest.propertyname1=test:computeOnParentVersionProp
-javax.jcr.tck.OnParentVersionCopyTest.propertyname1=test:copyOnParentVersionProp
-javax.jcr.tck.OnParentVersionIgnoreTest.propertyname1=test:ignoreOnParentVersionProp
-javax.jcr.tck.OnParentVersionInitializeTest.propertyname1=test:initializeOnParentVersionProp
-
-# Test class: RestoreTest
-# Test method: testRestoreWithUUIDConflict
-# nodename4 must be the name of a child node with a OPV definition COPY or VERSION
-javax.jcr.tck.RestoreTest.testRestoreWithUUIDConflict.nodename4=test:versionOnParentVersion
-
-# config for nodes that show the indicated OPV behaviour:
-# nodes are added in order to test the versioning behaviour indicated by the test-class name.
-# NOTE:
-# - nodename4 is uses as name for the childnode
-# - nodetype is used as nodetype name for the childnode
-# - the specified child node is created below nodename1 with versionableNodeType
-#   the versionableNodeType and/or nodename1 may be overwritten with the individual
-#   testclass below.
-javax.jcr.tck.OnParentVersionCopyTest.nodename4=test:copyOnParentVersion
-javax.jcr.tck.OnParentVersionCopyTest.nodetype=nt:unstructured
-javax.jcr.tck.OnParentVersionAbortTest.nodename4=test:abortOnParentVersion
-javax.jcr.tck.OnParentVersionAbortTest.nodetype=nt:unstructured
diff --git a/contrib/tck-webapp/src/webapp/WEB-INF/content-repository/log4j.properties b/contrib/tck-webapp/src/webapp/WEB-INF/content-repository/log4j.properties
deleted file mode 100644
index 2728ce9..0000000
--- a/contrib/tck-webapp/src/webapp/WEB-INF/content-repository/log4j.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-# Set root logger level to DEBUG and its only appender to A1.
-log4j.rootLogger=INFO, stdout
-#log4j.rootLogger=DEBUG, stdout, file
-#log4j.rootLogger=ERROR, stdout, file
-
-# 'stdout' is set to be a ConsoleAppender.
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-
-# 'stdout' uses PatternLayout
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%d{dd.MM.yyyy HH:mm:ss} *%-5p* [%t] %c{1}: %m (%F, line %L)\n
-
-# 'file' is set to be a FileAppender.
-log4j.appender.file=org.apache.log4j.FileAppender
-log4j.appender.file.File=jcr.log
-
-# 'file' uses PatternLayout.
-log4j.appender.file.layout=org.apache.log4j.PatternLayout
-log4j.appender.file.layout.ConversionPattern=%d{dd.MM.yyyy HH:mm:ss} *%-5p* [%t] %c{1}: %m (%F, line %L)\n
-
diff --git a/contrib/tck-webapp/src/webapp/WEB-INF/content-repository/repository.xml b/contrib/tck-webapp/src/webapp/WEB-INF/content-repository/repository.xml
deleted file mode 100644
index ec21456..0000000
--- a/contrib/tck-webapp/src/webapp/WEB-INF/content-repository/repository.xml
+++ /dev/null
@@ -1,234 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!-- <!DOCTYPE Repository PUBLIC "-//The Apache Software Foundation//DTD Repository//EN" "file://config.dtd"> -->
-<!DOCTYPE Repository [
-    <!--
-        the Repository element configures a repository instance;
-        individual workspaces of the repository are configured through
-        separate configuration files called workspace.xml which are
-        located in a subfolder of the workspaces root directory
-        (see Workspaces element).
-
-        it consists of
-
-            a FileSystem element (the virtual file system
-            used by the repository to persist global state such as
-            registered namespaces, custom node types, etc..
-
-            a Security element that specifies the name of the app-entry
-            in the JAAS config and the access manager
-
-            a Workspaces element that specifies to the location of
-            workspaces root directory and the name of default workspace
-
-            a Workspace element that is used as a workspace configuration
-            template; it is used to create the initial workspace if there's
-            no workspace yet and for creating additional workspaces through
-            the api
-
-            a SearchIndex element that is used for configuring per workspace
-            Indexing-related settings
-
-            a Versioning element that is used for configuring
-            versioning-related settings
-    -->
-    <!ELEMENT Repository (FileSystem,Security,Workspaces,Workspace,Versioning,SearchIndex?)>
-
-    <!--
-        a virtual file system
-    -->
-    <!ELEMENT FileSystem (param*)>
-    <!ATTLIST FileSystem
-      class CDATA #REQUIRED>
-
-    <!--
-        the Security element specifies the name (appName attribute)
-        of the JAAS configuration app-entry for this repository.
-
-        it also specifies the access manager to be used (AccessManager element).
-    -->
-    <!ELEMENT Security (AccessManager, LoginModule?)>
-    <!ATTLIST Security
-      appName CDATA #REQUIRED>
-
-    <!--
-        the AccessManager element configures the access manager to be used by
-        this repository instance; the class attribute specifies the FQN of the
-        class implementing the AccessManager interface
-    -->
-    <!ELEMENT AccessManager (param*)>
-    <!ATTLIST AccessManager
-      class CDATA #REQUIRED>
-
-    <!--
-        generic parameter (name/value pair)
-    -->
-    <!ELEMENT param EMPTY>
-    <!ATTLIST param
-      name CDATA #REQUIRED
-      value CDATA #REQUIRED>
-
-     <!--
-        the LoginModule element optionally specifies a JAAS login module to
-        authenticate users. This feature allows the use of Jackrabbit in a
-        non-JAAS environment.
-    -->
-    <!ELEMENT LoginModule (param*)>
-    <!ATTLIST LoginModule
-      class CDATA #REQUIRED>
-
-   <!--
-        the Workspaces element specifies the workspaces root directory
-        (rootPath attribute) and the name of the default workspace
-        (defaultWorkspace attribute).
-
-        individual workspaces are configured through individual workspace.xml
-        files located in a subfolder each of the workspaces root directory.
-    -->
-    <!ELEMENT Workspaces EMPTY>
-    <!ATTLIST Workspaces
-      rootPath CDATA #REQUIRED
-      defaultWorkspace CDATA #REQUIRED>
-
-    <!--
-        the Workspace element serves as a workspace configuration template;
-        it is used to create the initial workspace if there's no workspace yet
-        and for creating additional workspaces through the api
-    -->
-    <!ELEMENT Workspace (FileSystem,PersistenceManager,SearchIndex?)>
-    <!ATTLIST Workspace
-      name CDATA #REQUIRED>
-
-    <!--
-        the PersistenceManager element configures the persistence manager
-        to be used for the workspace; the class attribute specifies the
-        FQN of the class implementing the PersistenceManager interface
-    -->
-    <!ELEMENT PersistenceManager (param*)>
-    <!ATTLIST PersistenceManager
-      class CDATA #REQUIRED>
-
-    <!--
-        the SearchIndex element specifies the locaction of the search index
-        (used by the QueryHandler); the class attribute specifies the
-        FQN of the class implementing the QueryHandler interface.
-    -->
-    <!ELEMENT SearchIndex (param*,FileSystem?)>
-    <!ATTLIST SearchIndex
-      class CDATA #REQUIRED>
-
-    <!--
-        the Versioning element configures the persistence manager
-        to be used for persisting version state
-    -->
-    <!ELEMENT Versioning (FileSystem, PersistenceManager)>
-    <!ATTLIST Versioning
-      rootPath CDATA #REQUIRED
-    >
-]>
-<!-- Example Repository Configuration File -->
-<Repository>
-    <!--
-        virtual file system where the repository stores global state
-        (e.g. registered namespaces, custom node types, etc.)
-    -->
-    <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
-        <param name="path" value="${rep.home}/repository"/>
-    </FileSystem>
-
-    <!--
-        security configuration
-    -->
-    <Security appName="Jackrabbit">
-        <!--
-            access manager:
-            class: FQN of class implementing the AccessManager interface
-        -->
-        <AccessManager class="org.apache.jackrabbit.core.security.SimpleAccessManager">
-            <!-- <param name="config" value="${rep.home}/access.xml"/> -->
-        </AccessManager>
-
-        <LoginModule class="org.apache.jackrabbit.core.security.SimpleLoginModule">
-           <!-- anonymous user name ('anonymous' is the default value) -->
-           <param name="anonymousId" value="anonymous"/>
-        </LoginModule>
-    </Security>
-
-    <!--
-        location of workspaces root directory and name of default workspace
-    -->
-    <Workspaces rootPath="${rep.home}/workspaces" defaultWorkspace="default"/>
-    <!--
-        workspace configuration template:
-        used to create the initial workspace if there's no workspace yet
-    -->
-    <Workspace name="${wsp.name}">
-        <!--
-            virtual file system of the workspace:
-            class: FQN of class implementing the FileSystem interface
-        -->
-        <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
-            <param name="path" value="${wsp.home}"/>
-        </FileSystem>
-        <!--
-            persistence manager of the workspace:
-            class: FQN of class implementing the PersistenceManager interface
-        -->
-        <!--
-        <PersistenceManager class="org.apache.jackrabbit.core.state.xml.XMLPersistenceManager"/>
-        -->
-        <!--
-        <PersistenceManager class="org.apache.jackrabbit.core.state.mem.InMemPersistenceManager">
-            <param name="initialCapacity" value="100000"/>
-            <param name="loadFactor" value="0.3"/>
-            <param name="persistent" value="true"/>
-        </PersistenceManager>
-        -->
-        <PersistenceManager class="org.apache.jackrabbit.core.state.db.DerbyPersistenceManager">
-           <param name="url" value="jdbc:derby:${wsp.home}/db;create=true"/>
-           <param name="schemaObjectPrefix" value="${wsp.name}_"/>
-        </PersistenceManager>
-        <!--
-            Search index and the file system it uses.
-            class: FQN of class implementing the QueryHandler interface
-        -->
-        <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
-            <param name="path" value="${wsp.home}/index"/>
-        </SearchIndex>
-    </Workspace>
-
-    <!--
-        Configures the versioning
-    -->
-    <Versioning rootPath="${rep.home}/version">
-        <!--
-            Configures the filesystem to use for versioning for the respective
-            persistence manager
-        -->
-        <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
-            <param name="path" value="${rep.home}/version"/>
-        </FileSystem>
-
-        <!--
-            Configures the perisistence manager to be used for persisting version state.
-            Please note that the current versioning implementation is based on
-            a 'normal' persistence manager, but this could change in future
-            implementations.
-        -->
-        <PersistenceManager class="org.apache.jackrabbit.core.state.obj.ObjectPersistenceManager"/>
-
-    </Versioning>
-
-    <!--
-        Search index for content that is shared repository wide
-        (/jcr:system tree, contains mainly versions)
-        
-        The same parameters are supported as in the search index configuration
-        inside the workspace definition element.
-        
-        This element is optional. If omitted, the /jcr:system tree will not be
-        indexed and no results will be returned for that tree!
-    -->
-    <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
-        <param name="path" value="${rep.home}/repository/index"/>
-    </SearchIndex>
-</Repository>
diff --git a/contrib/tck-webapp/src/webapp/WEB-INF/tck/log4j.properties b/contrib/tck-webapp/src/webapp/WEB-INF/tck/log4j.properties
deleted file mode 100644
index 057f204..0000000
--- a/contrib/tck-webapp/src/webapp/WEB-INF/tck/log4j.properties
+++ /dev/null
@@ -1,27 +0,0 @@
-# Set root logger level to DEBUG and its only appender to A1.
-log4j.rootLogger=INFO, stdout
-#log4j.rootLogger=DEBUG, stdout, file
-#log4j.rootLogger=ERROR, stdout, file
-log4j.logger.org.apache.jackrabbit.test.testwebapp.j2ee.TesterServlet.login=INFO, login
-
-# 'stdout' is set to be a ConsoleAppender.
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-
-# 'stdout' uses PatternLayout
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%d{dd.MM.yyyy HH:mm:ss} *%-5p* [%t] %c{1}: %m (%F, line %L)\n
-
-# 'file' is set to be a FileAppender.
-log4j.appender.file=org.apache.log4j.FileAppender
-log4j.appender.file.File=jcr.log
-
-# 'file' uses PatternLayout.
-log4j.appender.file.layout=org.apache.log4j.PatternLayout
-log4j.appender.file.layout.ConversionPattern=%d{dd.MM.yyyy HH:mm:ss} *%-5p* [%t] %c{1}: %m (%F, line %L)\n
-
-# 'login' is set to be a FileAppender.
-log4j.appender.login=org.apache.log4j.FileAppender
-log4j.appender.login.File=tck/home/login.log
-log4j.appender.login.layout=org.apache.log4j.PatternLayout
-log4j.appender.login.layout.ConversionPattern=%d{dd.MM.yyyy HH:mm:ss} *%-5p* [%t] %c{1}: %m (%F, line %L)\n
-
diff --git a/contrib/tck-webapp/src/webapp/WEB-INF/web.xml b/contrib/tck-webapp/src/webapp/WEB-INF/web.xml
deleted file mode 100644
index 695fb9e..0000000
--- a/contrib/tck-webapp/src/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
-<web-app>
-    <display-name>TCK web application</display-name>
-
-    <!-- ====================================================================== -->
-    <!-- R E P O S I T O R Y   S E R V L E T                                    -->
-    <!-- ====================================================================== -->
-    <servlet>
-        <servlet-name>Repository</servlet-name>
-            <description>repository servlet that starts the repository and registers it to JNDI.</description>
-        <servlet-class>org.apache.jackrabbit.tck.j2ee.RepositoryServlet</servlet-class>
-
-        <init-param>
-            <param-name>log4j-config</param-name>
-            <param-value>/WEB-INF/content-repository/log4j.properties</param-value>
-            <description>initial log4j configuration</description>
-        </init-param>
-
-        <init-param>
-            <param-name>repository-config</param-name>
-            <param-value>/WEB-INF/content-repository/repository.xml</param-value>
-            <description>the repository config location</description>
-        </init-param>
-
-        <init-param>
-            <param-name>repository-home</param-name>
-            <param-value>tck/content-repository</param-value>
-            <description>the repository home</description>
-        </init-param>
-
-        <init-param>
-            <param-name>repository-name</param-name>
-            <param-value>tck.repository</param-value>
-            <description>Repository Name under which the repository is registered via JNDI</description>
-        </init-param>
-
-        <init-param>
-            <param-name>jcr-userid</param-name>
-            <param-value>superuser</param-value>
-            <description>User to read/write from the repository where test results and config is stored</description>
-        </init-param>
-
-        <init-param>
-            <param-name>jcr-password</param-name>
-            <param-value>superuser</param-value>
-            <description>User password</description>
-        </init-param>
-
-        <init-param>
-            <param-name>submit-url</param-name>
-            <param-value>http://www.day.com/en/product/jsr_170/tck/tck_submit.html</param-value>
-            <description>Url pointing to test result submit receiver</description>
-        </init-param>
-
-        <init-param>
-            <param-name>tck-webapp-jar-path</param-name>
-            <param-value>/WEB-INF/lib/tck-webapp-1.0.jar</param-value>
-            <description>Path to the tck webapp jar, where the test sources reside</description>
-        </init-param>
-
-        <init-param>
-            <param-name>exclude-list-url</param-name>
-            <param-value>http://www.day.com/en/product/jsr_170/tck/excludelist</param-value>
-            <description>Url pointing to exclude list provider</description>
-        </init-param>
-
-        <init-param>
-            <param-name>check-tck-version-gif</param-name>
-            <param-value>http://dev.day.com/tck.gif</param-value>
-            <description>Url pointing to the tck version checker</description>
-        </init-param>
-
-        <init-param>
-            <param-name>check-excludelist-version-gif</param-name>
-            <param-value>http://dev.day.com/excludelist.gif</param-value>
-            <description>Url pointing to the excludelist version checker</description>
-        </init-param>
-
-        <init-param>
-            <param-name>tck-update-page</param-name>
-            <param-value>http://www.day.com/en/product/jsr_170/tck/tckupdate</param-value>
-            <description>Url pointing to the tck update page</description>
-        </init-param>
-
-        <load-on-startup>1</load-on-startup>
-    </servlet>
-</web-app>
diff --git a/contrib/tck-webapp/src/webapp/config.jsp b/contrib/tck-webapp/src/webapp/config.jsp
deleted file mode 100644
index 9fa8c5e..0000000
--- a/contrib/tck-webapp/src/webapp/config.jsp
+++ /dev/null
@@ -1,110 +0,0 @@
-<%--
-Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                    as applicable.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
---%><%@ page import="javax.jcr.Session,
-                 javax.jcr.Node,
-                 javax.jcr.NodeIterator,
-                 java.text.SimpleDateFormat,
-                 java.util.*,
-                 org.apache.jackrabbit.tck.WebAppTestConfig,
-                 org.apache.jackrabbit.test.JNDIRepositoryStub,
-                 org.apache.jackrabbit.tck.WebAppTestConfig,
-                 org.apache.jackrabbit.tck.j2ee.RepositoryServlet,
-                 org.apache.jackrabbit.tck.TestFinder,
-                 junit.framework.TestSuite"
-%><%@page session="false" %><%
-
-Session repSession = RepositoryServlet.getSession();
-if (repSession == null) {
-    return;
-}
-%>
-<html>
-    <head>
-        <link rel="stylesheet" href="docroot/ui/default.css" type="text/css" title="style" />
-        <script>
-            function showConfig(id) {
-                parent.config.document.location.href="config.jsp#" + id;
-            }
-        </script>
-    </head>
-    <body style="margin-top:0px;border-width:0px">
-        <table width="100%">
-            <tr>
-                <td colspan="3">
-                    <%
-                    // save test configuration
-                    WebAppTestConfig.save(request, repSession);
-
-                    // check for property additions
-                    String newid = request.getParameter("newid");
-                    String newvalue = request.getParameter("newvalue");
-                    if (newvalue != null && !"".equals(newvalue) && newid != null && !"".equals(newid)) {
-                        WebAppTestConfig.saveProperty(newid, newvalue, repSession);
-                    }
-
-                    // reset to default configuration (from properties file) if requested
-                    String resetConfig = request.getParameter("resetconfig");
-                    if (resetConfig != null && "yes".equals(resetConfig)) {
-                        WebAppTestConfig.resetConfiguration();
-                    }
-
-                    // load current configuration
-                    Map props = WebAppTestConfig.getCurrentConfig();
-                    %>
-                    <form name="configform" action="config.jsp" method="post">
-                        <table width="100%">
-                            <tr><th class="content" width="40%" colspan="2">Default Configuration</td></tr>
-                            <%
-                            // display default config
-                            for (int i = 0; i < WebAppTestConfig.propNames.length; i++) {
-                                String name = WebAppTestConfig.propNames[i];
-                                String value = (String) props.get(name);
-                                %><tr><td class="graph"><%= name %></td><td class="graph"><input class="input" name="<%= name %>" value="<%= value %>"></td></tr><%
-                            }
-
-                            // display test suite specific configs
-                            TestFinder tf = new TestFinder();
-                            tf.find(getServletConfig().getServletContext().getResource(RepositoryServlet.getTckWebappJarPath()).openStream(),
-                                    "TestAll.java");
-                            Iterator  tests = tf.getSuites().keySet().iterator();
-                            tests = tf.getSuites().keySet().iterator();
-
-                            while (tests.hasNext()) {
-                                String key = (String) tests.next();
-                                TestSuite t = (TestSuite) tf.getSuites().get(key);
-                                Map configs = WebAppTestConfig.getTestCaseSpecificConfigs(t);
-                                if (configs.size() > 0) {
-                                    %><tr><th class="content" colspan="2"><a id="<%= key  %>"></a><%= key  %></td></tr><%
-
-                                    Iterator citr = configs.keySet().iterator();
-                                    while (citr.hasNext()) {
-                                        String ckey = (String) citr.next();
-                                        // split title if too long
-                                        String title = (ckey.length() > 70) ? ckey.substring(0, 70) + " " + ckey.substring(71) : ckey;
-                                        %><tr><td class="graph"><%= title %></td><td class="graph"><input class="input" name="<%= ckey %>" value="<%= configs.get(ckey) %>"></td><%
-                                    }
-                                    %><tr><td class="graph" valign="top"><input class="input" id="newid<%= key  %>"></td><td class="graph"><input class="input" id="newvalue<%= key  %>"></td></tr>
-                                      <tr><td class="content" colspan="2" align="right"><input type="button" value="add" class="submit" onclick="window.location.href='config.jsp?newid='+document.getElementById('newid<%= key  %>').value+'&newvalue='+document.getElementById('newvalue<%= key  %>').value;"></td></tr><%
-                                }
-                            }
-                            %><tr><td class="content">Set default configuration</td></td><td class="content" align="right"><input type="button" value="reset" class="submit" onclick="window.location.href='config.jsp?resetconfig=yes';"></td></tr>
-                        </table>
-                    </form>
-                </td>
-            </tr>
-        </table>
-    </body>
-</html>
\ No newline at end of file
diff --git a/contrib/tck-webapp/src/webapp/docroot/imgs/banner_left.jpg b/contrib/tck-webapp/src/webapp/docroot/imgs/banner_left.jpg
deleted file mode 100644
index f050a8d..0000000
--- a/contrib/tck-webapp/src/webapp/docroot/imgs/banner_left.jpg
+++ /dev/null
Binary files differ
diff --git a/contrib/tck-webapp/src/webapp/docroot/imgs/banner_right.jpg b/contrib/tck-webapp/src/webapp/docroot/imgs/banner_right.jpg
deleted file mode 100644
index c77b393..0000000
--- a/contrib/tck-webapp/src/webapp/docroot/imgs/banner_right.jpg
+++ /dev/null
Binary files differ
diff --git a/contrib/tck-webapp/src/webapp/docroot/imgs/clear.png b/contrib/tck-webapp/src/webapp/docroot/imgs/clear.png
deleted file mode 100644
index 2b7c47d..0000000
--- a/contrib/tck-webapp/src/webapp/docroot/imgs/clear.png
+++ /dev/null
Binary files differ
diff --git a/contrib/tck-webapp/src/webapp/docroot/imgs/error.png b/contrib/tck-webapp/src/webapp/docroot/imgs/error.png
deleted file mode 100644
index 577366c..0000000
--- a/contrib/tck-webapp/src/webapp/docroot/imgs/error.png
+++ /dev/null
Binary files differ
diff --git a/contrib/tck-webapp/src/webapp/docroot/imgs/failure.png b/contrib/tck-webapp/src/webapp/docroot/imgs/failure.png
deleted file mode 100644
index 1c3413a..0000000
--- a/contrib/tck-webapp/src/webapp/docroot/imgs/failure.png
+++ /dev/null
Binary files differ
diff --git a/contrib/tck-webapp/src/webapp/docroot/imgs/green.png b/contrib/tck-webapp/src/webapp/docroot/imgs/green.png
deleted file mode 100644
index bc43018..0000000
--- a/contrib/tck-webapp/src/webapp/docroot/imgs/green.png
+++ /dev/null
Binary files differ
diff --git a/contrib/tck-webapp/src/webapp/docroot/imgs/pass.png b/contrib/tck-webapp/src/webapp/docroot/imgs/pass.png
deleted file mode 100644
index 11b20c2..0000000
--- a/contrib/tck-webapp/src/webapp/docroot/imgs/pass.png
+++ /dev/null
Binary files differ
diff --git a/contrib/tck-webapp/src/webapp/docroot/imgs/red.png b/contrib/tck-webapp/src/webapp/docroot/imgs/red.png
deleted file mode 100644
index f7b19ce..0000000
--- a/contrib/tck-webapp/src/webapp/docroot/imgs/red.png
+++ /dev/null
Binary files differ
diff --git a/contrib/tck-webapp/src/webapp/docroot/js/server_call.js b/contrib/tck-webapp/src/webapp/docroot/js/server_call.js
deleted file mode 100644
index e27814e..0000000
--- a/contrib/tck-webapp/src/webapp/docroot/js/server_call.js
+++ /dev/null
@@ -1,33 +0,0 @@
-var uptodate;

-

-function startTest(dlurl, useExcludeList) {

-    if (!useExcludeList) {

-        window.graph.document.location.href="graph.jsp?mode=testnow&useExcludeList=no";

-    } else {

-        if (uptodate) {

-            window.graph.document.location.href="graph.jsp?mode=testnow&useExcludeList=yes";

-        } else {

-            if (window.confirm("The Exclude List is out of date.\nPress OK to continue testing or CANCEL to get pointed to the download page")) {

-                window.graph.document.location.href="graph.jsp?mode=testnow&useExcludeList=yes";

-            } else {

-                var dlwin = window.open(dlurl,'DownloadExcludeList','width=800,height=600')

-            }

-        }

-    }

-}

-

-function isUpToDate() {

-    uptodate = true;

-}

-

-function isOutOfDate() {

-    uptodate = false;

-}

-

-function excludeListIsUpToDate(url) {

-    var tester = new Image();

-    tester.onload = isOutOfDate;

-    tester.onerror = isUpToDate;

-    tester.src = url;

-}

-

diff --git a/contrib/tck-webapp/src/webapp/docroot/ui/default.css b/contrib/tck-webapp/src/webapp/docroot/ui/default.css
deleted file mode 100644
index 8325501..0000000
--- a/contrib/tck-webapp/src/webapp/docroot/ui/default.css
+++ /dev/null
@@ -1,514 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* CSS Document */
-
-body
-	{
-	font-family: Verdana, Arial, Helvetica, san-serif;
-	background-color: #ffffff;
-	padding: 0px;
-	margin: 0px;
-	margin-top: 15px;
-	vertical-align: top;
-	text-align: left;
-	}
-
-br
-    {
-    line-height:20px;
-    }
-
-table
-	{
-	text-align: left;
-	padding: 0px;
-	margin: 0px;
-	border: 0px solid #66dd44;
-	}
-
-
-table.content
-	{
-	postion: absolute;
-	font-size: 10px;
-	line-height: 13px;
-	border: 0px solid #66dd44;
-	border-top: 1px solid #cccccc;
-	padding: 0px;
-	margin: 0px;
-	margin-top: 26px;
-	margin-bottom: 26px;
-	width: 718px;
-	text-align: left;
-	}
-
-td.content
-	{
-	color: #333333;
-	border: 0px solid #66dd44;
-	border-bottom: 1px solid #cccccc;
-	border-right: 0px solid #cccccc;
-	border-left: 0px solid #cccccc;
-	vertical-align: top;
-	padding: 3px;
-	padding-left: 10px;
-	}
-
-td.graph
-    {
-    font-size: 11px;
-    padding-left: 10px;
-    color: #333333;
-    }
-
-
-td.disabled
-    {
-    color:#999999;
-    }
-
-th.content
-	{
-	color: #333333;
-	border: 0px solid #66dd44;
-	border-bottom: 1px solid #cccccc;
-	text-align: left;
-	padding: 5px;
-	padding-left:10px;
-	}
-
-th.container
-    {
-    color:#6181A9;
-    background-color:#f0f0f0;
-    }
-
-th.important
-    {
-    color:#B81833;
-    }
-
-.important
-    {
-    color:#B81833;
-    }
-
-#maintable
-	{
-	postion: absolute;
-	font-size: 10px;
-	line-height: 13px;
-	border: 1px solid #000000;
-	padding: 0px;
-	margin: 0px;
-	width: 960px;
-	}
-
-
-
-.toolcell
-	{
-	font-size: 10px;
-	color: #999999;
-	line-height: 10px;
-	background-color: #000000;
-	height: 18px;
-	width: 960px;
-	padding: 0px;
-	padding-bottom: 1px;
-	text-align: left;
-	}
-
-.toolcell A:link
-	{
-	color: #C5E2EE;
-	text-decoration: none;
-	}
-
-.toolcell A:visited
-	{
-	color: #C5E2EE;
-	text-decoration: none;
-	}
-
-.toolcell A:hover
-	{
-	color: #99FF33;
-	text-decoration: none;
-	border-bottom: 1px solid;
-	}
-
-.toolcell A:active
-	{
-	color: #FFFFFF;
-	text-decoration: none;
-	}
-
-.leadcell
-	{
-	margin: 0px;
-	padding: 0px;
-	border: 0px solid #000000;
-	width: 720px;
-	height: 100px;
-	background-image: url('../imgs/banner_left.jpg');
-	vertical-align: top
-	}
-
-.leadcelltext
-	{
-	position: absolute;
-	border: 0px solid #000000;
-	font-size: 26px;
-	line-height: 32px;
-	margin-top: 5px;
-	margin-left: 8px;
-	color: #ffffff;
-	vertical-align: top;
-	}
-
-.logocell
-	{
-	border-left: 1px solid #000000;
-	width: 239px;
-	align:right
-	}
-
-#technavcell
-	{
-	font-size: 10px;
-	font-weight: bold;
-	border: 0px solid #000000;
-	border-top: 1px solid #000000;
-	height: 21px;
-	background-color: #6181A9;
-	}
-
-#technav
-	{
-	float: left;
-	display: block;
-	font-size: 10px;
-	line-height: 20px;
-	font-weight: bold;
-	color: #000000;
-	height: 21px;
-	border: 0px solid #000000;
-	padding: 0px;
-	background-color: #ffffff;
-	}
-.technavat
-	{
-	cursor:default;
-	float: left;
-	display: block;
-	font-size: 10px;
-	line-height: 20px;
-	font-weight: bold;
-	color: #000000;
-	height: 21px;
-	border: 0px solid #000000;
-	border-right: 1px solid #000000;
-	padding: 0px 10px 0px 10px;
-	background-color: #B6CAE4;
-	}
-#technav A:link
-	{
-	float: left;
-	display: block;
-	color: #ffffff;
-	border: 0px solid #000000;
-	border-right: 1px solid #000000;
-	height: 21px;
-	text-decoration: none;
-	padding: 0px 10px 0px 10px;
-	background-color: #6181A9;
-	}
-#technav A:visited
-	{
-	float: left;
-	display: block;
-	color: #ffffff;
-	border-right: 1px solid #000000;
-	height: 21px;
-	text-decoration: none;
-	padding: 0px 10px 0px 10px;
-	background-color: #6181A9;
-	}
-#technav A:hover
-	{
-	float: left;
-	display: block;
-	color: #ffffff;
-	border-right: 1px solid #000000;
-	height: 21px;
-	text-decoration: none;
-	padding: 0px 10px 0px 10px;
-	background-color: #000000;
-	}
-#technav A:active
-	{
-	float: left;
-	display: block;
-	color: #ffffff;
-	border-right: 1px solid #000000;
-	height: 21px;
-	text-decoration: none;
-	padding: 0px 10px 0px 10px;
-	background-color: #6181A9;
-	}
-
-.techcontentcell
-	{
-	width: 718px;
-	border: 0px solid #000000;
-	border-top: 1px solid #000000;
-	}
-
-.relatedcell
-	{
-	border-left: 1px solid #000000;
-	border-top: 1px solid #000000;
-	width: 239px;
-	background-color: #EBF0F6;
-	}
-
-.claimcell
-	{
-	width: 715px;
-	font-size: 10px;
-	color: #ffffff;
-	line-height: 10px;
-	background-color: #000000;
-	height: 18px;
-	padding: 0px;
-	padding-bottom: 1px;
-	}
-
-.claimcell A:link
-	{
-	color: #C5E2EE;
-	text-decoration: none;
-	}
-
-.claimcell A:visited
-	{
-	color: #C5E2EE;
-	text-decoration: none;
-	}
-
-.claimcell A:hover
-	{
-	color: #99FF33;
-	text-decoration: none;
-	border-bottom: 1px solid;
-	}
-
-.claimcell A:active
-	{
-	color: #FFFFFF;
-	text-decoration: none;
-	}
-
-/* CENTRAL CONTENT AREA STYLING */
-
-.content
-	{
-	position: relative;
-	margin: 25px;
-	font-size: 11px;
-	line-height: 16px;
-	color: #000000;
-	}
-
-.content A:link
-	{
-	color: #336600;
-	text-decoration: underline;
-	}
-
-.content A:visited
-	{
-	color: #666666;
-	text-decoration: underline;
-	}
-
-.content A:hover
-	{
-	color: #ffffff;
-	background-color: #336600;
-	text-decoration: none;
-	}
-
-.content A:active
-	{
-	color: #ffffff;
-	background-color: #000000;
-	text-decoration: none;
-	}
-
-
-
-/* TEXT STYLING */
-
-h1, h2, h3, h4, h5, h6, p
-
-	{
-	margin: 0px;
-	margin-bottom: 8px;
-	font-size: 11px;
-	line-height: 16px;
-	font-weight:bold;
-	}
-
-
-h1
-	{
-	color: #000000;
-	margin-top: 32px;
-	clear: left;
-	}
-
-
-h2
-	{
-	color: #336699;
-	}
-
-
-h3
-	{
-	color: #336699;
-	}
-
-p
-	{
-	font-size: 11px;
-	line-height: 16px;
-	font-weight: normal;
-	color: #000000;
-	}
-
-/* FORMS */
-
-form
-	{
-	font-size: 9px;
-	border-top: 0px solid #000000;
-	border-bottom: 0px solid #000000;
-	border-left: 0px solid #000000;
-	border-right: 0px solid #000000;
-	margin: 0;
-	padding: 0;
-	clear: left;
-	}
-select, textarea
-	{
-	font-family: Verdana, Arial, Helvetica, san-serif;
-	font-size: 9px;
-	font-weight: normal;
-	display: block;
-	float: left;
-	padding-top: 3px;
-	margin-bottom: 10px;
-	}
-.input
-	{
-	font-family: Verdana, Arial, Helvetica, san-serif;
-	font-size: 10px;
-	font-weight: normal;
-	color: #184054;
-	background-color: #f0f0f0;
-	border: 1px solid #999999;
-	border-bottom: 1px solid #cccccc;
-	border-right: 1px solid #cccccc;
-	width:400px;
-	}
-
-.submit
-	{
-	cursor:default;
-	width:60px;
-	font-family: Verdana, Arial, Helvetica, san-serif;
-	font-size: 10px;
-	font-weight: bold;
-	background-color: #f0f0f0;
-	height: 20px;
-	padding: 0px;
-	padding-bottom: 1px;
-	margin: 0px;
-	border: 1px solid #cccccc;
-	border-bottom: 1px solid #666666;
-	border-right: 1px solid #666666;
-	}
-
-input.important
-    {
-    background-color:#B81833;
-    color:#ffffff;
-    }
-
-select
-	{
-	color: #184054;
-	background-color: #f0f0f0;
-	border: 0px solid #999999;
-	}
-textarea
-	{
-	color: #184054;
-	background-color: #f0f0f0;
-	width: 500px;
-	height: 250px;
-	border: 1px solid #999999;
-	border-bottom: 1px solid #cccccc;
-	border-right: 1px solid #cccccc;
-	}
-.clearleft
-	{
-	clear: left;
-	}
-.clearboth
-	{
-	clear: both;
-	}
-
-.checkradio
-	{
-	background-color: #ffffff;
-	width: 20px;
-	padding: 0px;
-	padding-bottom: 10px;
-	margin: 0px;
-	margin-top: 2px;
-	border: 0px solid #999999;
-	}
-
-.checkradiotext
-	{
-	font-size: 9px;
-	font-weight: normal;
-	line-height: 11px;
-	width: 100px;
-	color: #000000;
-	padding: 0px;
-	padding-bottom: 10px;
-	margin: 0px;
-	margin-top: 4px;
-	border: 0px solid #999999;
-	}
diff --git a/contrib/tck-webapp/src/webapp/download.id b/contrib/tck-webapp/src/webapp/download.id
deleted file mode 100644
index 6059745..0000000
--- a/contrib/tck-webapp/src/webapp/download.id
+++ /dev/null
@@ -1 +0,0 @@
-download.id=jackrabbit_tck_check_out
\ No newline at end of file
diff --git a/contrib/tck-webapp/src/webapp/excludelisttest.jsp b/contrib/tck-webapp/src/webapp/excludelisttest.jsp
deleted file mode 100644
index ce3ac6f..0000000
--- a/contrib/tck-webapp/src/webapp/excludelisttest.jsp
+++ /dev/null
@@ -1,7 +0,0 @@
-<html>
-<body onload="parent.checkAndUpdate(document)">
-<div id="version">0.16.4</div>
-<div id="list">org.apache.jackrabbit.test.api.version.CheckoutTest,org.apache.jackrabbit.test.api.WorkspaceMoveTest#testMoveNodesLocked</div> 
-<div id="isUpToDate">yes</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/contrib/tck-webapp/src/webapp/graph.jsp b/contrib/tck-webapp/src/webapp/graph.jsp
deleted file mode 100644
index ad51f44..0000000
--- a/contrib/tck-webapp/src/webapp/graph.jsp
+++ /dev/null
@@ -1,353 +0,0 @@
-<%--
-Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                    as applicable.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
---%><%@ page import="junit.framework.Test,
-         junit.framework.TestSuite,
-         java.util.*,
-         junit.framework.TestCase,
-                     java.text.SimpleDateFormat,
-         org.apache.jackrabbit.tck.*,
-         org.apache.jackrabbit.tck.j2ee.RepositoryServlet,
-         java.io.ByteArrayOutputStream,
-                     javax.jcr.*,
-                     java.io.IOException,
-                     javax.xml.parsers.ParserConfigurationException,
-                     org.xml.sax.SAXException,
-                     java.io.ByteArrayInputStream"
-%><%@page session="false" %><%
-
-// get the repository session for read(config and test results) and write (config and test results) access
-Session repSession = RepositoryServlet.getSession();
-if (repSession == null) {
-    return;
-}
-
-// display mode:
-// - testnow : new test
-// - view: view results
-// - null: blank view
-String mode = request.getParameter("mode");
-
-%><html>
-    <head>
-        <link rel="stylesheet" href="docroot/ui/default.css" type="text/css" title="style" />
-        <script>
-            function showConfig(id) {
-                parent.config.document.location.href="config.jsp#" + id;
-            }
-        </script>
-    </head>
-    <body style="margin-top:0px;border-width:0px">
-    <%
-    // draw empty test grid
-    if (mode == null || (mode != null && mode.equals("testnow"))) {
-        // prepare test
-        TestFinder tf = new TestFinder();
-        tf.find(getServletConfig().getServletContext().getResource(RepositoryServlet.getTckWebappJarPath()).openStream(),
-                "TestAll.java");
-        Iterator  tests = tf.getSuites().keySet().iterator();
-
-        out.write("<table style=\"width:100%;\">");
-        tests = tf.getSuites().keySet().iterator();
-
-        while (tests.hasNext()) {
-            String key = (String) tests.next();
-            TestSuite t = (TestSuite) tf.getSuites().get(key);
-            Enumeration members = t.tests();
-            out.write("<tr><th class=\"content\" colspan=\"3\">" + t.toString() + "</th></tr>");
-
-            // list tests ordered by key (level1, level2, ....)
-            while (members.hasMoreElements()) {
-                TestSuite aTest = (TestSuite) members.nextElement();
-
-                out.write("<tr><td class=\"graph\" width=\"35%\" valign=\"top\">" +
-                        aTest.toString() + "</td><td>&nbsp;</td><td>");
-
-                Enumeration testMethods = aTest.tests();
-                while (testMethods.hasMoreElements()) {
-                    TestCase tc = (TestCase) testMethods.nextElement();
-                    String methodname = tc.getName();
-
-                    String id = methodname + "(" + aTest.getName() + ")";
-                    out.write("<img border=\"0\" id=\"" + id + "img" + "\" src=\"docroot/imgs/clear.png\" title=\"" + methodname + "\"> ");
-                }
-                out.write("</td></tr>");
-            }
-            if (tests.hasNext()) {
-                out.write("<tr><th colspan=\"3\" class=\"content\">&nbsp;</th></tr>");
-            }
-        }
-
-        out.write("</table>");
-    }
-
-    // start testing or show results
-    if (mode != null && mode.equals("testnow")) {
-        // exclude list
-        Map tckExcludeList = Collections.EMPTY_MAP;
-        String excludelist = request.getParameter("useExcludeList");
-        boolean useExcludeList = (excludelist != null && excludelist.equals("no")) ? false : true;
-
-        if (useExcludeList) {
-            // check if exclude list is up to date or even existing
-            if (repSession.getRootNode().hasNode("excludeList")) {
-                Node excludeListNode = repSession.getRootNode().getNode("excludeList");
-                String list = excludeListNode.getProperty("list").getString();
-
-                if (list != null && !"".equals(list)) {
-                    String splittedList[] = list.split(",");
-                    tckExcludeList = new HashMap();
-
-                    for (int i = 0; i < splittedList.length; i++) {
-                        String name = splittedList[i];
-                        tckExcludeList.put(name, name);
-                    }
-                }
-            }
-        }
-
-        // start testing
-        Node rootNode = repSession.getRootNode();
-        Node testResNode = (rootNode.hasNode("testing")) ?
-                rootNode.getNode("testing") : rootNode.addNode("testing", "nt:unstructured");
-        rootNode.save();
-
-        out.write("<script>parent.statuswin.document.write(\"<html><head><title></title>\");");
-        out.write("parent.statuswin.document.write('<link rel=\"stylesheet\" href=\"docroot/ui/default.css\" " +
-                "type=\"text/css\" title=\"style\" /></head>');");
-        out.write("parent.statuswin.document.write('<body style=\"margin-top:5px;margin-left:10px;border-width:0px;font-size:11px;\">');");
-        out.write("parent.statuswin.document.write(\"starting\");</script>");
-        TestFinder testfinder = new TestFinder();
-        testfinder.find(getServletConfig().getServletContext().getResource(RepositoryServlet.getTckWebappJarPath()).openStream(),
-                "TestAll.java");
-        TckTestRunner runner = new TckTestRunner(out);
-        String logStr = "<script>" +
-                "parent.statuswin.document.write(\"{0} : {1}<br>\");" +
-                "parent.statuswin.scrollBy(0,20);" +
-                "</script>";
-        runner.setLogString(logStr);
-        String interAStr = "<script>" +
-                "var cell=document.getElementById(\"{0}img\");" +
-                "cell.src=\"docroot/imgs/{1}.png\";" +
-                "cell=document.getElementById(\"{0}img\");" +
-                "cell.setAttribute(\"title\",cell.getAttribute(\"title\")+\":{1} time:{2}ms\");" +
-                "</script>";
-        runner.setInteractionString(interAStr);
-        runner.setNewTestString("<script>window.scrollBy(0,21);</script>");
-        Tester t = new Tester(testfinder, runner, out, tckExcludeList);
-        t.setfinishedSuiteString("<script>parent.statuswin.document.write(\"finished {0} tests<br>\");window.scrollBy(0,40);</script>");
-        long startMillies = System.currentTimeMillis();
-        t.run();
-
-        // saving test results
-        out.write("<script>parent.statuswin.document.write('" + String.valueOf(t.getNumberOfExecutedTests()) + " tests got executed<br>')</script>");
-        out.write("<script>parent.statuswin.document.write('Saving test results...<br>')</script>");
-
-        Node results = testResNode.addNode(String.valueOf(startMillies));
-        testResNode.save();
-        t.storeResults(results);
-
-        // test summary
-        out.write("<script>parent.statuswin.document.write('Generating test summary...<br>')</script>");
-        out.write("<script>parent.statuswin.scrollBy(0,30);</script>");
-
-        Map summary = buildSummary(results, repSession);
-
-        out.write("<table width=\"100%\">");
-        out.write("<tr><th class=\"content\" width=<\"100%\" colspan=\"" + String.valueOf(summary.size()) + "\">Test Summary</th></tr>");
-
-        Iterator itr = summary.keySet().iterator();
-
-        out.write("<tr>");
-        String width = String.valueOf(Math.round(100 / summary.size()));
-
-        while (itr.hasNext()) {
-            out.write("<td width=\"" + width + "%\" align=\"center\" class=\"content\">" + itr.next() + "</td>");
-        }
-        out.write("</tr>");
-
-        itr = summary.keySet().iterator();
-        out.write("<tr>");
-        while (itr.hasNext()) {
-            String key = (String) itr.next();
-            Boolean passed = (Boolean) summary.get(key);
-
-            String res = (passed.booleanValue()) ? "pass" : "failure";
-
-            out.write("<td align=\"center\" class=\"content\">" + "<img src=\"docroot/imgs/" + res + ".png\" border=\"0\"></td>");
-
-        }
-        out.write("</tr>");
-        out.write("</table>");
-
-        out.write("<script>parent.statuswin.document.write(\"...finished. Test took " +
-                String.valueOf(System.currentTimeMillis() - startMillies) + "ms<br>\");</script>");
-        out.write("<script>parent.statuswin.scrollBy(0,50);</script>");
-        out.write("<script>parent.statuswin.document.write(\"</body></html>\");</script>");
-        out.write("<script>window.scrollBy(0,200);</script>");
-    } else if (mode != null && mode.equals("view")) {
-        out.write("<script>parent.statuswin.document.write(\"<html><head><title></title>\");");
-        out.write("parent.statuswin.document.write('<link rel=\"stylesheet\" href=\"docroot/ui/default.css\" " +
-                "type=\"text/css\" title=\"style\" /></head>');");
-        out.write("parent.statuswin.document.write('<body style=\"margin-top:5px;margin-left:10px;border-width:0px;0px;font-size:11px;\">');");
-        out.write("parent.statuswin.document.write(\"view test result<br>\");</script>");
-
-        // the test to be viewed is defined by the timestamp
-        String testTimeInMs = request.getParameter("test");
-
-        // load "test root"
-        Node testroot = repSession.getRootNode().getNode("testing/" + testTimeInMs);
-
-        // build summary
-        Map summary = buildSummary(testroot, repSession);
-
-        // Iterate through all tests
-        TestFinder tf = new TestFinder();
-        tf.find(getServletConfig().getServletContext().getResource(RepositoryServlet.getTckWebappJarPath()).openStream(), "TestAll.java");
-
-        Calendar cal = Calendar.getInstance();
-        cal.setTimeInMillis(Long.parseLong(testTimeInMs));
-        SimpleDateFormat formatter = new SimpleDateFormat("dd.MM.yyyy hh:mm:ss");
-        String formatedTestTime = formatter.format(cal.getTime());
-
-        // test header
-        out.write("<table width=\"100%\">");
-        out.write("<tr><th class=\"content\" width=<\"100%\">Test: " + formatedTestTime + "</th></tr>");
-        out.write("</table>");
-
-        // test summary
-        out.write("<table width=\"100%\">");
-        out.write("<tr><th class=\"content\" width=<\"100%\" colspan=\"" + String.valueOf(summary.size()) + "\">Test Summary</th></tr>");
-
-        Iterator itr = summary.keySet().iterator();
-
-        out.write("<tr>");
-        String width = String.valueOf(Math.round(100 / summary.size()));
-
-        while (itr.hasNext()) {
-            out.write("<td width=\"" + width + "%\" align=\"center\" class=\"content\">" + itr.next() + "</td>");
-        }
-        out.write("</tr>");
-
-        itr = summary.keySet().iterator();
-        out.write("<tr>");
-        while (itr.hasNext()) {
-            String key = (String) itr.next();
-            Boolean passed = (Boolean) summary.get(key);
-
-            String res = (passed.booleanValue()) ? "pass" : "failure";
-
-            out.write("<td align=\"center\" class=\"content\">" + "<img src=\"docroot/imgs/" + res + ".png\" border=\"0\"></td>");
-
-        }
-        out.write("</tr>");
-        out.write("</table>");
-
-        // all tests in detail
-        out.write("<table width=\"100%\">");
-        out.write("<tr><th colspan=\"3\" class=\"content\">&nbsp;</th></tr>");
-        out.write("<tr><th colspan=\"3\" class=\"content\">Detailed Test Report</th></tr>");
-
-        // display the test result categorized by the test suites:
-        // - level1
-        // - level2
-        // - .....
-        Iterator tests = tf.getSuites().keySet().iterator();
-
-        while (tests.hasNext()) {
-            String key = (String) tests.next();
-            TestSuite t = (TestSuite) tf.getSuites().get(key);
-            Enumeration members = t.tests();
-            out.write("<tr><td class=\"content\" colspan=\"3\">" + t.toString() + "</td></tr>");
-            while (members.hasMoreElements()) {
-                TestSuite aTest = (TestSuite) members.nextElement();
-
-                out.write("<tr><td class=\"graph\" width=\"35%\" valign=\"top\">" +
-                        aTest.toString() + "</td><td>&nbsp;</td><td>");
-
-                Enumeration testMethods = aTest.tests();
-                while (testMethods.hasMoreElements()) {
-                    TestCase tc = (TestCase) testMethods.nextElement();
-                    String methodname = tc.getName();
-
-                    // test identifier
-                    String keyname = methodname + "(" + aTest.getName() + ")";
-
-                    // load node containig the test result for one test
-                    Node testResultNode;
-                    if (testroot.hasNode(key + "/" + keyname)) {
-                        testResultNode = testroot.getNode(key + "/" + keyname);
-                    } else {
-                        continue;
-                    }
-
-                    int status = new Long(testResultNode.getProperty("status").getLong()).intValue();
-                    String color;
-                    switch (status) {
-                        case TestResult.SUCCESS:
-                            color = "pass";
-                            break;
-                        case TestResult.ERROR:
-                        case TestResult.FAILURE:
-                            color = "failure";
-                            break;
-                        case TestResult.NOT_EXECUTABLE:
-                            color = "error";
-                            break;
-                        default:
-                            color = "clear";
-                    }
-
-                    String testTime = (testResultNode.hasProperty("testtime")) ?
-                            String.valueOf(testResultNode.getProperty("testtime").getLong()) : "0";
-
-                    String errorMsg = (testResultNode.hasProperty("errrormsg")) ?
-                            "Error: " + testResultNode.getProperty("errrormsg").getString() : "";
-                    errorMsg = errorMsg.replaceAll("'"," ");
-                    errorMsg = errorMsg.replaceAll("\""," ");
-                    errorMsg = errorMsg.replaceAll("\n"," ");
-                    errorMsg = errorMsg.replaceAll("\r"," ");
-
-                    String testInfo = "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -" +
-                            "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<br>" +
-                            "Test name: " + methodname + "(" + aTest.getName() + ")<br>" +
-                            "Time: " + testTime + "ms<br>" + errorMsg + "<br>";
-
-                    out.write("<img src=\"docroot/imgs/" + color + ".png\" title=\"" + methodname + ": " + color + "\" border=\"0\" " +
-                            "onclick=\"parent.statuswin.document.write('" + testInfo + "');" +
-                            "parent.statuswin.scrollBy(0,70);\"> ");
-                }
-                out.write("</td></tr>");
-            }
-            if (tests.hasNext()) {
-                out.write("<tr><th colspan=\"3\" class=\"content\">&nbsp;</th></tr>");
-            }
-        }
-
-        out.write("</table>");
-        out.write("<script>parent.statuswin.scrollBy(0,20);</script>");
-        out.write("<script>parent.statuswin.document.write(\"</body></html>\");</script>");
-    }
-    %>
-    </body>
-</html><%!
-public Map buildSummary(Node startNode, Session session) throws RepositoryException, IOException, ParserConfigurationException, SAXException {
-    ByteArrayOutputStream baos = new ByteArrayOutputStream();
-    session.exportSystemView(startNode.getPath(), baos, false, false);
-    TestResultParser parser = new TestResultParser();
-    Map summary = parser.interpretResult(baos.toString());
-    return summary;
-}
-%>
diff --git a/contrib/tck-webapp/src/webapp/index.jsp b/contrib/tck-webapp/src/webapp/index.jsp
deleted file mode 100644
index cca93f3..0000000
--- a/contrib/tck-webapp/src/webapp/index.jsp
+++ /dev/null
@@ -1,345 +0,0 @@
-<%--
-Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                    as applicable.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
---%><%@ page import="javax.jcr.Session,
-                     javax.jcr.Node,
-                     javax.jcr.NodeIterator,
-                     java.util.*,
-                     java.text.SimpleDateFormat,
-                     org.apache.jackrabbit.tck.j2ee.RepositoryServlet,
-                     javax.jcr.RepositoryException,
-                     java.io.InputStream,
-                     org.apache.jackrabbit.test.RepositoryStub,
-                     java.io.IOException,
-                     org.apache.jackrabbit.test.RepositoryStubException"
-%><%@page session="false" %><%
-
-Session repSession = RepositoryServlet.getSession();
-if (repSession == null) {
-    return;
-}
-
-// checker intervall
-long CHECKER_INTERVALL = 24 * 60 * 60 * 1000;
-
-// load download id from file
-Properties props = new Properties();
-InputStream is = getServletConfig().getServletContext().getResource("/download.id").openStream();
-String did;
-
-if (is != null) {
-    try {
-        props.load(is);
-        did = props.getProperty("download.id", "undefined");
-    } catch (IOException e) {
-        did = "undefined";
-    }
-} else {
-    did = "undefined";
-}
-
-// copy download id into repo
-if (!repSession.getRootNode().hasNode("licNode")) {
-    Node licNode = repSession.getRootNode().addNode("licNode", "nt:unstructured");
-    licNode.setProperty("key", did);
-    repSession.getRootNode().save();
-} else if (!repSession.getRootNode().getNode("licNode").getProperty("key").equals(did)) {
-    repSession.getRootNode().getNode("licNode").setProperty("key", did);
-    repSession.getRootNode().save();
-}
-// quick and dirty check
-if (repSession.getRootNode().getNode("licNode").canAddMixin("mix:referenceable")) {
-    repSession.getRootNode().getNode("licNode").addMixin("mix:referenceable");
-    repSession.getRootNode().save();
-}
-
-// last version checker time
-long lastChecked = (repSession.getRootNode().hasNode("lastChecked")) ? repSession.getRootNode().getNode("lastChecked").getProperty("time").getLong() : 0;
-long currentTime = System.currentTimeMillis();
-boolean checkIt = ((lastChecked + CHECKER_INTERVALL) < currentTime) || lastChecked == 0;
-boolean isUpToDate = (repSession.getRootNode().hasNode("lastChecked")) ? repSession.getRootNode().getNode("lastChecked").getProperty("uptodate").getBoolean() : true;
-
-// load version
-String cVersion;
-is = getServletConfig().getServletContext().getResource("/version.id").openStream();
-
-if (is != null) {
-    try {
-        props.load(is);
-        cVersion = props.getProperty("version.id", "undefined");
-    } catch (IOException e) {
-        cVersion = "undefined";
-    }
-} else {
-    cVersion = "undefined";
-}
-
-// build check version url
-StringBuffer snippet = new StringBuffer(256);
-snippet.append(RepositoryServlet.getTckVersionCheckerPath());
-// install id
-snippet.append("?s=" + repSession.getRootNode().getNode("licNode").getUUID());
-// version
-snippet.append("&v=" + cVersion);
-// download id
-snippet.append("&d=" + repSession.getRootNode().getNode("licNode").getProperty("key").getString());
-// java version
-snippet.append("&j");
-String vendor = System.getProperty("java.vendor");
-if (vendor != null) {
-    int end = vendor.indexOf(' ');
-    if (end != -1) {
-        vendor = vendor.substring(0, end);
-    }
-    snippet.append(vendor);
-    snippet.append(' ');
-}
-snippet.append(System.getProperty("java.version"));
-// os
-snippet.append("&o=" + System.getProperty("os.name") +
-        " " + System.getProperty("os.version"));
-
-String checkVersionUrl = snippet.toString();
-
-// get parent handle
-String parent = request.getRequestURI();
-if (parent.length() > 1) {
-    parent = parent.substring(0,parent.lastIndexOf('/'));
-}
-String mode = request.getParameter("mode");
-mode = (mode == null || mode.equals("")) ? "test" : mode;
-
-String exludeListTestMethod = "";
-
-if (mode.equals("test")) {
-    // get exclude list version currently stored in the tck repository
-    String excludeListVersion = "";
-    if (repSession.getRootNode().hasNode("excludelist")) {
-        Node excludeListNode = repSession.getRootNode().getNode("excludelist");
-        excludeListVersion = excludeListNode.getProperty("version").getString();
-    }
-    exludeListTestMethod = (mode.equals("test")) ? "excludeListIsUpToDate('" + RepositoryServlet.getExcludeListCheckerPath() + "?v=" + excludeListVersion + "');" : "";
-}
-%><html>
-    <head><title>TCK for JSR170</title>
-    <link rel="stylesheet" href="docroot/ui/default.css" type="text/css" title="style" />
-    <script type="text/javascript" src="docroot/js/server_call.js"></script>
-    <script>
-        function setImage(id, url) {
-            var logoImg = new Image();
-            logoImg.src = url;
-            var img = document.getElementById(id);
-
-            if (logoImg.width > 0) {
-                img.src= logoImg.src;
-            } else {
-                img.src = "docroot/imgs/banner_right.jpg";
-            }
-        }
-
-        function setGreen(doNotTell) {
-            var img = document.getElementById('vcheckpic');
-            img.src = "docroot/imgs/green.png";
-            img.setAttribute("title", "The Tck web application is up to date.");
-            // tell server that a check got performed (perform in 24h again)
-            if (doNotTell != true) {
-                tellChecked(<%= currentTime %>, true);
-            }
-        }
-
-        function setRed(doNotTell) {
-            var img = document.getElementById('vcheckpic');
-            img.src = "docroot/imgs/red.png";
-            img.setAttribute("title", "A new Tck version is available.");
-            var link = document.getElementById('vcheckpic_href');
-            link.setAttribute("href", "<%= RepositoryServlet.getTckUpdateUrl() %>");
-            link.setAttribute("target", "_new");
-            // tell server that a check got performed (perform in 24h again)
-            if (doNotTell != true) {
-                tellChecked(<%= currentTime %>, false);
-            }
-        }
-
-        function tellChecked(currTime, upToDate) {
-            var httpcon = document.all ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
-            if (httpcon) {
-                var url = "set_checktime.jsp?time=" + currTime + "&upToDate=" + upToDate;
-                httpcon.open('GET', url, false);
-                httpcon.send(null);
-            }
-        }
-
-        function checkVersion(checkerurl) {
-            <%
-            if (checkIt) {%>
-                var tester = new Image();
-                tester.onload = setRed;
-                tester.onerror = setGreen;
-                tester.src = checkerurl;
-                <%
-            } else {
-                if (isUpToDate) {
-                    %>setGreen(true);<%
-                } else {
-                    %>setRed(true);<%
-                }
-            }%>
-        }
-
-    </script>
-    </head>
-    <body onload="setImage('logo', 'http://jsr170tools.day.com/crx/crx_main_files/banner_right.gif');checkVersion('<%= checkVersionUrl %>');<%= exludeListTestMethod %>">
-        <center>
-            <table cellpadding="0" cellspacing="0" border="0" id="maintable">
-                <!-- banner -->
-                <tr>
-                    <td class="leadcell"><span class="leadcelltext">TCK for JSR 170<br>Content Repository for Java Technology API</span></td><td class="logocell"><a target="_blank" href="http://www.day.com" title="www.day.com"><img id="logo" border="0"></td>
-                </tr>
-                <tr>
-                    <td id="technavcell">
-                        <div id="technav">
-                        <%
-                        if (mode.equals("test")) {
-                            %><span class="technavat">Test</span><a href="index.jsp?mode=view">View Results</a>
-                            <a href="index.jsp?mode=config">Test Config</a><a href="index.jsp?mode=preferences">Preferences</a><%
-                        } else if (mode.equals("view")){
-                            %><a href="index.jsp?mode=">Test</a><span class="technavat">View Results</span></a>
-                            <a href="index.jsp?mode=config">Test Config</a><a href="index.jsp?mode=preferences">Preferences</a><%
-                        } else if (mode.equals("config")){
-                            %><a href="index.jsp?mode=">Test</a><a href="index.jsp?mode=view">View Results</a>
-                            <span class="technavat">Test Config</span><a href="index.jsp?mode=preferences">Preferences</a><%
-                        } else {
-                            %><a href="index.jsp?mode=">Test</a><a href="index.jsp?mode=view">View Results</a>
-                            <a href="index.jsp?mode=config">Test Config</a><span class="technavat">Preferences</span><%
-                        }
-                        %>
-                        </div>
-                    </td>
-                    <td align="right" id="technavcell">
-                        <a href="javascript:void(0);" id="vcheckpic_href"><img src="docroot/imgs/green.png" id="vcheckpic" border="0"></a>
-                    </td>
-                </tr>
-                <%
-                if (mode.equals("test")) {
-                    %><tr>
-                        <td colspan="2">
-                            <iframe name="graph" src="graph.jsp" height="600" width="960" frameborder="0"></iframe>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td id="technavcell" colspan="2">
-                            <table width="100%">
-                                <tr>
-                                    <td width="10%"></script><input type="button" value="Start" class="submit" onclick="startTest('<%= RepositoryServlet.getExcludeListUrl() %>', document.getElementById('excudelist').checked)"></td>
-                                    <td width="20%">Start Test</td>
-                                    <td width="40%" align="center"><input type="checkbox" id="excudelist" checked>Exclude List&nbsp;</td>
-                                    <td width="20%" align="right">Submit Test Data</td>
-                                    <td width="10%" align="right"><input type="button" value="Submit" class="submit" onclick="var strwin = window.open('submit_result.jsp','SubmitTestResult', 'width=470,height=350');strwin.focus()"></td>
-                                </tr>
-                            </table>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td colspan="2">
-                            <iframe name="statuswin" style="margin-top: 0px;border-top: 1px solid #000000;" src="status.jsp" height="80" width="960" frameborder="0"></iframe>
-                        </td>
-                    </tr><%
-                } else if (mode.equals("view")){
-                    %><tr>
-                        <td colspan="2">
-                            <iframe name="graph" src="graph.jsp" height="590" width="960" frameborder="0"></iframe>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td id="technavcell" colspan="2">
-                            <form name="view" action="graph.jsp" target="graph">
-                                <input type="hidden" name="mode" value="view">
-                                <%
-                                Node rootNode = repSession.getRootNode();
-
-                                if (rootNode.hasNode("testing")) {
-                                    %>
-                                    <table width="100%">
-                                        <tr>
-                                            <td valign="top" width="90%">Select test to be viewed</td>
-                                            <td width="10%" align="right">
-                                            <select name="test" onchange="document.view.submit();">
-                                                <option value="">Select date</option>
-                                                <%
-                                                NodeIterator tests = rootNode.getNode("testing").getNodes();
-
-                                                ArrayList al = new ArrayList();
-                                                while (tests.hasNext()) {
-                                                    al.add(tests.nextNode());
-                                                }
-
-                                                Collections.reverse(al);
-                                                Iterator itr = al.iterator();
-
-                                                while (itr.hasNext()) {
-                                                    Node n = (Node) itr.next();
-                                                    String sdate = n.getName();
-                                                    if ("props".equals(sdate)) {
-                                                        continue;
-                                                    }
-                                                    Calendar cal = Calendar.getInstance();
-                                                    cal.setTimeInMillis(Long.parseLong(sdate));
-                                                    SimpleDateFormat formatter = new SimpleDateFormat("dd.MM.yyyy hh:mm:ss");
-                                                    sdate = formatter.format(cal.getTime());
-                                                    %><option value="<%= n.getName() %>"><%= sdate %></option><%
-                                                }
-                                                %>
-                                                </select></td>
-                                        </tr>
-                                    </table>
-                                <%
-                                }
-                                %>
-                            </form>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td colspan="2">
-                            <iframe name="statuswin" style="margin-top: 0px;border-top: 1px solid #000000;" src="status.jsp" height="80" width="960" frameborder="0"></iframe>
-                        </td>
-                    </tr><%
-                } else if (mode.equals("config")){
-                    %><tr>
-                        <td colspan="2">
-                            <iframe name="config" src="config.jsp" height="680" width="960" frameborder="0"></iframe>
-                        </td>
-                    </tr>
-                    <tr>
-                        <td id="technavcell" colspan="2">
-                            <table width="100%">
-                                <tr>
-                                    <td width="40%" align="left">Save Configuration</td>
-                                    <td width="10%" align="right"><input type="button" value="Save" class="submit" onclick="window.config.document.configform.submit();"></td>
-                                </tr>
-                            </table>
-                        </td>
-                    </tr><%
-                } else if (mode.equals("preferences")){
-                %><tr>
-                    <td colspan="2">
-                        <iframe name="preferences" src="preferences.jsp" height="680" width="960" frameborder="0"></iframe>
-                    </td>
-                </tr><%
-                }
-                %>
-            </table>
-        </center>
-    </body>
-</html>
diff --git a/contrib/tck-webapp/src/webapp/preferences.jsp b/contrib/tck-webapp/src/webapp/preferences.jsp
deleted file mode 100644
index e3e2aa9..0000000
--- a/contrib/tck-webapp/src/webapp/preferences.jsp
+++ /dev/null
@@ -1,112 +0,0 @@
-<%--
-Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                    as applicable.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
---%><%@ page import="javax.jcr.Session,
-                     org.apache.jackrabbit.tck.j2ee.RepositoryServlet,
-                     javax.jcr.Node,
-                     javax.jcr.RepositoryException,
-                     java.util.HashMap,
-                     java.io.IOException,
-                     java.util.List,
-                     org.apache.commons.fileupload.FileUpload,
-                     org.apache.commons.fileupload.DiskFileUpload,
-                     org.apache.commons.fileupload.FileItem,
-                     java.util.Iterator,
-                     java.util.Properties"
-%><%@page session="false" %><%
-Session repSession = RepositoryServlet.getSession();
-if (repSession == null) {
-    return;
-}
-Node rootNode = repSession.getRootNode();
-
-// save download key if needed
-String key = request.getParameter("key");
-if (key != null) {
-    // save
-    Node lk = rootNode.getNode("licNode");
-    if (!key.equals(lk.getProperty("key").getString())) {
-        lk.setProperty("key", key);
-        rootNode.save();
-    }
-}
-
-// save exclude list
-if(request.getMethod().toLowerCase().equals("post")) {
-    DiskFileUpload upload = new DiskFileUpload();
-
-    // Parse the request
-    List items = upload.parseRequest(request);
-
-    // Process the uploaded items
-    Iterator iter = items.iterator();
-    while (iter.hasNext()) {
-        FileItem item = (FileItem) iter.next();
-        if (!item.isFormField() && item.getFieldName().equals("elfile")) {
-            Node excludeListNode = (rootNode.hasNode("excludeList")) ?
-            rootNode.getNode("excludeList") :
-            rootNode.addNode("excludeList", "nt:unstructured");
-
-            Properties props = new Properties();
-            try {
-                props.load(item.getInputStream());
-                excludeListNode.setProperty("version", props.getProperty("version"));
-                excludeListNode.setProperty("list", props.getProperty("list"));
-                rootNode.save();
-            } catch (IOException e) {
-                %><script>window.alert("Unable to upload file");</script><%
-            }
-        }
-    }
-}
-
-
-// load exclude list
-String version = "";
-String excludeList = "";
-if (rootNode.hasNode("excludeList")) {
-    Node excludeListNode = rootNode.getNode("excludeList");
-    version = excludeListNode.getProperty("version").getString();
-    excludeList = excludeListNode.getProperty("list").getString();
-
-    // list is comma separated... make it better readable
-    excludeList = excludeList.replace(',', '\n');
-}
-
-%>
-<html>
-    <head>
-        <link rel="stylesheet" href="docroot/ui/default.css" type="text/css" title="style" />
-    </head>
-    <body style="margin-top:0px;border-width:0px">
-        <form name="prefsform" action="preferences.jsp" method="get">
-            <table width="100%">
-                <tr><th class="content" colspan="2">Download ID</th></tr>
-                <tr><td class="content">ID</td><td class="content"><input name="key" value="<%= rootNode.getNode("licNode").getProperty("key").getString() %>"></td></tr>
-                <tr><td colspan="2"><input type="submit" value="Save" class="submit"></td></tr>
-            </table>
-        </form>
-
-        <form name="excludelistform" action="preferences.jsp" method="post" enctype="multipart/form-data">
-            <table width="100%">
-                <tr><th class="content" colspan="2">ExcludeList</th></tr>
-                <tr><td class="content">Exclude List File</td><td class="content"><input name="elfile" type="file"></td></tr>
-                <tr></tr><td class="content">Version</td><td class="content"><%= version %></td></tr>
-                <tr><td class="content">List</td><td class="content"><textarea name="excludeList" readonly><%= excludeList %></textarea></td></tr>
-                <tr><td colspan="2"><input type="submit" value="Upload" class="submit"></td></tr>
-            </table>
-        </form>
-    </body>
-</html>
diff --git a/contrib/tck-webapp/src/webapp/resultlookup.jsp b/contrib/tck-webapp/src/webapp/resultlookup.jsp
deleted file mode 100644
index a78c979..0000000
--- a/contrib/tck-webapp/src/webapp/resultlookup.jsp
+++ /dev/null
@@ -1,59 +0,0 @@
-<%--
-Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                    as applicable.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
---%><%@ page import="javax.jcr.Session,
-                     org.apache.jackrabbit.tck.j2ee.RepositoryServlet,
-                     javax.jcr.Node,
-                     javax.jcr.RepositoryException,
-                     java.util.HashMap,
-                     java.io.IOException,
-                     java.io.ByteArrayOutputStream,
-                     org.apache.jackrabbit.tck.TestResultParser,
-                     java.util.Map,
-                     java.util.Iterator"
-%><%@page session="false" %><%
-Session repSession = RepositoryServlet.getSession();
-if (repSession == null) {
-    return;
-}
-
-String sampleDate = request.getParameter("sampledate");
-if (sampleDate != null && repSession.getRootNode().hasNode("testing/" + sampleDate)) {
-    // build xml
-    Node testroot = repSession.getRootNode().getNode("testing/" + sampleDate);
-    ByteArrayOutputStream baos = new ByteArrayOutputStream();
-    repSession.exportSystemView(testroot.getPath(), baos, false, false);
-    String results = baos.toString();
-
-    // create summary
-    TestResultParser parser = new TestResultParser();
-    Map summary = parser.interpretResult(baos.toString());
-    %><summary><%
-    Iterator itr = summary.keySet().iterator();
-    String sep = "";
-    while (itr.hasNext()) {
-        String key = (String) itr.next();
-        Boolean passed = (Boolean) summary.get(key);
-
-        String res = (passed.booleanValue()) ? "pass" : "failure";
-
-        %><%= sep %><%= key %>=<%= res %><%
-        sep = ",";
-    }
-    %></summary><%
-    // whole xml results document
-    %><%= results %><%
-    }
-%>
diff --git a/contrib/tck-webapp/src/webapp/set_checktime.jsp b/contrib/tck-webapp/src/webapp/set_checktime.jsp
deleted file mode 100644
index 59e42d1..0000000
--- a/contrib/tck-webapp/src/webapp/set_checktime.jsp
+++ /dev/null
@@ -1,37 +0,0 @@
-<%--
-Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                    as applicable.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
---%><%@ page import="javax.jcr.Session,
-                     org.apache.jackrabbit.tck.j2ee.RepositoryServlet,
-                     javax.jcr.Node,
-                     javax.jcr.RepositoryException,
-                     java.util.HashMap,
-                     java.io.IOException"
-%><%@page session="false" %><%
-Session repSession = RepositoryServlet.getSession();
-if (repSession == null) {
-    return;
-}
-
-String isUpToDate = request.getParameter("upToDate");
-
-Node lastChecked = (repSession.getRootNode().hasNode("lastChecked")) ?
-        repSession.getRootNode().getNode("lastChecked") :
-        repSession.getRootNode().addNode("lastChecked", "nt:unstructured");
-
-    lastChecked.setProperty("time", System.currentTimeMillis());
-    lastChecked.setProperty("uptodate", (isUpToDate != null && isUpToDate.equals("true")) ? true : false);
-    repSession.save();
-%>
\ No newline at end of file
diff --git a/contrib/tck-webapp/src/webapp/status.jsp b/contrib/tck-webapp/src/webapp/status.jsp
deleted file mode 100644
index a3ac44b..0000000
--- a/contrib/tck-webapp/src/webapp/status.jsp
+++ /dev/null
@@ -1,24 +0,0 @@
-<%--
-Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                    as applicable.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
---%><%@page session="false" %><%
-
-%><html>
-<head><title></title>
-    <link rel="stylesheet" href="docroot/ui/default.css" type="text/css" title="style" />
-</head>
-    <body style="margin-top:0px;border-width:0px">
-    </body>
-</html>
diff --git a/contrib/tck-webapp/src/webapp/submit_result.jsp b/contrib/tck-webapp/src/webapp/submit_result.jsp
deleted file mode 100644
index 9468966..0000000
--- a/contrib/tck-webapp/src/webapp/submit_result.jsp
+++ /dev/null
@@ -1,142 +0,0 @@
-<%--
-Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                    as applicable.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
---%><%@ page import="javax.jcr.Session,
-                     org.apache.jackrabbit.tck.j2ee.RepositoryServlet,
-                     javax.jcr.Node,
-                     javax.jcr.NodeIterator,
-                     java.text.SimpleDateFormat,
-                     java.util.*,
-                     org.apache.jackrabbit.test.RepositoryHelper,
-                     org.apache.jackrabbit.tck.WebAppTestConfig,
-                     java.net.URLEncoder,
-                     java.net.URL,
-                     java.net.URLConnection,
-                     java.io.*,
-                     org.apache.jackrabbit.tck.TestResultParser"
-%><%@page session="false" %><%
-Session repSession = RepositoryServlet.getSession();
-if (repSession == null) {
-    return;
-}
-String lookupURL = "resultlookup.jsp?sampledate=";
-
-Node rootNode = repSession.getRootNode();
-%>
-<html>
-    <head>
-        <link rel="stylesheet" href="docroot/ui/default.css" type="text/css" title="style" />
-        <script>
-            function getTestResult(url, inputfield) {
-                var httpcon = document.all ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
-                if (httpcon) {
-                	httpcon.open('GET', url, false);
-                	httpcon.send(null);
-                	inputfield.value = httpcon.responseText;
-                } else {
-                	inputfield.value = "";
-                    window.alert("Select a valid sample date");
-                }
-            }
-        </script>
-    </head>
-    <body style="margin-top:0px;border-width:0px">
-        <form name="submit" action="<%= RepositoryServlet.getSubmitUrl() %>" method="post">
-        <%
-        // build submit form
-        if (rootNode.hasNode("testing")) {
-            // create properties "file" containing system (java) and repository information
-            String properties = "#system properties\n";
-            String[] propertyNames = {"java.class.version", "java.vendor", "java.vendor.url",
-                                      "java.version", "os.name", "os.arch", "os.version"};
-            for (int i = 0; i < propertyNames.length; i++) {
-                String pval = System.getProperty(propertyNames[i]);
-                properties += propertyNames[i] + "=" + pval + "\n";
-            }
-
-            properties += "#repository properties\n";
-            RepositoryHelper helper = new RepositoryHelper(WebAppTestConfig.getCurrentConfig());
-            String dkeys[] = helper.getRepository().getDescriptorKeys();
-            for (int i = 0; i < dkeys.length; i++) {
-                String dval = helper.getRepository().getDescriptor(dkeys[i]);
-                properties += dkeys[i] + "=" + dval + "\n";
-            }
-            
-            // license info
-            Node lk = repSession.getRootNode().getNode("licNode");
-            String did = lk.getProperty("key").getString();
-            String installid = lk.getUUID();
-            %>
-            <table width="100%">
-                <tr>
-                    <td colspan="2">
-                         <iframe name="userinfo" style="margin-top: 0px;border-top: 1px solid #000000;" src="<%= RepositoryServlet.getSubmitUrl() %>?downloadidinfo=<%= did %>" height="200" width="450" frameborder="0"></iframe>
-                    </td>
-                </tr>
-                <tr>
-                    <td class="content" valign="top" width="40%">Test Date</td>
-                    <td class="content" width="60%" align="right">
-                    <select name="test" onchange="getTestResult('<%= lookupURL %>'+this.options[this.selectedIndex].value, document.submit.resultxml);">
-                        <option value="">Sample date</option>
-                        <%
-                        NodeIterator tests = rootNode.getNode("testing").getNodes();
-
-                        ArrayList al = new ArrayList();
-                        //hack : todo??
-                        while (tests.hasNext()) {
-                            al.add(tests.nextNode());
-                        }
-
-                        Collections.reverse(al);
-                        Iterator itr = al.iterator();
-                        // eoh
-
-                        while (itr.hasNext()) {
-                            Node n = (Node) itr.next();
-                            String sdate = n.getName();
-                            if ("props".equals(sdate)) {
-                                continue;
-                            }
-                            Calendar cal = Calendar.getInstance();
-                            cal.setTimeInMillis(Long.parseLong(sdate));
-                            SimpleDateFormat formatter = new SimpleDateFormat("dd.MM.yyyy hh:mm:ss");
-                            sdate = formatter.format(cal.getTime());
-                            %><option value="<%= n.getName() %>"><%= sdate %></option><%
-                        }
-                        %>
-                        </select></td>
-                </tr>
-                <tr>
-                    <td colspan="2" class="content">
-                        &nbsp;<input type="hidden" name="publishresults" id="publishresults" value="yes"><input type="hidden" name="properties" value="<%= properties %>"><input type="hidden" name="resultxml"><input type="hidden" name="downloadid" value="<%= did %>"><input type="hidden" name="installid" value="<%= installid %>">
-                    </td>
-                </tr>
-                <tr>
-                    <td colspan="2" class="content">
-                        <input type="checkbox" name="publishresultscb" checked onclick="if (this.checked) {document.getElementById('publishresults').value='yes';}else{document.getElementById('publishresults').value='';}">Publishing test results allowed
-                    </td>
-                </tr>
-                <tr>
-                    <td class="content"><input type="submit" value="Send" class="submit"></td><td align="right" class="content"><input type="button" value="Cancel" class="submit" onclick="window.close();"></td>
-                </tr>
-            </table>
-            <%
-        } else {
-            %>No test(s) executed so far.<%
-        }
-        %>
-        </form>
-    </body>
-</html>
diff --git a/contrib/tck-webapp/src/webapp/update_exclude_list.jsp b/contrib/tck-webapp/src/webapp/update_exclude_list.jsp
deleted file mode 100644
index 9246270..0000000
--- a/contrib/tck-webapp/src/webapp/update_exclude_list.jsp
+++ /dev/null
@@ -1,41 +0,0 @@
-<%--
-Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                    as applicable.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
---%><%@ page import="javax.jcr.Session,
-                     org.apache.jackrabbit.tck.j2ee.RepositoryServlet,
-                     javax.jcr.Node,
-                     javax.jcr.RepositoryException,
-                     java.util.HashMap,
-                     java.io.IOException"
-%><%@page session="false" %><%
-Session repSession = RepositoryServlet.getSession();
-if (repSession == null) {
-    return;
-}
-
-String excludeList = request.getParameter("ExcludeList");
-String version = request.getParameter("version");
-%>version:<%= version %>%><br><%
-%>excludeList:<%= excludeList %>%><br><%
-if (excludeList != null && version != null) {
-    Node excludeListNode = (repSession.getRootNode().hasNode("excludeList")) ?
-            repSession.getRootNode().getNode("excludeList") :
-            repSession.getRootNode().addNode("excludeList", "nt:unstructured");
-
-    excludeListNode.setProperty("version", version);
-    excludeListNode.setProperty("list", excludeList);
-    repSession.save();
-}
-%>
\ No newline at end of file
diff --git a/contrib/tck-webapp/src/webapp/version.id b/contrib/tck-webapp/src/webapp/version.id
deleted file mode 100644
index 4c8ee7f..0000000
--- a/contrib/tck-webapp/src/webapp/version.id
+++ /dev/null
@@ -1 +0,0 @@
-version.id=1.0

diff --git a/contrib/textfilters/HEADER.txt b/contrib/textfilters/HEADER.txt
deleted file mode 100644
index 1c669de..0000000
--- a/contrib/textfilters/HEADER.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
\ No newline at end of file
diff --git a/contrib/textfilters/LICENSE.txt b/contrib/textfilters/LICENSE.txt
deleted file mode 100644
index d645695..0000000
--- a/contrib/textfilters/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/contrib/textfilters/README.txt b/contrib/textfilters/README.txt
deleted file mode 100644
index 703b6fb..0000000
--- a/contrib/textfilters/README.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-TextFilters allow Jackrabbit to extract text from binary
-properties for indexing purposes.
-
-This project contains TextFilter implementations for the 
-following binary formats:
-
-1. MsExcel
-2. MsPowerPoint
-3. MsWord
-4. Pdf
-
-How to register in jackrabbit?
-Build the jar file and place it in the Jackrabbit 
-classpath together with the dependencies of these text
-filters.
-Configure them in the SearchIndex element of the workspace.xml
-
-Sample:
-
-...
-  <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
-    <param name="path" value="${wsp.home}/index" />
-    <param name="textFilterClasses" value="org.apache.jackrabbit.core.query.MsExcelTextFilter,org.apache.jackrabbit.core.query.MsPowerPointTextFilter,org.apache.jackrabbit.core.query.MsWordTextFilter,org.apache.jackrabbit.core.query.PdfTextFilter,org.apache.jackrabbit.core.query.HTMLTextFilter,org.apache.jackrabbit.core.query.XMLTextFilter,org.apache.jackrabbit.core.query..RTFTextFilter" />
-  </SearchIndex>
-...
-
-For further information, see the javadocs for:
-org.apache.jackrabbit.core.query.TextFilter
-
diff --git a/contrib/textfilters/checkstyle-suppressions.xml b/contrib/textfilters/checkstyle-suppressions.xml
deleted file mode 100644
index b3b6d2f..0000000
--- a/contrib/textfilters/checkstyle-suppressions.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE suppressions PUBLIC
-    "-//Puppy Crawl//DTD Suppressions 1.0//EN"
-    "http://www.puppycrawl.com/dtds/suppressions_1_0.dtd">
-
-<suppressions>
-    <!-- 
-      Suppressions for generated JCRQL parser
-    -->
-    <suppress checks=".*" files="(JJT)?JCRSQL.*.java"/>
-    <!-- Suppressions for the generated XPath parser -->
-    <suppress checks=".*" files="(JJT)?XPath.*.java"/>
-</suppressions>
diff --git a/contrib/textfilters/checkstyle.xml b/contrib/textfilters/checkstyle.xml
deleted file mode 100644
index 47fc8ec..0000000
--- a/contrib/textfilters/checkstyle.xml
+++ /dev/null
@@ -1,171 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                       as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-  -->
-  
-<!DOCTYPE module PUBLIC
-    "-//Puppy Crawl//DTD Check Configuration 1.1//EN"
-    "http://www.puppycrawl.com/dtds/configuration_1_1.dtd">
-
-<!--
-  Checkstyle checks configured for Maven.
--->
-
-<module name="Checker">
-
-    <!-- Checks that a package.html file exists for each package.     -->
-    <!-- See http://checkstyle.sf.net/config_javadoc.html#PackageHtml -->
-    <module name="PackageHtml"/>
-
-    <!-- Checks whether files end with a new line.                        -->
-    <!-- See http://checkstyle.sf.net/config_misc.html#NewlineAtEndOfFile -->
-    <module name="NewlineAtEndOfFile"/>
-
-    <!-- Checks that property files contain the same keys.         -->
-    <!-- See http://checkstyle.sf.net/config_misc.html#Translation -->
-    <module name="Translation"/>
-
-    <module name="TreeWalker">
-
-        <property name="cacheFile" value="${checkstyle.cache.file}"/>
-
-        <!-- ************************************************************** -->
-        <!-- Checks that are different from the sun coding conventions ones -->
-        <!-- ************************************************************** -->
-
-        <module name="Header">
-            <property name="headerFile" value="${basedir}/HEADER.txt"/>
-        </module>
-        <!-- <property name="tabWidth" value="4"/> -->
-        <module name="LeftCurly">
-          <property name="option" value="eol"/>
-        </module>
-        <module name="LineLength">
-          <property name="max" value="132"/>
-          <property name="ignorePattern" value="\* \$"/>
-        </module>
-        <module name="MethodLength">
-          <property name="max" value="175"/>
-        </module>
-        <module name="ConstantName">
-          <property name="format" value="log|^[a-zA-Z][a-zA-Z0-9_]*$"/>
-        </module>
-
-        <!-- ************************************************************** -->
-        <!-- Default Sun coding conventions checks                          -->
-        <!-- ************************************************************** -->
-
-        <!-- Checks for Javadoc comments.                     -->
-        <!-- See http://checkstyle.sf.net/config_javadoc.html -->
-        <module name="JavadocMethod"/>
-        <module name="JavadocType"/>
-        <module name="JavadocVariable"/>
-
-        <!-- Checks for Naming Conventions.                  -->
-        <!-- See http://checkstyle.sf.net/config_naming.html -->
-        <module name="LocalFinalVariableName"/>
-        <module name="LocalVariableName"/>
-        <module name="MethodName"/>
-        <module name="PackageName"/>
-        <module name="ParameterName"/>
-        <module name="StaticVariableName"/>
-        <module name="TypeName"/>
-        <module name="MemberName"/>
-
-        <!-- Checks for imports                              -->
-        <!-- See http://checkstyle.sf.net/config_import.html -->
-        <module name="AvoidStarImport"/>
-        <module name="IllegalImport"/> <!-- defaults to sun.* packages -->
-        <module name="RedundantImport"/>
-        <module name="UnusedImports"/>
-
-
-        <!-- Checks for Size Violations.                    -->
-        <!-- See http://checkstyle.sf.net/config_sizes.html -->
-        <module name="FileLength"/>
-        <module name="ParameterNumber"/>
-
-
-        <!-- Checks for whitespace                               -->
-        <!-- See http://checkstyle.sf.net/config_whitespace.html -->
-        <module name="EmptyForIteratorPad"/>
-        <module name="NoWhitespaceAfter"/>
-        <module name="NoWhitespaceBefore"/>
-        <module name="OperatorWrap"/>
-        <module name="TabCharacter"/>
-        <module name="WhitespaceAfter"/>
-        <module name="WhitespaceAround"/>
-
-
-        <!-- Modifier Checks                                    -->
-        <!-- See http://checkstyle.sf.net/config_modifiers.html -->
-        <module name="ModifierOrder"/>
-        <module name="RedundantModifier"/>
-
-
-        <!-- Checks for blocks. You know, those {}'s         -->
-        <!-- See http://checkstyle.sf.net/config_blocks.html -->
-        <module name="AvoidNestedBlocks"/>     
-        <module name="NeedBraces"/>
-
-        <!-- Checks for common coding problems               -->
-        <!-- See http://checkstyle.sf.net/config_coding.html -->
-        <!-- <module name="AvoidInlineConditionals"/> -->      <!-- DISABLED-->
-        <module name="DoubleCheckedLocking"/>
-        <module name="EqualsHashCode"/>
-        <module name="IllegalInstantiation"/>
-        <module name="InnerAssignment"/>
-        <module name="MissingSwitchDefault"/>
-        <module name="RedundantThrows">
-            <property name="allowUnchecked" value="true"/>   <!-- DISABLED -->
-            <property name="allowSubclasses" value="true"/>   <!-- DISABLED -->
-        </module>
-        <module name="SimplifyBooleanExpression"/>
-        <module name="SimplifyBooleanReturn"/>
-
-        <!-- Checks for class design                         -->
-        <!-- See http://checkstyle.sf.net/config_design.html -->
-        <module name="DesignForExtension">
-            <property name="severity" value="ignore"/>   <!-- DISABLED -->
-        </module>
-        <module name="HideUtilityClassConstructor"/>
-        <module name="InterfaceIsType"/>
-        <module name="VisibilityModifier">
-            <!-- Protected member variables are widely used in Jackrabbit -->
-            <property name="protectedAllowed" value="true"/>
-        </module>
-
-
-        <!-- Miscellaneous other checks.                   -->
-        <!-- See http://checkstyle.sf.net/config_misc.html -->
-        <module name="ArrayTypeStyle"/>
-        <module name="FinalParameters">
-            <property name="severity" value="ignore"/>   <!-- DISABLED -->
-        </module>
-        <module name="GenericIllegalRegexp">
-            <property name="format" value="\s+$"/>
-            <property name="message" value="Line has trailing spaces."/>
-        </module>
-        <module name="TodoComment"/>
-        <module name="UpperEll"/>
-
-    </module>
-    
-    <module name="SuppressionFilter">
-        <property name="file" value="checkstyle-suppressions.xml"/>
-    </module>    
-
-</module>
diff --git a/contrib/textfilters/project.properties b/contrib/textfilters/project.properties
deleted file mode 100644
index 6cd4ff3..0000000
--- a/contrib/textfilters/project.properties
+++ /dev/null
@@ -1,101 +0,0 @@
-#  Copyright 2003-2005 The Apache Software Foundation or its licensors,
-#                      as applicable
-#
-#  Licensed under the Apache License, Version 2.0 (the "License");
-#  you may not use this file except in compliance with the License.
-#  You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-#  distributed under the License is distributed on an "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#  See the License for the specific language governing permissions and
-#  limitations under the License.
-
-######################################################################
-# Apache Central Repository
-######################################################################
-maven.repo.central=www.apache.org
-maven.repo.central.directory=/www/www.apache.org/dist/java-repository
-maven.remote.group=apcvs
-maven.changelog.factory = org.apache.maven.svnlib.SvnChangeLogFactory
-
-######################################################################
-# JUnit Testing
-######################################################################
-maven.test.failure = false
-maven.junit.fork=true
-#maven.junit.sysproperties=org.xml.sax.driver java.security.auth.login.config
-maven.junit.sysproperties=org.xml.sax.driver
-org.xml.sax.driver=org.apache.xerces.parsers.SAXParser
-#java.security.auth.login.config=applications/test/jaas.config
-
-
-#If you wish to skip tests when doing builds, uncomment
-#maven.test.skip = true
-
-######################################################################
-# Checkstyle
-######################################################################
-maven.checkstyle.properties= checkstyle.xml
-maven.linkcheck.enable=false 
-
-######################################################################
-# JavaDoc
-#
-# javadoc urls can be added here, multiple urls are appended using a comma
-#
-# maven.javadoc.links = http://foo/bar/api,\
-#                       http://flim/flam/api/
-######################################################################
-maven.javadoc.links=http://java.sun.com/j2se/1.4.2/docs/api/,http://www.day.com/maven/jsr170/javadocs/jcr-0.16.4.1/
-maven.javadoc.author=false
-maven.javadoc.version=false
-
-######################################################################
-# Other opts
-######################################################################
-# uncomment the next line to work in offline mode (no jar download & no linkcheck)
-#maven.mode.online=
-
-maven.compile.debug=on
-maven.compile.deprecation=off
-maven.compile.optimize=off
-maven.compile.source=1.4
-maven.compile.target=1.4
-
-maven.jarResources.basedir=src/java
-maven.jar.excludes=**/package.html
-
-# Location of the generated query language parsers. Needed for
-# the Maven Eclipse plugin to automatically locate the generated
-# source files. Note that this value matches the hardcoded path
-# in the Maven JavaCC plugin. Therefore, do not change this value!
-maven.gen.src=${maven.build.dir}/generated-src/main
-
-# specifying additional remote repository for downloading dependencies 
-# not available at www.ibiblio.org/maven/
-maven.repo.remote = http://www.ibiblio.org/maven/
-
-######################################################################
-# Site L&F
-######################################################################
-# maven.xdoc.jsl=
-maven.xdoc.date=
-maven.xdoc.poweredby.image=maven-feather.png
-maven.xdoc.version=${pom.currentVersion}
-maven.xdoc.developmentProcessUrl=http://incubator.apache.org/projects/jackrabbit.html
-maven.changelog.range=60
-maven.changelog.factory=org.apache.maven.svnlib.SvnChangeLogFactory
-
-# ------------------------------------------------------------------------
-# M A V E N  J A R  O V E R R I D E
-# ------------------------------------------------------------------------
-#maven.jar.override = on
-#maven.jar.jcr = ${basedir}/lib/jcr.jar
-
-######################################################################
-# Site Deploy (into ../jackrabbit-site for checkout on incubator.apache.org)
-######################################################################
-maven.site.deploy.method=fs
diff --git a/contrib/textfilters/project.xml b/contrib/textfilters/project.xml
deleted file mode 100644
index acbd368..0000000
--- a/contrib/textfilters/project.xml
+++ /dev/null
@@ -1,279 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2004-2005 The Apache Software Foundation or its licensors,
-                       as applicable.
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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>
-  <artifactId>jackrabbit-textfilters</artifactId>
-  <groupId>org.apache.jackrabbit</groupId>
-  <name>Jackrabbit - Text filters</name>
-  <currentVersion>1.0-SNAPSHOT</currentVersion>
-  <organization>
-    <name>The Apache Software Foundation</name>
-    <url>http://incubator.apache.org/projects/jackrabbit.html</url>
-    <logo>http://incubator.apache.org/images/apache-incubator-logo.png</logo>
-  </organization>
-  <package>org.apache.jackrabbit.*</package>
-  <logo>/images/jackrabbitlogo.gif</logo>
-  <url>http://incubator.apache.org/projects/jackrabbit.html</url>
-  <issueTrackingUrl>http://issues.apache.org/jira/browse/JCR</issueTrackingUrl>
-  <siteDirectory>../jackrabbit-site</siteDirectory>
-  <distributionSite>incubator.apache.org</distributionSite>
-  <distributionDirectory>/www/www.apache.org/dist/java-repository/</distributionDirectory>
-  <repository>
-    <connection>scm:svn:http://svn.apache.org/repos/asf/incubator/jackrabbit/trunk</connection>
-    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/incubator/jackrabbit/trunk</developerConnection>
-    <url>http://svn.apache.org/viewcvs</url>
-  </repository>
-  <mailingLists>
-    <!--
-    <mailingList>
-      <name>Jackrabbit Users List</name>
-      <subscribe>user-subscribe@jackrabbit.apache.org</subscribe>
-      <unsubscribe>user-unsubscribe@jackrabbit.apache.org</unsubscribe>
-      <archive>http://mail-archives.apache.org/eyebrowse/SummarizeList?listName=user@jackrabbit.apache.org</archive>
-    </mailingList>
--->
-    <mailingList>
-      <name>Jackrabbit Developer List</name>
-      <subscribe>jackrabbit-dev-subscribe at incubator.apache.org</subscribe>
-      <unsubscribe>jackrabbit-dev-unsubscribe at incubator.apache.org</unsubscribe>
-      <archive>http://incubator.apache.org/mail/jackrabbit-dev/</archive>
-    </mailingList>
-    <mailingList>
-      <name>Jackrabbit Source Control List</name>
-      <subscribe>jackrabbit-commits-subscribe at incubator.apache.org</subscribe>
-      <unsubscribe>jackrabbit-commits-unsubscribe at incubator.apache.org</unsubscribe>
-      <archive>http://incubator.apache.org/mail/jackrabbit-commits/</archive>
-    </mailingList>
-  </mailingLists>
-  <developers>
-    <developer>
-      <name>Roy T. Fielding</name>
-      <id>fielding</id>
-      <organization>Day Software</organization>
-      <timezone>-8</timezone>
-    </developer>
-    <developer>
-      <name>Stefan Guggisberg</name>
-      <id>stefan</id>
-      <organization>Day Software</organization>
-      <timezone>+1</timezone>
-    </developer>
-    <developer>
-      <name>Stefano Mazzocchi</name>
-      <id>stefano</id>
-      <timezone>-5</timezone>
-    </developer>
-    <developer>
-      <name>David Nuescheler</name>
-      <id>uncled</id>
-      <organization>Day Software</organization>
-      <timezone>+1</timezone>
-    </developer>
-    <developer>
-      <name>Dominique Pfister</name>
-      <id>dpfister</id>
-      <organization>Day Software</organization>
-      <timezone>+1</timezone>
-    </developer>
-    <developer>
-      <name>Peeter Piegaze</name>
-      <id>ppiegaze</id>
-      <organization>Day Software</organization>
-      <timezone>+1</timezone>
-    </developer>
-    <developer>
-      <name>Gianugo Rabellino</name>
-      <id>gianugo</id>
-      <timezone>+1</timezone>
-    </developer>
-    <developer>
-      <name>Tim Reilly</name>
-      <id>treilly</id>
-      <email>treilly at apache dot org</email>
-      <timezone>-5</timezone>
-    </developer>
-    <developer>
-      <name>Marcel Reutegger</name>
-      <id>mreutegg</id>
-      <organization>Day Software</organization>
-      <timezone>+1</timezone>
-    </developer>
-    <developer>
-      <name>Paul Russell</name>
-      <id>prussell</id>
-      <timezone>+0</timezone>
-    </developer>
-    <developer>
-      <name>Andrew Savory</name>
-      <id>asavory</id>
-      <timezone>+0</timezone>
-    </developer>
-    <developer>
-      <name>Tobias Strasser</name>
-      <id>tripod</id>
-      <organization>Day Software</organization>
-      <timezone>+1</timezone>
-    </developer>
-    <developer>
-      <name>Sylvain Wallez</name>
-      <id>sylvain</id>
-      <timezone>+1</timezone>
-    </developer>
-    <developer>
-      <name>Jukka Zitting</name>
-      <id>jukka</id>
-      <email>jz@yukatan.fi</email>
-      <organization>Yukatan</organization>
-      <timezone>+2</timezone>
-    </developer>
-  </developers>
-  <contributors>
-    <contributor>
-      <name>Serge Huber</name>
-      <timezone>+1</timezone>
-    </contributor>
-    <contributor>
-      <name>Felix Meschberger</name>
-      <organization>Day Software</organization>
-      <timezone>+1</timezone>
-    </contributor>
-    <contributor>
-      <name>Edgar Poce</name>
-      <email>edgarpoce@gmail.com</email>
-    </contributor>
-    <contributor>
-      <name>Angela Schreiber</name>
-      <organization>Day Software</organization>
-      <timezone>+1</timezone>
-    </contributor>
-  </contributors>
-  <licenses>
-    <license>
-      <name>The Apache Software License, Version 2.0</name>
-      <url>/LICENSE.txt</url>
-      <distribution>repo</distribution>
-    </license>
-  </licenses>
-  <dependencies>
-    <dependency>
-      <groupId>commons-collections</groupId>
-      <artifactId>commons-collections</artifactId>
-      <version>3.1</version>
-      <type>jar</type>
-    </dependency>
-    <dependency>
-      <groupId>log4j</groupId>
-      <artifactId>log4j</artifactId>
-      <version>1.2.8</version>
-      <type>jar</type>
-    </dependency>
-    <dependency>
-      <groupId>poi</groupId>
-      <artifactId>poi</artifactId>
-      <version>2.0-final-20040126</version>
-      <type>jar</type>
-    </dependency>
-    <dependency>
-      <groupId>pdfbox</groupId>
-      <artifactId>pdfbox</artifactId>
-      <version>0.6.4</version>
-      <type>jar</type>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.jackrabbit</groupId>
-      <artifactId>jackrabbit</artifactId>
-      <version>1.0-SNAPSHOT</version>
-      <type>jar</type>
-    </dependency>
-    <dependency>
-      <groupId>org.textmining</groupId>
-      <artifactId>tm-extractors</artifactId>
-      <version>0.4</version>
-      <type>jar</type>
-      <url>http://www.textmining.org</url>
-    </dependency>
-    <dependency>
-      <groupId>jsr170</groupId>
-      <artifactId>jcr</artifactId>
-      <version>1.0</version>
-      <type>jar</type>
-      <url>http://www.day.com/maven/jsr170/jars/jcr-1.0.jar</url>
-    </dependency>
-    <dependency>
-      <groupId>nekohtml</groupId>
-      <artifactId>nekohtml</artifactId>
-      <version>0.9.4</version>
-      <type>jar</type>
-    </dependency>
-    <dependency>
-      <groupId>xerces</groupId>
-      <artifactId>xerces</artifactId>
-      <version>2.4.0</version>
-      <type>jar</type>
-    </dependency>
-  </dependencies>
-  <build>
-    <sourceDirectory>src/java</sourceDirectory>
-    <unitTestSourceDirectory>src/test</unitTestSourceDirectory>
-    <unitTest>
-      <includes>
-        <include>**/*TestAll.java</include>
-      </includes>
-      <resources>
-        <resource>
-          <directory>src/test</directory>
-          <includes>
-            <include>**/*.xml</include>
-            <include>**/*.txt</include>
-          </includes>
-          <filtering>false</filtering>
-        </resource>
-      </resources>
-    </unitTest>
-    <!-- J A R  R E S O U R C E S -->
-    <!-- Resources that are packaged up inside the JAR file -->
-    <resources>
-      <resource>
-        <directory>src/java</directory>
-        <includes>
-          <include>**/*.xml</include>
-          <include>**/*.properties</include>
-          <include>**/*.TextFilterService</include>
-        </includes>
-        <filtering>false</filtering>
-      </resource>
-    </resources>
-  </build>
-  <reports>
-    <report>maven-changelog-plugin</report>
-    <report>maven-changes-plugin</report>
-    <!-- <report>maven-checkstyle-plugin</report> -->
-    <!-- <report>maven-clover-plugin</report> -->
-    <!-- <report>maven-developer-activity-plugin</report> -->
-    <!-- <report>maven-file-activity-plugin</report> -->
-    <report>maven-javadoc-plugin</report>
-    <!-- <report>maven-jellydoc-plugin</report> -->
-    <report>maven-junit-report-plugin</report>
-    <report>maven-jxr-plugin</report>
-    <report>maven-license-plugin</report>
-    <!-- <report>maven-linkcheck-plugin</report> -->
-    <!-- <report>maven-statcvs-plugin</report> -->
-    <report>maven-tasklist-plugin</report>
-  </reports>
-</project>
-
diff --git a/contrib/textfilters/src/java/org/apache/jackrabbit/core/query/HTMLParser.java b/contrib/textfilters/src/java/org/apache/jackrabbit/core/query/HTMLParser.java
deleted file mode 100644
index e6416e9..0000000
--- a/contrib/textfilters/src/java/org/apache/jackrabbit/core/query/HTMLParser.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.query;
-
-import org.apache.xerces.parsers.AbstractSAXParser;
-import org.apache.xerces.xni.Augmentations;
-import org.apache.xerces.xni.NamespaceContext;
-import org.apache.xerces.xni.XMLLocator;
-import org.apache.xerces.xni.XMLString;
-import org.apache.xerces.xni.XNIException;
-import org.cyberneko.html.HTMLConfiguration;
-
-/**
- * Helper class for HTML parsing
- */
-public class HTMLParser extends AbstractSAXParser {
-
-    private StringBuffer buffer;
-
-    public HTMLParser() {
-
-        super(new HTMLConfiguration());
-    }
-
-    public void startDocument(XMLLocator arg0,
-                              String arg1,
-                              NamespaceContext arg2,
-                              Augmentations arg3) throws XNIException {
-
-        super.startDocument(arg0, arg1, arg2, arg3);
-
-        buffer = new StringBuffer();
-    }
-
-    public void characters(XMLString xmlString, Augmentations augmentations)
-            throws XNIException {
-
-        super.characters(xmlString, augmentations);
-
-        buffer.append(xmlString.toString());
-    }
-
-    private String filterAndJoin(String text) {
-
-        boolean space = false;
-        StringBuffer buffer = new StringBuffer();
-        for (int i = 0; i < text.length(); i++) {
-            char c = text.charAt(i);
-
-            if ((c == '\n') || (c == ' ') || Character.isWhitespace(c)) {
-                if (space) {
-                    continue;
-                } else {
-                    space = true;
-                    buffer.append(' ');
-                    continue;
-                }
-            } else {
-                if (!Character.isLetter(c)) {
-                    if (!space) {
-                        space = true;
-                        buffer.append(' ');
-                        continue;
-                    }
-                    continue;
-                }
-            }
-            space = false;
-            buffer.append(c);
-        }
-        return buffer.toString();
-    }
-
-    /**
-     * Returns parsed content
-     *
-     * @return String Parsed content
-     */
-    public String getContents() {
-
-        String text = filterAndJoin(buffer.toString());
-        return text;
-    }
-}
diff --git a/contrib/textfilters/src/java/org/apache/jackrabbit/core/query/HTMLTextFilter.java b/contrib/textfilters/src/java/org/apache/jackrabbit/core/query/HTMLTextFilter.java
deleted file mode 100644
index f0e80da..0000000
--- a/contrib/textfilters/src/java/org/apache/jackrabbit/core/query/HTMLTextFilter.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.query;
-
-import java.io.StringReader;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.jcr.RepositoryException;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.TransformerFactoryConfigurationError;
-import javax.xml.transform.sax.SAXResult;
-import javax.xml.transform.sax.SAXSource;
-
-import org.apache.jackrabbit.core.query.lucene.FieldNames;
-import org.apache.jackrabbit.core.state.PropertyState;
-import org.apache.jackrabbit.core.value.BLOBFileValue;
-import org.apache.jackrabbit.core.value.InternalValue;
-import org.xml.sax.InputSource;
-import org.xml.sax.helpers.DefaultHandler;
-
-/**
- * Extracts texts from HTML documents. It uses nekohtml library.
- */
-public class HTMLTextFilter implements TextFilter {
-
-    private HTMLParser parser;
-    private SAXResult result;
-    private Transformer transformer;
-
-    /**
-     * @return <code>true</code> for <code>text/xml</code>, <code>false</code>
-     *         otherwise.
-     */
-    public boolean canFilter(String mimeType) {
-        return "text/html".equalsIgnoreCase(mimeType);
-    }
-
-    /**
-     * Returns a map with a single entry for field {@link FieldNames#FULLTEXT}.
-     *
-     * @param data     object containing RTF document data
-     * @param encoding text encoding is not used, since it is specified in the
-     *                 data.
-     * @return a map with a single Reader value for field {@link
-     *         FieldNames#FULLTEXT}.
-     * @throws RepositoryException if data is a multi-value property or if the
-     *                             content can't be extracted
-     */
-    public Map doFilter(PropertyState data, String encoding)
-            throws RepositoryException {
-
-        if (parser == null) {
-            initParser();
-        }
-
-        InternalValue[] values = data.getValues();
-        if (values.length > 0) {
-            try {
-                try {
-                    BLOBFileValue blob =
-                            (BLOBFileValue) values[0].internalValue();
-
-                    SAXSource source =
-                            new SAXSource(parser,
-                                    new InputSource(blob.getStream()));
-                    transformer.transform(source, result);
-
-                    String text = parser.getContents();
-
-                    Map result = new HashMap();
-                    result.put(FieldNames.FULLTEXT, new StringReader(text));
-                    return result;
-                } catch (TransformerException te) {
-                    throw new RepositoryException(te);
-                }
-
-            } catch (IllegalStateException e) {
-                throw new RepositoryException(e);
-            }
-        } else {
-            // multi value not supported
-            throw new RepositoryException("Multi-valued binary properties not supported.");
-        }
-    }
-
-    /**
-     * Inits the parser engine
-     *
-     * @throws javax.jcr.RepositoryException If some error happens
-     */
-    private void initParser() throws javax.jcr.RepositoryException {
-
-
-        try {
-            TransformerFactory factory = TransformerFactory.newInstance();
-            transformer = factory.newTransformer();
-            parser = new HTMLParser();
-            result = new SAXResult(new DefaultHandler());
-        } catch (TransformerConfigurationException e) {
-            throw new RepositoryException(e);
-        } catch (TransformerFactoryConfigurationError e) {
-            throw new RepositoryException(e);
-        }
-    }
-}
diff --git a/contrib/textfilters/src/java/org/apache/jackrabbit/core/query/MsExcelTextFilter.java b/contrib/textfilters/src/java/org/apache/jackrabbit/core/query/MsExcelTextFilter.java
deleted file mode 100644
index afe2415..0000000
--- a/contrib/textfilters/src/java/org/apache/jackrabbit/core/query/MsExcelTextFilter.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.query;
-
-import java.io.CharArrayReader;
-import java.io.CharArrayWriter;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import javax.jcr.RepositoryException;
-
-import org.apache.jackrabbit.core.query.lucene.FieldNames;
-import org.apache.jackrabbit.core.state.PropertyState;
-import org.apache.jackrabbit.core.value.BLOBFileValue;
-import org.apache.jackrabbit.core.value.InternalValue;
-import org.apache.poi.hssf.usermodel.HSSFCell;
-import org.apache.poi.hssf.usermodel.HSSFRow;
-import org.apache.poi.hssf.usermodel.HSSFSheet;
-import org.apache.poi.hssf.usermodel.HSSFWorkbook;
-import org.apache.poi.poifs.filesystem.POIFSFileSystem;
-
-/**
- * Extracts texts from MS Excel document binary data.
- * Taken from Jakarta Slide class
- * <code>org.apache.slide.extractor.MSExcelExtractor</code>
- */
-public class MsExcelTextFilter implements TextFilter {
-
-    /**
-     * @return <code>true</code> for <code>application/vnd.ms-excel</code>, <code>false</code> otherwise.
-     */
-    public boolean canFilter(String mimeType) {
-        return "application/vnd.ms-excel".equalsIgnoreCase(mimeType);
-    }
-
-    /**
-     * Returns a map with a single entry for field {@link FieldNames#FULLTEXT}.
-     * @param data object containing MS Excel document data.
-     * @param encoding text encoding is not used, since it is specified in the data.
-     * @return a map with a single Reader value for field {@link FieldNames#FULLTEXT}.
-     * @throws RepositoryException if data is a multi-value property or it does not
-     * contain valid MS Excel document.
-     */
-    public Map doFilter(PropertyState data, String encoding) throws RepositoryException {
-        InternalValue[] values = data.getValues();
-        if (values.length > 0) {
-            BLOBFileValue blob = (BLOBFileValue) values[0].internalValue();
-                
-            try {
-                CharArrayWriter writer = new CharArrayWriter();
-    
-                POIFSFileSystem fs = new POIFSFileSystem(blob.getStream());
-                HSSFWorkbook workbook = new HSSFWorkbook(fs);
-    
-                for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
-                    HSSFSheet sheet = workbook.getSheetAt(i);
-    
-                    Iterator rows = sheet.rowIterator();
-                    while (rows.hasNext()) {
-                        HSSFRow row = (HSSFRow) rows.next();
-    
-                        Iterator cells = row.cellIterator();
-                        while (cells.hasNext()) {
-                            HSSFCell cell = (HSSFCell) cells.next();
-                            switch (cell.getCellType()) {
-                            case HSSFCell.CELL_TYPE_NUMERIC:
-                                String num = Double.toString(cell.getNumericCellValue()).trim();
-                                if (num.length() > 0) {
-                                    writer.write(num + " ");
-                                }
-                                break;
-                            case HSSFCell.CELL_TYPE_STRING:
-                                String text = cell.getStringCellValue().trim();
-                                if (text.length() > 0) {
-                                    writer.write(text + " ");
-                                }
-                                break;
-                            }
-                        }
-                    }
-                }
-                
-                Map result = new HashMap();
-                result.put(FieldNames.FULLTEXT, new CharArrayReader(writer.toCharArray()));
-                return result;
-            } 
-            catch (IOException ex) {
-                throw new RepositoryException(ex);
-            }
-        } 
-        else {
-            // multi value not supported
-            throw new RepositoryException("Multi-valued binary properties not supported.");
-        }
-    }
-}
\ No newline at end of file
diff --git a/contrib/textfilters/src/java/org/apache/jackrabbit/core/query/MsPowerPointTextFilter.java b/contrib/textfilters/src/java/org/apache/jackrabbit/core/query/MsPowerPointTextFilter.java
deleted file mode 100644
index c6f7ff1..0000000
--- a/contrib/textfilters/src/java/org/apache/jackrabbit/core/query/MsPowerPointTextFilter.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.query;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.jcr.RepositoryException;
-
-import org.apache.jackrabbit.core.query.lucene.FieldNames;
-import org.apache.jackrabbit.core.state.PropertyState;
-import org.apache.jackrabbit.core.value.BLOBFileValue;
-import org.apache.jackrabbit.core.value.InternalValue;
-import org.apache.poi.poifs.eventfilesystem.POIFSReader;
-import org.apache.poi.poifs.eventfilesystem.POIFSReaderEvent;
-import org.apache.poi.poifs.eventfilesystem.POIFSReaderListener;
-import org.apache.poi.poifs.filesystem.DocumentInputStream;
-import org.apache.poi.util.LittleEndian;
-
-/**
- * Extracts texts from MS PowerPoint document binary data. Taken from Jakarta Slide
- * class <code>org.apache.slide.extractor.MSPowerPointExtractor</code>
- */
-public class MsPowerPointTextFilter implements TextFilter {
-
-	/**
-	 * Reader
-	 */
-	private class MsPowerPointListener implements POIFSReaderListener {
-		private OutputStream os;
-
-		MsPowerPointListener(OutputStream os) {
-			this.os = os;
-		}
-
-		public void processPOIFSReaderEvent(POIFSReaderEvent event) {
-			try {
-				if (!event.getName().equalsIgnoreCase("PowerPoint Document"))
-					return;
-				DocumentInputStream input = event.getStream();
-				byte[] buffer = new byte[input.available()];
-				input.read(buffer, 0, input.available());
-				for (int i = 0; i < buffer.length - 20; i++) {
-					long type = LittleEndian.getUShort(buffer, i + 2);
-					long size = LittleEndian.getUInt(buffer, i + 4);
-					if (type == 4008) {
-						os.write(buffer, i + 4 + 1, (int) size + 3);
-						i = i + 4 + 1 + (int) size - 1;
-					}
-				}
-			} catch (Exception e) {
-				
-			}
-		}
-	}
-
-	/**
-	 * @return <code>true</code> for <code>application/vnd.ms-powerpoint</code>,
-	 *         <code>false</code> otherwise.
-	 */
-	public boolean canFilter(String mimeType) {
-		return "application/vnd.ms-powerpoint".equalsIgnoreCase(mimeType)
-				|| "application/mspowerpoint".equalsIgnoreCase(mimeType);
-	}
-
-	/**
-	 * Returns a map with a single entry for field {@link FieldNames#FULLTEXT}.
-	 * 
-	 * @param data
-	 *            object containing MS PowerPoint document data.
-	 * @param encoding
-	 *            text encoding is not used, since it is specified in the data.
-	 * @return a map with a single Reader value for field
-	 *         {@link FieldNames#FULLTEXT}.
-	 * @throws RepositoryException
-	 *             if data is a multi-value property or it does not contain
-	 *             valid MS PowerPoint document.
-	 */
-	public Map doFilter(PropertyState data, String encoding)
-			throws RepositoryException {
-		InternalValue[] values = data.getValues();
-
-		if (values.length == 1) {
-			BLOBFileValue blob = (BLOBFileValue) values[0].internalValue();
-
-			try {
-				ByteArrayOutputStream baos = new ByteArrayOutputStream();
-				MsPowerPointListener listener = new MsPowerPointListener(baos);
-				POIFSReader reader = new POIFSReader();
-				reader.registerListener(listener);
-				reader.read(blob.getStream());
-				Map result = new HashMap();
-				result.put(FieldNames.FULLTEXT, new InputStreamReader(
-						new ByteArrayInputStream(baos.toByteArray())));
-				
-				return result;
-			} catch (IOException ex) {
-				throw new RepositoryException(ex);
-			}
-		} else {
-			// multi value not supported
-			throw new RepositoryException(
-					"Multi-valued binary properties not supported.");
-		}
-	}
-
-}
diff --git a/contrib/textfilters/src/java/org/apache/jackrabbit/core/query/MsWordTextFilter.java b/contrib/textfilters/src/java/org/apache/jackrabbit/core/query/MsWordTextFilter.java
deleted file mode 100644
index 364873e..0000000
--- a/contrib/textfilters/src/java/org/apache/jackrabbit/core/query/MsWordTextFilter.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.query;
-
-import java.io.StringReader;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.jcr.RepositoryException;
-
-import org.apache.jackrabbit.core.query.lucene.FieldNames;
-import org.apache.jackrabbit.core.state.PropertyState;
-import org.apache.jackrabbit.core.value.BLOBFileValue;
-import org.apache.jackrabbit.core.value.InternalValue;
-import org.textmining.text.extraction.WordExtractor;
-
-/**
- * Extracts texts from MS Word document binary data.
- * Taken from Jakarta Slide class
- * <code>org.apache.slide.extractor.MSPowerPointExtractor</code>
- */
-public class MsWordTextFilter implements TextFilter {
-
-    /**
-     * @return <code>true</code> for <code>application/vnd.ms-word</code> 
-     * or <code>application/msword</code>, <code>false</code> otherwise.
-     */
-    public boolean canFilter(String mimeType) {
-        return "application/vnd.ms-word".equalsIgnoreCase(mimeType) || 
-                "application/msword".equalsIgnoreCase(mimeType);
-    }
-
-    /**
-     * Returns a map with a single entry for field {@link FieldNames#FULLTEXT}.
-     * @param data object containing MS Word document data.
-     * @param encoding text encoding is not used, since it is specified in the data.
-     * @return a map with a single Reader value for field {@link FieldNames#FULLTEXT}.
-     * @throws RepositoryException if data is a multi-value property or it does not
-     * contain valid MS Word document.
-     */
-    public Map doFilter(PropertyState data, String encoding) throws RepositoryException {
-        InternalValue[] values = data.getValues();
-        if (values.length > 0) {
-            BLOBFileValue blob = (BLOBFileValue) values[0].internalValue();
-                
-            try {
-                WordExtractor  extractor = new WordExtractor();
-                
-                // This throws raw Exception - not nice
-                String text = extractor.extractText(blob.getStream());          
-                
-                Map result = new HashMap();
-                result.put(FieldNames.FULLTEXT, new StringReader(text));
-                return result;
-            } 
-            catch (Exception ex) {
-                throw new RepositoryException(ex);
-            }
-        } 
-        else {
-            // multi value not supported
-            throw new RepositoryException("Multi-valued binary properties not supported.");
-        }
-    }
-}
\ No newline at end of file
diff --git a/contrib/textfilters/src/java/org/apache/jackrabbit/core/query/PdfTextFilter.java b/contrib/textfilters/src/java/org/apache/jackrabbit/core/query/PdfTextFilter.java
deleted file mode 100644
index b07098d..0000000
--- a/contrib/textfilters/src/java/org/apache/jackrabbit/core/query/PdfTextFilter.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.query;
-
-import java.io.CharArrayReader;
-import java.io.CharArrayWriter;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.jcr.RepositoryException;
-
-import org.apache.jackrabbit.core.query.lucene.FieldNames;
-import org.apache.jackrabbit.core.state.PropertyState;
-import org.apache.jackrabbit.core.value.BLOBFileValue;
-import org.apache.jackrabbit.core.value.InternalValue;
-import org.pdfbox.pdfparser.PDFParser;
-import org.pdfbox.pdmodel.PDDocument;
-import org.pdfbox.util.PDFTextStripper;
-
-/**
- * Extracts texts from Adobe PDF document binary data.
- * Taken from Jakarta Slide class
- * <code>org.apache.slide.extractor.PDFExtractor</code>
- */
-public class PdfTextFilter implements TextFilter {
-
-    /**
-     * @return <code>true</code> for <code>application/pdf</code>, <code>false</code> otherwise.
-     */
-    public boolean canFilter(String mimeType) {
-        return "application/pdf".equalsIgnoreCase(mimeType);
-    }
-
-    /**
-     * Returns a map with a single entry for field {@link FieldNames#FULLTEXT}.
-     * @param data object containing Adobe PDF document data.
-     * @param encoding text encoding is not used, since it is specified in the data.
-     * @return a map with a single Reader value for field {@link FieldNames#FULLTEXT}.
-     * @throws RepositoryException if data is a multi-value property or it does not
-     * contain valid PDF document.
-     */
-    public Map doFilter(PropertyState data, String encoding) throws RepositoryException {
-        InternalValue[] values = data.getValues();
-        if (values.length > 0) {
-            BLOBFileValue blob = (BLOBFileValue) values[0].internalValue();
-                
-            try {
-                PDFParser parser = new PDFParser(blob.getStream());
-                parser.parse();
-    
-                PDDocument document = parser.getPDDocument();
-    
-                CharArrayWriter writer = new CharArrayWriter();
-    
-                PDFTextStripper stripper = new PDFTextStripper();
-                stripper.setLineSeparator("\n");
-                stripper.writeText(document, writer);
-    
-                document.close();
-                writer.close();
-                
-                Map result = new HashMap();
-                result.put(FieldNames.FULLTEXT, new CharArrayReader(writer.toCharArray()));
-                return result;
-            } 
-            catch (IOException ex) {
-                throw new RepositoryException(ex);
-            }
-        } 
-        else {
-            // multi value not supported
-            throw new RepositoryException("Multi-valued binary properties not supported.");
-        }
-    }
-}
\ No newline at end of file
diff --git a/contrib/textfilters/src/java/org/apache/jackrabbit/core/query/RTFTextFilter.java b/contrib/textfilters/src/java/org/apache/jackrabbit/core/query/RTFTextFilter.java
deleted file mode 100644
index 931a381..0000000
--- a/contrib/textfilters/src/java/org/apache/jackrabbit/core/query/RTFTextFilter.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.query;
-
-import java.io.IOException;
-import java.io.StringReader;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.jcr.RepositoryException;
-import javax.swing.text.BadLocationException;
-import javax.swing.text.DefaultStyledDocument;
-import javax.swing.text.rtf.RTFEditorKit;
-
-import org.apache.jackrabbit.core.query.lucene.FieldNames;
-import org.apache.jackrabbit.core.state.PropertyState;
-import org.apache.jackrabbit.core.value.BLOBFileValue;
-import org.apache.jackrabbit.core.value.InternalValue;
-
-/**
- * Extracts texts from RTF documents.
- */
-public class RTFTextFilter implements TextFilter {
-
-    private RTFEditorKit rek = new RTFEditorKit();
-    private DefaultStyledDocument doc = new DefaultStyledDocument();
-
-    /**
-     * @return <code>true</code> for <code>application/rtf</code>,
-     *         <code>false</code> otherwise.
-     */
-    public boolean canFilter(String mimeType) {
-        return "application/rtf".equalsIgnoreCase(mimeType);
-    }
-
-    /**
-     * Returns a map with a single entry for field {@link FieldNames#FULLTEXT}.
-     *
-     * @param data     object containing RTF document data
-     * @param encoding text encoding is not used, since it is specified in the
-     *                 data.
-     * @return a map with a single Reader value for field {@link
-     *         FieldNames#FULLTEXT}.
-     * @throws RepositoryException if data is a multi-value property or if the
-     *                             content can't be extracted
-     */
-    public Map doFilter(PropertyState data, String encoding)
-            throws RepositoryException {
-
-        InternalValue[] values = data.getValues();
-        if (values.length > 0) {
-            try {
-                BLOBFileValue blob = (BLOBFileValue) values[0].internalValue();
-
-                doc.remove(0, doc.getLength());
-                rek.read(blob.getStream(), doc, 0);
-                String text = doc.getText(0, doc.getLength());
-
-                Map result = new HashMap();
-                result.put(FieldNames.FULLTEXT, new StringReader(text));
-                return result;
-            } catch (BadLocationException ble) {
-                throw new RepositoryException(ble);
-            } catch (IOException ioe) {
-                throw new RepositoryException(ioe);
-            } catch (IllegalStateException e) {
-                throw new RepositoryException(e);
-            }
-        } else {
-            // multi value not supported
-            throw new RepositoryException("Multi-valued binary properties not supported.");
-        }
-    }
-}
diff --git a/contrib/textfilters/src/java/org/apache/jackrabbit/core/query/XMLTextFilter.java b/contrib/textfilters/src/java/org/apache/jackrabbit/core/query/XMLTextFilter.java
deleted file mode 100644
index 6eca707..0000000
--- a/contrib/textfilters/src/java/org/apache/jackrabbit/core/query/XMLTextFilter.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.query;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.StringReader;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.jcr.RepositoryException;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
-
-import org.apache.jackrabbit.core.query.lucene.FieldNames;
-import org.apache.jackrabbit.core.state.PropertyState;
-import org.apache.jackrabbit.core.value.BLOBFileValue;
-import org.apache.jackrabbit.core.value.InternalValue;
-import org.xml.sax.Attributes;
-import org.xml.sax.ErrorHandler;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-import org.xml.sax.XMLReader;
-import org.xml.sax.helpers.DefaultHandler;
-
-/**
- * Extracts texts from XML documents.
- */
-public class XMLTextFilter implements TextFilter {
-
-    private org.apache.jackrabbit.core.query.XMLTextFilter.XMLParser parser;
-
-    /**
-     * @return <code>true</code> for <code>text/xml</code>, <code>false</code>
-     *         otherwise.
-     */
-    public boolean canFilter(String mimeType) {
-        return "text/xml".equalsIgnoreCase(mimeType);
-    }
-
-    /**
-     * Returns a map with a single entry for field {@link FieldNames#FULLTEXT}.
-     *
-     * @param data     object containing RTF document data
-     * @param encoding text encoding is not used, since it is specified in the
-     *                 data.
-     * @return a map with a single Reader value for field {@link
-     *         FieldNames#FULLTEXT}.
-     * @throws RepositoryException if data is a multi-value property or if the
-     *                             content can't be extracted
-     */
-    public Map doFilter(PropertyState data, String encoding)
-            throws RepositoryException {
-
-        if (parser == null) {
-            initParser();
-        }
-
-        InternalValue[] values = data.getValues();
-        if (values.length > 0) {
-            try {
-                try {
-                    BLOBFileValue blob = (BLOBFileValue) values[0].internalValue();
-                    parser.parse(blob.getStream());
-                    String text = parser.getContents();
-
-                    Map result = new HashMap();
-                    result.put(FieldNames.FULLTEXT, new StringReader(text));
-                    return result;
-                } catch (IOException ioe) {
-                    throw new RepositoryException(ioe);
-                }
-
-            } catch (IllegalStateException e) {
-                throw new RepositoryException(e);
-            }
-        } else {
-            // multi value not supported
-            throw new RepositoryException("Multi-valued binary properties not supported.");
-        }
-    }
-
-    /**
-     * Inits the parser engine
-     *
-     * @throws javax.jcr.RepositoryException If some error happens
-     */
-    private void initParser() throws javax.jcr.RepositoryException {
-
-        try {
-            SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
-            saxParserFactory.setValidating(false);
-            SAXParser saxParser = saxParserFactory.newSAXParser();
-            XMLReader xmlReader = saxParser.getXMLReader();
-            parser = new XMLParser(xmlReader);
-        } catch (ParserConfigurationException e) {
-            throw new javax.jcr.RepositoryException();
-        } catch (SAXException e) {
-            throw new javax.jcr.RepositoryException();
-        }
-    }
-
-    /**
-     * Private helper XML parser. It only processes text elements. Feel free to
-     * change for adding support for attributes or tags text extraction.
-     */
-    private class XMLParser extends DefaultHandler implements ErrorHandler {
-
-        private XMLReader xmlReader;
-        private StringBuffer buffer;
-
-        public XMLParser(XMLReader xmlReader) {
-
-            try {
-
-                this.xmlReader = xmlReader;
-                this.xmlReader.setContentHandler(this);
-                this.xmlReader.setErrorHandler(this);
-
-            } catch (Exception ex) {
-
-            }
-        }
-
-        public void startDocument() throws SAXException {
-
-            buffer = new StringBuffer();
-        }
-
-        public void startElement(String namespaceURI, String localName,
-                                 String rawName, Attributes atts)
-                throws SAXException {
-        }
-
-        public void characters(char[] ch,
-                               int start,
-                               int length) throws SAXException {
-
-
-            buffer.append(ch, start, length);
-        }
-
-        public void endElement(java.lang.String namespaceURI,
-                               java.lang.String localName,
-                               java.lang.String qName)
-                throws SAXException {
-        }
-
-
-        public void warning(SAXParseException spe) throws SAXException {
-
-
-        }
-
-        public void error(SAXParseException spe) throws SAXException {
-
-        }
-
-        public void fatalError(SAXParseException spe) throws SAXException {
-
-        }
-
-        public void parse(InputStream is) throws IOException {
-
-            try {
-                InputSource source = new InputSource(is);
-                xmlReader.parse(source);
-            } catch (SAXException se) {
-                // ignore errors
-            }
-        }
-
-        private String filterAndJoin(String text) {
-
-            boolean space = false;
-            StringBuffer buffer = new StringBuffer();
-            for (int i = 0; i < text.length(); i++) {
-                char c = text.charAt(i);
-
-                if ((c == '\n') || (c == ' ') || Character.isWhitespace(c)) {
-                    if (space) {
-                        continue;
-                    } else {
-                        space = true;
-                        buffer.append(' ');
-                        continue;
-                    }
-                } else {
-                    if (!Character.isLetter(c)) {
-                        if (!space) {
-                            space = true;
-                            buffer.append(' ');
-                            continue;
-                        }
-                        continue;
-                    }
-                }
-                space = false;
-                buffer.append(c);
-            }
-            return buffer.toString();
-        }
-
-        public String getContents() {
-
-            String text = filterAndJoin(buffer.toString());
-            return text;
-        }
-
-    }
-}
diff --git a/contrib/textfilters/src/test/org/apache/jackrabbit/core/query/test/AbstractTextFilterTest.java b/contrib/textfilters/src/test/org/apache/jackrabbit/core/query/test/AbstractTextFilterTest.java
deleted file mode 100644
index 8754047..0000000
--- a/contrib/textfilters/src/test/org/apache/jackrabbit/core/query/test/AbstractTextFilterTest.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jackrabbit.core.query.test;
-
-import java.io.File;
-import java.io.Reader;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.apache.jackrabbit.name.QName;
-import org.apache.jackrabbit.core.query.TextFilter;
-import org.apache.jackrabbit.core.state.PropertyState;
-import org.apache.jackrabbit.core.value.InternalValue;
-
-public class AbstractTextFilterTest {
-
-	public void showResult(File file, TextFilter filter) throws Exception {
-		PropertyState state = new PropertyState(new QName("", ""), "", 1, true);
-
-		InternalValue value = InternalValue.create(file);
-		state.setValues(new InternalValue[] { value });
-
-		Map fields = filter.doFilter(state, System.getProperty("encoding"));
-		for (Iterator it = fields.keySet().iterator(); it.hasNext();) {
-			String field = (String) it.next();
-			Reader r = (Reader) fields.get(field);
-			System.out.println("---------------");
-			System.out.println("Field: " + field);
-			int i;
-			while ((i = r.read()) != -1) {
-				System.out.print((char) i);
-			}
-			r.close();
-			System.out.println("");
-		}
-	}
-
-}
diff --git a/contrib/textfilters/src/test/org/apache/jackrabbit/core/query/test/HTMLTest.java b/contrib/textfilters/src/test/org/apache/jackrabbit/core/query/test/HTMLTest.java
deleted file mode 100644
index 9a0f075..0000000
--- a/contrib/textfilters/src/test/org/apache/jackrabbit/core/query/test/HTMLTest.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.query.test;
-
-import java.io.File;
-
-import org.apache.jackrabbit.core.query.HTMLTextFilter;
-
-
-public class HTMLTest extends AbstractTextFilterTest {
-
-	public static void main(String[] args) throws Exception {
-		HTMLTest test = new HTMLTest();
-		File file = new File(args[0]);
-		test.showResult(file, new HTMLTextFilter());
-	}
-}
diff --git a/contrib/textfilters/src/test/org/apache/jackrabbit/core/query/test/MSExcelTest.java b/contrib/textfilters/src/test/org/apache/jackrabbit/core/query/test/MSExcelTest.java
deleted file mode 100644
index 48b6f8a..0000000
--- a/contrib/textfilters/src/test/org/apache/jackrabbit/core/query/test/MSExcelTest.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.query.test;
-
-import java.io.File;
-
-import org.apache.jackrabbit.core.query.MsExcelTextFilter;
-
-
-public class MSExcelTest extends AbstractTextFilterTest {
-
-	public static void main(String[] args) throws Exception {
-		MSExcelTest test = new MSExcelTest();
-		File file = new File(args[0]);
-		test.showResult(file, new MsExcelTextFilter());
-	}
-
-}
diff --git a/contrib/textfilters/src/test/org/apache/jackrabbit/core/query/test/MSPowerPointTest.java b/contrib/textfilters/src/test/org/apache/jackrabbit/core/query/test/MSPowerPointTest.java
deleted file mode 100644
index 8f8b723..0000000
--- a/contrib/textfilters/src/test/org/apache/jackrabbit/core/query/test/MSPowerPointTest.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.query.test;
-
-import java.io.File;
-
-import org.apache.jackrabbit.core.query.MsPowerPointTextFilter;
-
-public class MSPowerPointTest extends AbstractTextFilterTest {
-
-	public static void main(String[] args) throws Exception {
-		MSPowerPointTest test = new MSPowerPointTest();
-		File file = new File(args[0]);
-		test.showResult(file, new MsPowerPointTextFilter());
-	}
-}
diff --git a/contrib/textfilters/src/test/org/apache/jackrabbit/core/query/test/MsWordTest.java b/contrib/textfilters/src/test/org/apache/jackrabbit/core/query/test/MsWordTest.java
deleted file mode 100644
index 19a6684..0000000
--- a/contrib/textfilters/src/test/org/apache/jackrabbit/core/query/test/MsWordTest.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.query.test;
-
-import java.io.File;
-
-import org.apache.jackrabbit.core.query.MsWordTextFilter;
-
-
-public class MsWordTest extends AbstractTextFilterTest {
-
-	public static void main(String[] args) throws Exception {
-		MsWordTest test = new MsWordTest();
-		File file = new File(args[0]);
-		test.showResult(file, new MsWordTextFilter());
-	}
-}
diff --git a/contrib/textfilters/src/test/org/apache/jackrabbit/core/query/test/PdfTest.java b/contrib/textfilters/src/test/org/apache/jackrabbit/core/query/test/PdfTest.java
deleted file mode 100644
index d284937..0000000
--- a/contrib/textfilters/src/test/org/apache/jackrabbit/core/query/test/PdfTest.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.query.test;
-
-import java.io.File;
-
-import org.apache.jackrabbit.core.query.PdfTextFilter;
-
-
-public class PdfTest extends AbstractTextFilterTest {
-
-	public static void main(String[] args) throws Exception {
-		PdfTest test = new PdfTest();
-		File file = new File(args[0]);
-		test.showResult(file, new PdfTextFilter());
-	}
-}
diff --git a/contrib/textfilters/src/test/org/apache/jackrabbit/core/query/test/RTFTest.java b/contrib/textfilters/src/test/org/apache/jackrabbit/core/query/test/RTFTest.java
deleted file mode 100644
index 1d20e8b..0000000
--- a/contrib/textfilters/src/test/org/apache/jackrabbit/core/query/test/RTFTest.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.query.test;
-
-import java.io.File;
-
-import org.apache.jackrabbit.core.query.RTFTextFilter;
-
-
-public class RTFTest extends AbstractTextFilterTest {
-
-	public static void main(String[] args) throws Exception {
-		RTFTest test = new RTFTest();
-		File file = new File(args[0]);
-		test.showResult(file, new RTFTextFilter());
-	}
-}
diff --git a/contrib/textfilters/src/test/org/apache/jackrabbit/core/query/test/XMLTest.java b/contrib/textfilters/src/test/org/apache/jackrabbit/core/query/test/XMLTest.java
deleted file mode 100644
index 6797dcc..0000000
--- a/contrib/textfilters/src/test/org/apache/jackrabbit/core/query/test/XMLTest.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.query.test;
-
-import java.io.File;
-
-import org.apache.jackrabbit.core.query.XMLTextFilter;
-
-
-public class XMLTest extends AbstractTextFilterTest {
-
-	public static void main(String[] args) throws Exception {
-		XMLTest test = new XMLTest();
-		File file = new File(args[0]);
-		test.showResult(file, new XMLTextFilter());
-	}
-}
diff --git a/contrib/vfs/05-03-03-repository.xml b/contrib/vfs/05-03-03-repository.xml
deleted file mode 100644
index 234c63b..0000000
--- a/contrib/vfs/05-03-03-repository.xml
+++ /dev/null
@@ -1,228 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!-- <!DOCTYPE Repository PUBLIC "-//The Apache Software Foundation//DTD Repository//EN" "file://config.dtd"> -->
-<!DOCTYPE Repository [
-    <!--
-        the Repository element configures a repository instance;
-        individual workspaces of the repository are configured through
-        separate configuration files called workspace.xml which are
-        located in a subfolder of the workspaces root directory
-        (see Workspaces element).
-
-        it consists of
-
-            a FileSystem element (the virtual file system
-            used by the repository to persist global state such as
-            registered namespaces, custom node types, etc..
-
-            a Security element that specifies the name of the app-entry
-            in the JAAS config and the access manager
-
-            a Workspaces element that specifies to the location of
-            workspaces root directory and the name of default workspace
-
-            a Workspace element that is used as a workspace configuration
-            template; it is used to create the initial workspace if there's
-            no workspace yet and for creating additional workspaces through
-            the api
-
-            a SearchIndex element that is used for configuring per workspace
-            Indexing-related settings
-
-            a Versioning element that is used for configuring
-            versioning-related settings
-    -->
-    <!ELEMENT Repository (FileSystem,Security,Workspaces,Workspace,Versioning)>
-
-    <!--
-        a virtual file system
-    -->
-    <!ELEMENT FileSystem (param*)>
-    <!ATTLIST FileSystem
-      class CDATA #REQUIRED>
-
-    <!--
-        the Security element specifies the name (appName attribute)
-        of the JAAS configuration app-entry for this repository. 
-
-        it also specifies the access manager to be used (AccessManager element).
-    -->
-    <!ELEMENT Security (AccessManager)>
-    <!ATTLIST Security
-      appName CDATA #REQUIRED>
-
-    <!--
-        the AccessManager element configures the access manager to be used by
-        this repository instance; the class attribute specifies the FQN of the
-        class implementing the AccessManager interface
-    -->
-    <!ELEMENT AccessManager (param*)>
-    <!ATTLIST AccessManager
-      class CDATA #REQUIRED>
-
-    <!--
-        generic parameter (name/value pair)
-    -->
-    <!ELEMENT param EMPTY>
-    <!ATTLIST param
-      name CDATA #REQUIRED
-      value CDATA #REQUIRED>
-
-    <!--
-        the Workspaces element specifies the workspaces root directory
-        (rootPath attribute) and the name of the default workspace
-        (defaultWorkspace attribute).
-
-        individual workspaces are configured through individual workspace.xml
-        files located in a subfolder each of the workspaces root directory.
-    -->
-    <!ELEMENT Workspaces EMPTY>
-    <!ATTLIST Workspaces
-      rootPath CDATA #REQUIRED
-      defaultWorkspace CDATA #REQUIRED>
-
-    <!--
-        the Workspace element serves as a workspace configuration template;
-        it is used to create the initial workspace if there's no workspace yet
-        and for creating additional workspaces through the api
-    -->
-    <!ELEMENT Workspace (FileSystem,PersistenceManager,SearchIndex?)>
-    <!ATTLIST Workspace
-      name CDATA #REQUIRED>
-
-    <!--
-        the PersistenceManager element configures the persistence manager
-        to be used for the workspace; the class attribute specifies the
-        FQN of the class implementing the PersistenceManager interface
-    -->
-    <!ELEMENT PersistenceManager (param*)>
-    <!ATTLIST PersistenceManager
-      class CDATA #REQUIRED>
-
-    <!--
-        the SearchIndex element specifies the locaction of the search index
-        (used by the QueryHandler); the class attribute specifies the
-        FQN of the class implementing the QueryHandler interface.
-    -->
-    <!ELEMENT SearchIndex (param*,FileSystem)>
-    <!ATTLIST SearchIndex
-      class CDATA #REQUIRED>
-
-    <!--
-        the Versioning element configures the persistence manager
-        to be used for persisting version state
-    -->
-    <!ELEMENT Versioning (FileSystem, PersistenceManager)>
-    <!ATTLIST Versioning
-      rootPath CDATA #REQUIRED
-    >
-]>
-<!-- Example Repository Configuration File -->
-<Repository>
-    <!--
-        virtual file system where the repository stores global state
-        (e.g. registered namespaces, custom node types, etc.)
-    -->
-    <FileSystem class="org.apache.jackrabbit.core.fs.vfs.VFSFileSystem">
-        <param name="path" value="${rep.home}/repository"/>
-        <param name="prefix" value="tmp"/>
-        <param name="config" value="providers.xml" /> 
-    </FileSystem>
-
-    <!--
-        security configuration
-    -->
-    <Security appName="Jackrabbit">
-        <!--
-            access manager:
-            class: FQN of class implementing the AccessManager interface
-        -->
-        <AccessManager class="org.apache.jackrabbit.core.security.SimpleAccessManager">
-            <!-- <param name="config" value="${rep.home}/access.xml"/> -->
-        </AccessManager>
-    </Security>
-
-    <!--
-        location of workspaces root directory and name of default workspace
-    -->
-    <Workspaces rootPath="${rep.home}/workspaces" defaultWorkspace="default"/>
-    <!--
-        workspace configuration template:
-        used to create the initial workspace if there's no workspace yet
-    -->
-    <Workspace name="${wsp.name}">
-        <!--
-            virtual file system of the workspace:
-            class: FQN of class implementing the FileSystem interface
-        -->
-        <FileSystem class="org.apache.jackrabbit.core.fs.vfs.VFSFileSystem">
-	        <param name="path" value="${wsp.home}/wspStore.dat"/>
-	        <param name="prefix" value="tmp"/>
-	        <param name="config" value="providers.xml"/>
-        </FileSystem>
-        <!--
-        <FileSystem class="org.apache.jackrabbit.core.fs.vfs.VFSFileSystem">
-	        <param name="path" value="${wsp.home}"/>
-	        <param name="prefix" value="tmp"/>
-	        <param name="config" value="providers.xml"/>
-        </FileSystem>
-        -->
-        <!--
-            persistence manager of the workspace:
-            class: FQN of class implementing the PersistenceManager interface
-        -->
-        <!--
-        <PersistenceManager class="org.apache.jackrabbit.core.state.xml.XMLPersistenceManager"/>
-        -->
-        <!--
-        <PersistenceManager class="org.apache.jackrabbit.core.state.mem.InMemPersistenceManager">
-            <param name="initialCapacity" value="100000"/>
-            <param name="loadFactor" value="0.3"/>
-            <param name="persistent" value="true"/>
-        </PersistenceManager>
-        -->
-        <PersistenceManager class="org.apache.jackrabbit.core.state.obj.ObjectPersistenceManager"/>
-        <!--
-            Search index and the file system it uses.
-        -->
-        <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
-            <param name="useCompoundFile" value="true"/>
-            <param name="minMergeDocs" value="1000"/>
-            <param name="maxMergeDocs" value="10000"/>
-            <param name="mergeFactor" value="10"/>
-
-            <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
-                <param name="path" value="${wsp.home}/index"/>
-            </FileSystem>
-        </SearchIndex>
-    </Workspace>
-
-    <!--
-        Configures the versioning
-    -->
-    <Versioning rootPath="${rep.home}/version">
-        <!--
-            Configures the filesystem to use for versioning for the respective
-            persistence manager
-        -->
-        <FileSystem class="org.apache.jackrabbit.core.fs.vfs.VFSFileSystem">
-	        <param name="path" value="${rep.home}/version/version.dat"/>
-	        <param name="prefix" value="tmp"/>
-	        <param name="config" value="providers.xml" /> 
-        </FileSystem>
-    
-        <!--
-            <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
-                <param name="path" value="${rep.home}/version"/>
-            </FileSystem>
-        -->
-        
-        <!--
-            Configures the perisistence manager to be used for persisting version state.
-            Please note that the current versioning implementation is based on
-            a 'normal' persistence manager, but this could change in future
-            implementations.
-        -->
-        <PersistenceManager class="org.apache.jackrabbit.core.state.obj.ObjectPersistenceManager"/>
-
-    </Versioning>
-</Repository>
diff --git a/contrib/vfs/README.txt b/contrib/vfs/README.txt
deleted file mode 100644
index eb0e5d7..0000000
--- a/contrib/vfs/README.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-For testing you can use tmp provider. This provider will delete 
-all the files and folders on repository shutdown.
-
-The providers configuration file (providers.xml) must be in the classpath.
-
-repository.xml Example:
-<FileSystem class="org.apache.jackrabbit.core.fs.vfs.VFSFileSystem">
-	<!-- full path to the base folder. -->
-    <param name="path" value="/repository"/>
-    <!-- provider prefix -->
-    <param name="prefix" value="tmp"/>
-	<!-- providers configuration file name -->
-    <param name="config" value="providers.xml"/>
-</FileSystem>
diff --git a/contrib/vfs/src/java/org/apache/jackrabbit/core/fs/vfs/VFSFileSystem.java b/contrib/vfs/src/java/org/apache/jackrabbit/core/fs/vfs/VFSFileSystem.java
deleted file mode 100644
index 3298c7f..0000000
--- a/contrib/vfs/src/java/org/apache/jackrabbit/core/fs/vfs/VFSFileSystem.java
+++ /dev/null
@@ -1,631 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.fs.vfs;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Collection;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.commons.vfs.AllFileSelector;
-import org.apache.commons.vfs.FileObject;
-import org.apache.commons.vfs.FileSelector;
-import org.apache.commons.vfs.FileSystemException;
-import org.apache.commons.vfs.FileType;
-import org.apache.commons.vfs.FileUtil;
-import org.apache.commons.vfs.RandomAccessContent;
-import org.apache.commons.vfs.cache.SoftRefFilesCache;
-import org.apache.commons.vfs.impl.StandardFileSystemManager;
-import org.apache.commons.vfs.util.RandomAccessMode;
-import org.apache.jackrabbit.core.fs.FileSystem;
-import org.apache.jackrabbit.core.fs.RandomAccessOutputStream;
-
-/**
- * FileSystem backed by Commons VFS
- * 
- * @author <a href="mailto:edgarpoce@gmail.com">Edgar Poce </a>
- */
-public class VFSFileSystem implements FileSystem
-{
-    /**
-     * Logger
-     */
-    private Log log = LogFactory.getLog(VFSFileSystem.class);
-
-    /**
-     * File selector
-     */
-    public final static FileSelector ALL = new AllFileSelector() ;
-    
-    /**
-     * VFS manager
-     */
-    StandardFileSystemManager fsManager;
-
-    /**
-     * Scheme
-     */
-    private String prefix;
-
-    /**
-     * Path
-     */
-    private String path;
-
-    /**
-     * The config file
-     */
-    private String config;
-
-    /**
-     * 
-     */
-    public VFSFileSystem()
-    {
-        super();
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.jackrabbit.core.fs.FileSystem#init()
-     */
-    public void init() throws org.apache.jackrabbit.core.fs.FileSystemException
-    {
-
-        if (this.path == null)
-        {
-            String msg = "Path is not set";
-            log.error(msg);
-            throw new org.apache.jackrabbit.core.fs.FileSystemException(msg);
-        }
-
-        if (this.config == null)
-        {
-            String msg = "Configuration file name is not set (\"config\" parameter ).";
-            log.error(msg);
-            throw new org.apache.jackrabbit.core.fs.FileSystemException(msg);
-        }
-
-        try
-        {
-            // Init file system
-            fsManager = new StandardFileSystemManager();
-            
-            // Set class loader for resource retrieval
-            fsManager.setClassLoader(this.getClass().getClassLoader());
-            
-            // Configuration file name
-            fsManager.setConfiguration(this.getClass().getClassLoader()
-                    .getResource(this.config).toExternalForm());
-            
-            // Set the logger
-            fsManager.setLogger(log);
-            
-            // Cache strategy
-            // FIXME: set through configuration
-            fsManager.setFilesCache(new SoftRefFilesCache());
-            fsManager.init();
-
-            // Set the base folder
-            FileObject fo = fsManager
-                    .resolveFile(this.prefix + ":" + this.path);
-            fsManager.setBaseFile(fo);
-            
-        } catch (FileSystemException e)
-        {
-            String msg = "Unable to init VFS FileSystem";
-            log.error(msg, e);
-            throw new org.apache.jackrabbit.core.fs.FileSystemException(msg, e);
-        }
-
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.jackrabbit.core.fs.FileSystem#close()
-     */
-    public void close()
-            throws org.apache.jackrabbit.core.fs.FileSystemException
-    {
-        this.fsManager.close() ;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.jackrabbit.core.fs.FileSystem#getInputStream(java.lang.String)
-     */
-    public InputStream getInputStream(String filePath)
-            throws org.apache.jackrabbit.core.fs.FileSystemException
-    {
-        try
-        {
-            FileObject file = this.getFile(filePath);
-            this.validateFile(file);
-            return file.getContent().getInputStream();
-        } catch (FileSystemException e)
-        {
-            throw new org.apache.jackrabbit.core.fs.FileSystemException(e);
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.jackrabbit.core.fs.FileSystem#getOutputStream(java.lang.String)
-     */
-    public OutputStream getOutputStream(String filePath)
-            throws org.apache.jackrabbit.core.fs.FileSystemException
-    {
-        try
-        {
-            FileObject file = this.getFile(filePath);
-            if (!file.exists())
-            {
-                file.createFile();
-            }
-            this.validateFile(file);
-            return file.getContent().getOutputStream();
-        } catch (FileSystemException e)
-        {
-            throw new org.apache.jackrabbit.core.fs.FileSystemException(e);
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.jackrabbit.core.fs.FileSystem#getRandomAccessOutputStream(java.lang.String)
-     */
-    public RandomAccessOutputStream getRandomAccessOutputStream(String filePath)
-            throws org.apache.jackrabbit.core.fs.FileSystemException
-    {
-        try
-        {
-            FileObject file = this.getFile(filePath);
-            this.validateFile(file);
-            RandomAccessContent raf = file.getContent().getRandomAccessContent(
-                    RandomAccessMode.READWRITE);
-            return new VFSRAFOutputStream(raf);
-        } catch (FileSystemException e)
-        {
-            throw new org.apache.jackrabbit.core.fs.FileSystemException(e);
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.jackrabbit.core.fs.FileSystem#createFolder(java.lang.String)
-     */
-    public void createFolder(String folderPath)
-            throws org.apache.jackrabbit.core.fs.FileSystemException
-    {
-        try
-        {
-            FileObject folder = this.getFile(folderPath);
-            folder.createFolder();
-        } catch (FileSystemException e)
-        {
-            throw new org.apache.jackrabbit.core.fs.FileSystemException(e);
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.jackrabbit.core.fs.FileSystem#exists(java.lang.String)
-     */
-    public boolean exists(String path)
-            throws org.apache.jackrabbit.core.fs.FileSystemException
-    {
-        try
-        {
-            return this.getFile(path).exists();
-        } catch (FileSystemException e)
-        {
-            throw new org.apache.jackrabbit.core.fs.FileSystemException(e);
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.jackrabbit.core.fs.FileSystem#isFile(java.lang.String)
-     */
-    public boolean isFile(String path)
-            throws org.apache.jackrabbit.core.fs.FileSystemException
-    {
-        try
-        {
-            return this.getFile(path).getType().equals(FileType.FILE);
-        } catch (FileSystemException e)
-        {
-            throw new org.apache.jackrabbit.core.fs.FileSystemException(e);
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.jackrabbit.core.fs.FileSystem#isFolder(java.lang.String)
-     */
-    public boolean isFolder(String path)
-            throws org.apache.jackrabbit.core.fs.FileSystemException
-    {
-        try
-        {
-            return this.getFile(path).getType().equals(FileType.FOLDER);
-        } catch (FileSystemException e)
-        {
-            throw new org.apache.jackrabbit.core.fs.FileSystemException(e);
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.jackrabbit.core.fs.FileSystem#hasChildren(java.lang.String)
-     */
-    public boolean hasChildren(String path)
-            throws org.apache.jackrabbit.core.fs.FileSystemException
-    {
-        try
-        {
-            return this.getFile(path).getChildren().length > 0;
-        } catch (FileSystemException e)
-        {
-            throw new org.apache.jackrabbit.core.fs.FileSystemException(e);
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.jackrabbit.core.fs.FileSystem#length(java.lang.String)
-     */
-    public long length(String filePath)
-            throws org.apache.jackrabbit.core.fs.FileSystemException
-    {
-        try
-        {
-            FileObject file = this.getFile(filePath);
-            this.validateFile(file);
-            return file.getContent().getSize();
-        } catch (FileSystemException e)
-        {
-            throw new org.apache.jackrabbit.core.fs.FileSystemException(e);
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.jackrabbit.core.fs.FileSystem#lastModified(java.lang.String)
-     */
-    public long lastModified(String path)
-            throws org.apache.jackrabbit.core.fs.FileSystemException
-    {
-        try
-        {
-            return this.getFile(path).getContent().getLastModifiedTime();
-        } catch (FileSystemException e)
-        {
-            throw new org.apache.jackrabbit.core.fs.FileSystemException(e);
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.jackrabbit.core.fs.FileSystem#touch(java.lang.String)
-     */
-    public void touch(String filePath)
-            throws org.apache.jackrabbit.core.fs.FileSystemException
-    {
-        try
-        {
-            FileObject file = this.getFile(filePath);
-            this.validateFile(file);
-            file.getContent().setLastModifiedTime(
-                    Calendar.getInstance().getTimeInMillis());
-        } catch (FileSystemException e)
-        {
-            throw new org.apache.jackrabbit.core.fs.FileSystemException(e);
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.jackrabbit.core.fs.FileSystem#list(java.lang.String)
-     */
-    public String[] list(String folderPath)
-            throws org.apache.jackrabbit.core.fs.FileSystemException
-    {
-        return this.list(this.getFile(folderPath), null);
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.jackrabbit.core.fs.FileSystem#listFiles(java.lang.String)
-     */
-    public String[] listFiles(String folderPath)
-            throws org.apache.jackrabbit.core.fs.FileSystemException
-    {
-        return this.list(this.getFile(folderPath), FileType.FILE);
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.jackrabbit.core.fs.FileSystem#listFolders(java.lang.String)
-     */
-    public String[] listFolders(String folderPath)
-            throws org.apache.jackrabbit.core.fs.FileSystemException
-    {
-        return this.list(this.getFile(folderPath), FileType.FOLDER);
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.jackrabbit.core.fs.FileSystem#deleteFile(java.lang.String)
-     */
-    public void deleteFile(String filePath)
-            throws org.apache.jackrabbit.core.fs.FileSystemException
-    {
-        try
-        {
-            FileObject file = this.getFile(filePath);
-            this.validateFile(file);
-            this.delete(file);
-        } catch (FileSystemException e)
-        {
-            throw new org.apache.jackrabbit.core.fs.FileSystemException(e);
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.jackrabbit.core.fs.FileSystem#deleteFolder(java.lang.String)
-     */
-    public void deleteFolder(String folderPath)
-            throws org.apache.jackrabbit.core.fs.FileSystemException
-    {
-        try
-        {
-            FileObject folder = this.getFile(folderPath);
-            this.validateFolder(folder);
-            this.delete(folder);
-        } catch (FileSystemException e)
-        {
-            throw new org.apache.jackrabbit.core.fs.FileSystemException(e);
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.jackrabbit.core.fs.FileSystem#move(java.lang.String,
-     *      java.lang.String)
-     */
-    public void move(String srcPath, String destPath)
-            throws org.apache.jackrabbit.core.fs.FileSystemException
-    {
-        try
-        {
-            FileObject src = this.getFile(srcPath);
-            FileObject dest = this.getFile(destPath);
-            src.moveTo(dest);
-        } catch (FileSystemException e)
-        {
-            throw new org.apache.jackrabbit.core.fs.FileSystemException(e);
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.jackrabbit.core.fs.FileSystem#copy(java.lang.String,
-     *      java.lang.String)
-     */
-    public void copy(String srcPath, String destPath)
-            throws org.apache.jackrabbit.core.fs.FileSystemException
-    {
-        try
-        {
-            FileObject src = this.getFile(srcPath);
-            FileObject dest = this.getFile(destPath);
-            FileUtil.copyContent(src, dest);
-        } catch (FileSystemException e)
-        {
-            throw new org.apache.jackrabbit.core.fs.FileSystemException(e);
-        } catch (IOException e)
-        {
-            throw new org.apache.jackrabbit.core.fs.FileSystemException(e);
-        }
-    }
-
-    /**
-     * Gets the FileObject for the given path
-     * 
-     * @param path
-     * @return FileSystem
-     * @throws FileSystemException
-     */
-    private FileObject getFile(String path)
-            throws org.apache.jackrabbit.core.fs.FileSystemException
-    {
-        try
-        {
-            if (path.startsWith("/")) {
-                path = path.substring(1, path.length()) ;
-            }
-            return fsManager.resolveFile(path);
-        } catch (FileSystemException e)
-        {
-            String msg = "Unable to get file " + path;
-            log.error(msg, e);
-            throw new org.apache.jackrabbit.core.fs.FileSystemException(msg, e);
-        }
-    }
-
-    /**
-     * Validates Folder Type
-     * 
-     * @param folder
-     * @throws FileSystemException
-     */
-    private void validateFolder(FileObject folder) throws FileSystemException
-    {
-        if (!folder.getType().equals(FileType.FOLDER))
-        {
-            String msg = folder.getName().getPath()
-                    + " does not denote a folder";
-            log.error(msg);
-            throw new FileSystemException(msg);
-        }
-    }
-
-    /**
-     * Validates File Type
-     * 
-     * @param folder
-     * @throws FileSystemException
-     */
-    private void validateFile(FileObject file) throws FileSystemException
-    {
-        if (!file.getType().equals(FileType.FILE))
-        {
-            String msg = file.getName().getPath() + " does not denote a file";
-            log.error(msg);
-            throw new FileSystemException(msg);
-        }
-    }
-
-    /**
-     * List the children for the given Type.
-     * 
-     * @param path
-     * @param type
-     * @return
-     * @throws org.apache.jackrabbit.core.fs.FileSystemException
-     */
-    private String[] list(FileObject folder, FileType type)
-            throws org.apache.jackrabbit.core.fs.FileSystemException
-    {
-        try
-        {
-            this.validateFolder(folder);
-            FileObject[] fo = folder.getChildren();
-            Collection c = new ArrayList();
-            for (int i = 0; i < fo.length; i++)
-            {
-                if (type == null)
-                {
-                    c.add(fo[i].getName().getBaseName());
-                } else
-                {
-                    if (fo[i].getType().equals(type))
-                    {
-                        c.add(fo[i].getName().getBaseName());
-                    }
-                }
-            }
-            return (String[]) c.toArray(new String[c.size()]);
-        } catch (FileSystemException e)
-        {
-            throw new org.apache.jackrabbit.core.fs.FileSystemException(e);
-        }
-    }
-
-    /**
-     * Deletes the given File
-     */
-    private void delete(FileObject file)
-            throws org.apache.jackrabbit.core.fs.FileSystemException
-    {
-        try
-        {
-            file.delete(ALL);
-        } catch (FileSystemException e)
-        {
-            throw new org.apache.jackrabbit.core.fs.FileSystemException(e);
-        }
-    }
-
-    public String getPath()
-    {
-        return path;
-    }
-
-    public void setPath(String path)
-    {
-        this.path = path;
-    }
-
-    /**
-     * Makes a file canonical
-     */
-    public static File getCanonicalFile(final File file)
-    {
-        try
-        {
-            return file.getCanonicalFile();
-        } catch (IOException e)
-        {
-            return file.getAbsoluteFile();
-        }
-    }
-
-    public String getConfig()
-    {
-        return config;
-    }
-
-    public void setConfig(String config)
-    {
-        this.config = config;
-    }
-
-    /**
-     * @return Returns the scheme.
-     */
-    public String getPrefix()
-    {
-        return prefix;
-    }
-
-    /**
-     * @param scheme
-     *            The scheme to set.
-     */
-    public void setPrefix(String prefix)
-    {
-        this.prefix = prefix;
-    }
-}
\ No newline at end of file
diff --git a/contrib/vfs/src/java/org/apache/jackrabbit/core/fs/vfs/VFSRAFOutputStream.java b/contrib/vfs/src/java/org/apache/jackrabbit/core/fs/vfs/VFSRAFOutputStream.java
deleted file mode 100644
index ec06b5c..0000000
--- a/contrib/vfs/src/java/org/apache/jackrabbit/core/fs/vfs/VFSRAFOutputStream.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.fs.vfs;
-
-import java.io.IOException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.commons.vfs.RandomAccessContent;
-import org.apache.jackrabbit.core.fs.RandomAccessOutputStream;
-
-/**
- * Wrapper of VFS output stream on a random access file.
- * 
- * @author <a href="mailto:edgarpoce@gmail.com">Edgar Poce </a>
- */
-class VFSRAFOutputStream extends RandomAccessOutputStream
-{
-
-    private Log log = LogFactory.getLog(VFSRAFOutputStream.class);
-
-    /**
-     * The default size of the write buffer in bytes.
-     */
-    static final int DEFAULT_BUFFER_SIZE = 1024;
-
-    /**
-     * The write buffer.
-     */
-    private final byte[] buffer;
-
-    /**
-     * The underlying <code>RandomAccessContent</code>.
-     */
-    protected RandomAccessContent rac;
-
-    /**
-     * The starting position of the buffer in the code.
-     */
-    private long bufferStart;
-
-    /**
-     * The end of valid data in the buffer.
-     */
-    private int bufferEnd;
-
-    /**
-     * Dummy buffer for {@link #write(int)}.
-     */
-    private byte[] one = new byte[1];
-
-    /**
-     * Constructor
-     */
-    public VFSRAFOutputStream(RandomAccessContent rac, int size)
-    {
-        super();
-        this.rac = rac;
-        this.buffer = new byte[size];
-        try
-        {
-            bufferStart = rac.getFilePointer();
-        } catch (IOException e)
-        {
-            log.error("Unable to get file pointer");
-        }
-    }
-
-    /**
-     * Constructor
-     */
-    public VFSRAFOutputStream(RandomAccessContent rac)
-    {
-        this(rac, DEFAULT_BUFFER_SIZE);
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.jackrabbit.core.fs.RandomAccessOutputStream#seek(long)
-     */
-    public void seek(long position) throws IOException
-    {
-        flush();
-        rac.seek(position);
-        bufferStart = position;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see java.io.OutputStream#write(int)
-     */
-    public void write(int b) throws IOException
-    {
-        one[0] = (byte) b;
-        write(one, 0, 1);
-    }
-
-    public void close() throws IOException
-    {
-        flush();
-        rac.close();
-        rac = null;
-    }
-
-    public void flush() throws IOException
-    {
-        rac.write(buffer, 0, bufferEnd);
-        bufferEnd = 0;
-        bufferStart = rac.getFilePointer();
-    }
-
-    public void write(byte b[], int off, int len) throws IOException
-    {
-        if (len > buffer.length - bufferEnd)
-        {
-            flush();
-            rac.write(b, off, len);
-        } else
-        {
-            System.arraycopy(b, off, buffer, bufferEnd, len);
-            bufferEnd += len;
-        }
-    }
-
-    public void write(byte[] b) throws IOException
-    {
-        write(b, 0, b.length);
-    }
-}
\ No newline at end of file
diff --git a/contrib/vfs/src/java/providers.xml b/contrib/vfs/src/java/providers.xml
deleted file mode 100644
index 8b57883..0000000
--- a/contrib/vfs/src/java/providers.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-<providers>
-    <default-provider class-name="org.apache.commons.vfs.provider.url.UrlFileProvider">
-    </default-provider>
-    
-    <provider class-name="org.apache.commons.vfs.provider.local.DefaultLocalFileProvider">
-        <scheme name="file"/>
-    </provider>
-    <provider class-name="org.apache.commons.vfs.provider.zip.ZipFileProvider">
-        <scheme name="zip"/>
-    </provider>
-    <provider class-name="org.apache.commons.vfs.provider.tar.TarFileProvider">
-        <scheme name="tar"/>
-        <if-available class-name="org.apache.commons.compress.tar.TarInputStream"/>
-    </provider>
-
-    <provider class-name="org.apache.commons.vfs.provider.bzip2.Bzip2FileProvider">
-        <scheme name="bz2"/>
-        <if-available class-name="org.apache.commons.compress.bzip2.CBZip2InputStream"/>
-    </provider>
-    <provider class-name="org.apache.commons.vfs.provider.gzip.GzipFileProvider">
-        <scheme name="gz"/>
-    </provider>
-
-    <provider class-name="org.apache.commons.vfs.provider.jar.JarFileProvider">
-        <scheme name="jar"/>
-    </provider>
-    <provider class-name="org.apache.commons.vfs.provider.temp.TemporaryFileProvider">
-        <scheme name="tmp"/>
-    </provider>
-    <provider class-name="org.apache.commons.vfs.provider.ftp.FtpFileProvider">
-        <scheme name="ftp"/>
-        <if-available class-name="org.apache.commons.net.ftp.FTPFile"/>
-    </provider>
-    <provider class-name="org.apache.commons.vfs.provider.smb.SmbFileProvider">
-        <scheme name="smb"/>
-        <if-available class-name="jcifs.smb.SmbFile"/>
-    </provider>
-    <provider class-name="org.apache.commons.vfs.provider.http.HttpFileProvider">
-        <scheme name="http"/>
-        <if-available class-name="org.apache.commons.httpclient.HttpClient"/>
-    </provider>
-    <provider class-name="org.apache.commons.vfs.provider.webdav.WebdavFileProvider">
-        <scheme name="webdav"/>
-        <if-available class-name="org.apache.webdav.lib.WebdavResource"/>
-        <if-available class-name="org.apache.commons.httpclient.HttpClient"/>
-    </provider>
-    <provider class-name="org.apache.commons.vfs.provider.sftp.SftpFileProvider">
-        <scheme name="sftp"/>
-        <if-available class-name="javax.crypto.Cipher"/>
-        <if-available class-name="com.jcraft.jsch.JSch"/>
-    </provider>
-    <provider class-name="org.apache.commons.vfs.provider.res.ResourceFileProvider">
-        <scheme name="res"/>
-    </provider>
-    <!--
-        <provider class-name="org.apache.commons.vfs.provider.tar.TgzFileProvider">
-            <scheme name="tgz"/>
-            <if-available scheme="gz"/>
-            <if-available scheme="tar"/>
-        </provider>
-        <provider class-name="org.apache.commons.vfs.provider.tar.Tbz2FileProvider">
-            <scheme name="tbz2"/>
-            <if-available scheme="bz2"/>
-            <if-available scheme="tar"/>
-        </provider>
-    -->
-    <provider class-name="org.apache.commons.vfs.provider.tar.TarFileProvider">
-        <scheme name="tgz"/>
-        <if-available scheme="gz"/>
-        <if-available scheme="tar"/>
-    </provider>
-    <provider class-name="org.apache.commons.vfs.provider.tar.TarFileProvider">
-        <scheme name="tbz2"/>
-        <if-available scheme="bz2"/>
-        <if-available scheme="tar"/>
-    </provider>
-
-    <extension-map extension="zip" scheme="zip"/>
-    <extension-map extension="tar" scheme="tar"/>
-    <mime-type-map mime-type="application/zip" scheme="zip"/>
-    <mime-type-map mime-type="application/x-tar" scheme="tar"/>
-    <!--
-    <mime-type-map mime-type="application/x-tgz" scheme="tgz"/>
-    -->
-    <extension-map extension="jar" scheme="jar"/>
-    <extension-map extension="bz2" scheme="bz2"/>
-    <extension-map extension="gz" scheme="gz"/>
-    <!--
-    <extension-map extension="tgz" scheme="tgz"/>
-    <extension-map extension="tbz2" scheme="tbz2"/>
-    -->
-    <extension-map extension="tgz" scheme="tar"/>
-    <extension-map extension="tbz2" scheme="tar"/>
-
-    <!--
-    <filter-map class-name="org.apache.commons.vfs.content.bzip2.Bzip2Compress">
-        <extension name="bz2"/>
-        <extension name="tbz2"/>
-        <if-available class-name="org.apache.commons.compress.bzip2.CBZip2InputStream"/>
-    </filter-map>
-    <filter-map class-name="org.apache.commons.vfs.content.gzip.GzipCompress">
-        <extension name="gz"/>
-        <extension name="tgz"/>
-        <mime-type name="application/x-tgz" />
-    </filter-map>
-    -->
-</providers>
\ No newline at end of file
diff --git a/contrib/vfs/src/test/org/apache/jackrabbit/core/fs/vfs/VFSFileSystemTest.java b/contrib/vfs/src/test/org/apache/jackrabbit/core/fs/vfs/VFSFileSystemTest.java
deleted file mode 100644
index 5be1ff0..0000000
--- a/contrib/vfs/src/test/org/apache/jackrabbit/core/fs/vfs/VFSFileSystemTest.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * Copyright 2004-2005 The Apache Software Foundation or its licensors,
- *                     as applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.core.fs.vfs;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Arrays;
-
-import org.apache.jackrabbit.core.fs.RandomAccessOutputStream;
-import org.apache.jackrabbit.test.JUnitTest;
-
-/**
- * <p>
- * FileSystem backed by Commons VFS Tests
- * </p>
- * 
- * <p>
- * In order to run the following VM arguments must be set:
- * <ul>
- * <li>fs.prefix = [provider prefix]</li>
- * <li>fs.path = [root path]</li>
- * <li>fs.config = [providers config file]</li>
- * </ul>
- * 
- * @author <a href="mailto:edgarpoce@gmail.com">Edgar Poce </a>
- */
-public class VFSFileSystemTest extends JUnitTest
-{
-    private static final String PREFIX = "fs.prefix";
-
-    private static final String PATH = "fs.path";
-
-    private static final String CONFIG = "fs.config";
-
-    private static final String TEST_FOLDER = "testFolder1";
-
-    private static final String TEST_FILE = "testFile1.txt";
-
-    private static final String TEST_FOLDER2 = TEST_FOLDER + "/testFolder2";
-
-    private static final String TEST_FILE2 = TEST_FOLDER2 + "/testFile2.txt";
-
-    private static final String TEST_FILE3 = TEST_FOLDER2 + "/testFile3.txt";
-
-    /**
-     * VFS fs
-     */
-    private VFSFileSystem fs;
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see junit.framework.TestCase#setUp()
-     */
-    protected void setUp() throws Exception
-    {
-        super.setUp();
-        fs = new VFSFileSystem();
-        fs.setPrefix(System.getProperty(PREFIX));
-        fs.setPath(System.getProperty(PATH));
-        fs.setConfig(System.getProperty(CONFIG));
-        fs.init();
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see junit.framework.TestCase#tearDown()
-     */
-    protected void tearDown() throws Exception
-    {
-        super.tearDown();
-        fs.close();
-        fs = null;
-    }
-
-    public void testFileSystem() throws Exception
-    {
-        /*
-         * Create folder
-         */
-        // depth = 0
-        fs.createFolder(TEST_FOLDER);
-        assertTrue(fs.exists(TEST_FOLDER));
-        assertTrue(fs.isFolder(TEST_FOLDER));
-        // depth = 1
-        fs.createFolder(TEST_FOLDER2);
-        assertTrue(fs.exists(TEST_FOLDER2));
-        assertTrue(fs.isFolder(TEST_FOLDER2));
-        // Children
-        assertTrue(fs.hasChildren(TEST_FOLDER));
-        assertTrue(fs.list(TEST_FOLDER)[0].equals(getName(TEST_FOLDER2)));
-        assertTrue(fs.listFiles(TEST_FOLDER).length == 0);
-        assertTrue(fs.listFolders(TEST_FOLDER)[0].equals(getName(TEST_FOLDER2)));
-
-        /*
-         * Create file
-         */
-        // depth = 1
-        byte[] write = "hello world".getBytes();
-        byte[] read = new byte[write.length];
-
-        OutputStream out = fs.getOutputStream(TEST_FILE);
-        out.write(write);
-        out.flush();
-        out.close();
-        assertTrue(fs.exists(TEST_FILE));
-        fs.getInputStream(TEST_FILE).read(read);
-        assertTrue(Arrays.equals(write, read));
-        // depth = 2
-        out = fs.getOutputStream(TEST_FILE2);
-        out.write(write);
-        out.flush();
-        out.close();
-        assertTrue(fs.exists(TEST_FILE2));
-        InputStream in = fs.getInputStream(TEST_FILE2);
-        in.read(read);
-        in.close();
-        assertTrue(Arrays.equals(write, read));
-
-        /*
-         * Delete file
-         */
-        fs.deleteFile(TEST_FILE2);
-        assertFalse(fs.exists(TEST_FILE2));
-
-        /*
-         * Delete folder
-         */
-        fs.deleteFolder(TEST_FOLDER2);
-        assertFalse(fs.exists(TEST_FOLDER2));
-
-        /*
-         * Copy file
-         */
-        fs.copy(TEST_FILE, TEST_FILE2);
-        assertTrue(fs.exists(TEST_FILE2));
-        assertTrue(fs.isFile(TEST_FILE2));
-
-        /*
-         * Move file
-         */
-        fs.move(TEST_FILE2, TEST_FILE3);
-        assertFalse(fs.exists(TEST_FILE2));
-        assertTrue(fs.exists(TEST_FILE3));
-        assertTrue(fs.isFile(TEST_FILE3));
-
-        /* Radom access content */
-        RandomAccessOutputStream rout = fs
-                .getRandomAccessOutputStream(TEST_FILE);
-        rout.seek(100);
-        rout.write(10);
-        rout.flush();
-        rout.close();
-
-        in = fs.getInputStream(TEST_FILE);
-        in.skip(100);
-        assertTrue(in.read() == 10);
-        in.close();
-
-    }
-
-    /**
-     * Get the name
-     * 
-     * @param path
-     * @return
-     */
-    private String getName(String path)
-    {
-        return path.substring(path.lastIndexOf("/") + 1, path.length());
-    }
-
-}
\ No newline at end of file