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/1.0@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 1c10dad..0000000
--- a/contrib/bdb-persistence/HEADER.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 4ec4816..0000000
--- a/contrib/bdb-persistence/README.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-// bdb-persistence
-// jcr (jsr170) support for the spring framework 
-
-// berkeleydb je support for jackrabbit persistence
-
-~~ About
-
-A berkeleydb persistence manager for the Apache Jackrabbit project
-    http://jackrabbit.apache.org/
-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
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 c78e5d9..0000000
--- a/contrib/bdb-persistence/applications/test/repository/nodetypes/custom_nodetypes.xml
+++ /dev/null
@@ -1,247 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 df9e380..0000000
--- a/contrib/bdb-persistence/checkstyle.xml
+++ /dev/null
@@ -1,170 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 f0f7d4d..0000000
--- a/contrib/bdb-persistence/maven.xml
+++ /dev/null
@@ -1,76 +0,0 @@
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 7bcd2d0..0000000
--- a/contrib/bdb-persistence/project.properties
+++ /dev/null
@@ -1,93 +0,0 @@
-#  Licensed to the Apache Software Foundation (ASF) under one or more
-#  contributor license agreements.  The ASF licenses this file to You
-#  under the Apache License, Version 2.0 (the "License"); you may not
-#  use this file except in compliance with the License.
-#  You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-#  distributed under the License is distributed on an "AS IS" BASIS,
-#  WITHOUT 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://jackrabbit.apache.org/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://jackrabbit.apache.org/
-maven.changelog.range=60
-maven.changelog.factory=org.apache.maven.svnlib.SvnChangeLogFactory
-
-######################################################################
-# Site Deploy (into ../jackrabbit-site for checkout on jackrabbit.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 3ec6bac..0000000
--- a/contrib/bdb-persistence/project.xml
+++ /dev/null
@@ -1,184 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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://www.apache.org/</url>
-		<logo>http://www.apache.org/images/asf_logo_wide.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/jackrabbit/trunk/contrib/bdb-persistence</connection>
-		<developerConnection>scm:svn:https://svn.apache.org/repos/asf/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-core</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 f228303..0000000
--- a/contrib/bdb-persistence/src/java/org/apache/jackrabbit/core/state/bdb/BerkeleyDBPersistenceManager.java
+++ /dev/null
@@ -1,341 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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(id.toString());
-            }
-            return (NodeState) tupleBinding.entryToObject(value);
-        } catch (Exception e) {
-            log.error(e);
-            throw new ItemStateException(e.getMessage(), 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(id.toString());
-            }
-            return (PropertyState) tupleBinding.entryToObject(value);
-        } catch (Exception e) {
-            log.error(e);
-            throw new ItemStateException(e.getMessage(), 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(id.toString());
-            }
-            return (NodeReferences) tupleBinding.entryToObject(value);
-        } catch (NoSuchItemStateException e) {
-            throw e;
-        } catch (Exception e) {
-            log.error(e);
-            throw new ItemStateException(e.getMessage(), 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.getMessage(), 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.getMessage(), 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.getMessage(), 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 {
-                if (transaction != null) {
-                    transaction.abort();
-                }
-            } catch (Exception fe) {
-                log.fatal(fe);
-            }
-            throw new ItemStateException(e.getMessage(), 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.getMessage(), 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.getMessage(), 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.getMessage(), 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.getMessage(), 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.getMessage(), 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.getMessage(), 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 67536b7..0000000
--- a/contrib/bdb-persistence/src/java/org/apache/jackrabbit/core/state/bdb/NodeReferencesTupleBinding.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 74c3a36..0000000
--- a/contrib/bdb-persistence/src/java/org/apache/jackrabbit/core/state/bdb/NodeStateTupleBinding.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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, 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 66fb860..0000000
--- a/contrib/bdb-persistence/src/java/org/apache/jackrabbit/core/state/bdb/PropertyStateTupleBinding.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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, 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 1c10dad..0000000
--- a/contrib/classloader/HEADER.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 820b610..0000000
--- a/contrib/classloader/project.properties
+++ /dev/null
@@ -1,106 +0,0 @@
-#  Licensed to the Apache Software Foundation (ASF) under one or more
-#  contributor license agreements.  The ASF licenses this file to You
-#  under the Apache License, Version 2.0 (the "License"); you may not
-#  use this file except in compliance with the License.
-#  You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-#  distributed under the License is distributed on an "AS IS" BASIS,
-#  WITHOUT 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://jackrabbit.apache.org/
-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 jackrabbit.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 2541deb..0000000
--- a/contrib/classloader/project.xml
+++ /dev/null
@@ -1,128 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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://www.apache.org/</url>
-        <logo>http://www.apache.org/images/asf_logo_wide.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-core</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>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
-            <version>1.0</version>
-            <type>jar</type>
-        </dependency>
-        <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 aab6e14..0000000
--- a/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/ArchiveClassPathEntry.java
+++ /dev/null
@@ -1,575 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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
- */
-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
-     */
-    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();
-        }
-    }
-}
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 4761458..0000000
--- a/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/ClassLoaderResource.java
+++ /dev/null
@@ -1,399 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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
- */
-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();
-    }
-}
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 114123b..0000000
--- a/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/ClassPathEntry.java
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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
- */
-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 4e5e743..0000000
--- a/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/DirectoryClassPathEntry.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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
- */
-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;
-    }
-}
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 ed3e972..0000000
--- a/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/DynamicPatternPath.java
+++ /dev/null
@@ -1,274 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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
- */
-/* 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 a802351..0000000
--- a/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/DynamicRepositoryClassLoader.java
+++ /dev/null
@@ -1,643 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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
- */
-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;
-    }
-}
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 b9a954d..0000000
--- a/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/ExpandingArchiveClassPathEntry.java
+++ /dev/null
@@ -1,456 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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
- *
- * @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;
-    }
-}
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 58815b2..0000000
--- a/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/NodeTypeSupport.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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
- */
-/* 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 4cce3a4..0000000
--- a/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/PatternPath.java
+++ /dev/null
@@ -1,342 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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
- */
-/* 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 902d3cf..0000000
--- a/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/RepositoryClassLoader.java
+++ /dev/null
@@ -1,863 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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
- */
-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());
-    }
-}
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 5b89196..0000000
--- a/contrib/classloader/src/main/java/org/apache/jackrabbit/classloader/Util.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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
- */
-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 ab9f9e1..0000000
--- a/contrib/classloader/src/main/java/org/apache/jackrabbit/net/FileParts.java
+++ /dev/null
@@ -1,311 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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
- */
-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 + "'");
-    }
-}
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 418611a..0000000
--- a/contrib/classloader/src/main/java/org/apache/jackrabbit/net/JCRJarURLConnection.java
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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
- */
-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;
-    }
-}
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 55c801a..0000000
--- a/contrib/classloader/src/main/java/org/apache/jackrabbit/net/JCRJarURLHandler.java
+++ /dev/null
@@ -1,297 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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
- *
- * @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;
-    }
-}
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 d9d7149..0000000
--- a/contrib/classloader/src/main/java/org/apache/jackrabbit/net/JCRURLConnection.java
+++ /dev/null
@@ -1,773 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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
- */
-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);
-    }
-}
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 97d6613..0000000
--- a/contrib/classloader/src/main/java/org/apache/jackrabbit/net/JCRURLHandler.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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
- *
- * @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);
-    }
-}
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 a285489..0000000
--- a/contrib/classloader/src/main/java/org/apache/jackrabbit/net/URLFactory.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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
- */
-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 af403d9..0000000
--- a/contrib/classloader/src/test/java/org/apache/jackrabbit/classloader/ClassLoaderTestBase.java
+++ /dev/null
@@ -1,478 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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
- */
-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 b0b874a..0000000
--- a/contrib/classloader/src/test/java/org/apache/jackrabbit/classloader/DynamicRepositoryClassLoaderTest.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 827bc60..0000000
--- a/contrib/classloader/src/test/java/org/apache/jackrabbit/classloader/ExpandingArchiveClassPathEntryTest.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 b1c3b05..0000000
--- a/contrib/classloader/src/test/java/org/apache/jackrabbit/classloader/PatternPathTest.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 8719380..0000000
--- a/contrib/classloader/src/test/java/org/apache/jackrabbit/classloader/TestAll.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 77d2643..0000000
--- a/contrib/examples/maven.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 d70d5b7..0000000
--- a/contrib/examples/project.xml
+++ /dev/null
@@ -1,113 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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://www.apache.org/</url>
-    <logo>http://www.apache.org/images/asf_logo_wide.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/jackrabbit/trunk/contrib/examples</connection>
-    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/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-core</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>org.slf4j</groupId>
-      <artifactId>slf4j-log4j12</artifactId>
-      <version>1.0</version>
-      <url>http://www.slf4j.org/download.html</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.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 3c0f132..0000000
--- a/contrib/examples/src/java/org/apache/jackrabbit/examples/FSImport.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 9e63286..0000000
--- a/contrib/examples/src/java/org/apache/jackrabbit/examples/FirstSteps.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 201de9e..0000000
--- a/contrib/examples/src/java/org/apache/jackrabbit/examples/Main.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 1c10dad..0000000
--- a/contrib/extension-framework/HEADER.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 27b0a7e..0000000
--- a/contrib/extension-framework/project.properties
+++ /dev/null
@@ -1,107 +0,0 @@
-#  Licensed to the Apache Software Foundation (ASF) under one or more
-#  contributor license agreements.  The ASF licenses this file to You
-#  under the Apache License, Version 2.0 (the "License"); you may not
-#  use this file except in compliance with the License.
-#  You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-#  distributed under the License is distributed on an "AS IS" BASIS,
-#  WITHOUT 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://jackrabbit.apache.org/
-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 jackrabbit.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 f93e25a..0000000
--- a/contrib/extension-framework/project.xml
+++ /dev/null
@@ -1,146 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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://www.apache.org/</url>
-        <logo>http://www.apache.org/images/asf_logo_wide.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-core</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>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
-            <version>1.0</version>
-            <type>jar</type>
-        </dependency>
-        <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 b608200..0000000
--- a/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/ExtensionDescriptor.java
+++ /dev/null
@@ -1,716 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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
- *
- * @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 3b2ff05..0000000
--- a/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/ExtensionException.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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
- */
-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 b585374..0000000
--- a/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/ExtensionIterator.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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
- */
-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;
-    }
-}
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 f82dd72..0000000
--- a/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/ExtensionManager.java
+++ /dev/null
@@ -1,313 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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
- */
-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 cc18172..0000000
--- a/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/ExtensionType.java
+++ /dev/null
@@ -1,392 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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
- *
- * @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 466e711..0000000
--- a/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/NodeTypeSupport.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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
- */
-/* 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 d342871..0000000
--- a/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/configuration/ConfigurationIODelegate.java
+++ /dev/null
@@ -1,293 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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
- */
-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 c3bb20b..0000000
--- a/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/configuration/ItemConfiguration.java
+++ /dev/null
@@ -1,817 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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
- */
-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
-     */
-    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
-     */
-    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));
-        }
-    }
-}
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 37df8e7..0000000
--- a/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/configuration/PropertiesNodeConfiguration.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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
- */
-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 7dfd220..0000000
--- a/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/configuration/RepositoryConfiguration.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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
- */
-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 17ea5c3..0000000
--- a/contrib/extension-framework/src/main/java/org/apache/jackrabbit/extension/configuration/XMLNodeConfiguration.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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
- */
-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);
-    }
-}
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 fd9e4cb..0000000
--- a/contrib/extension-framework/src/test/java/org/apache/jackrabbit/extension/ExtensionFindTest.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 155b355..0000000
--- a/contrib/extension-framework/src/test/java/org/apache/jackrabbit/extension/ExtensionFrameworkTestBase.java
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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
- */
-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 e2406eb..0000000
--- a/contrib/extension-framework/src/test/java/org/apache/jackrabbit/extension/ExtensionNodeTypeTest.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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
- */
-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 b50b0b3..0000000
--- a/contrib/extension-framework/src/test/java/org/apache/jackrabbit/extension/TestAll.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 47e9169..0000000
--- a/contrib/extension-framework/src/test/java/org/apache/jackrabbit/extension/configuration/ItemConfigurationTest.java
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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/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 1c10dad..0000000
--- a/contrib/jcr-commands/HEADER.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 df9e380..0000000
--- a/contrib/jcr-commands/checkstyle.xml
+++ /dev/null
@@ -1,170 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 1c10dad..0000000
--- a/contrib/jcr-commands/jmeter-chain/HEADER.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 df9e380..0000000
--- a/contrib/jcr-commands/jmeter-chain/checkstyle.xml
+++ /dev/null
@@ -1,170 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 7b31aa9..0000000
--- a/contrib/jcr-commands/jmeter-chain/project.properties
+++ /dev/null
@@ -1,100 +0,0 @@
-#  Licensed to the Apache Software Foundation (ASF) under one or more
-#  contributor license agreements.  The ASF licenses this file to You
-#  under the Apache License, Version 2.0 (the "License"); you may not
-#  use this file except in compliance with the License.
-#  You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-#  distributed under the License is distributed on an "AS IS" BASIS,
-#  WITHOUT 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://jackrabbit.apache.org/
-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 jackrabbit.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 059ea20..0000000
--- a/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/functions/Jexl.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS 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 383caa9..0000000
--- a/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/protocol/java/config/gui/ChainConfigGui.java
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS 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 8641a26..0000000
--- a/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/protocol/java/control/gui/ChainTestSamplerGui.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS 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 8b366a8..0000000
--- a/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/protocol/java/sampler/ChainSampler.java
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS 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 4334850..0000000
--- a/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/protocol/java/sampler/JMeterContextAdapter.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS 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 225fe81..0000000
--- a/contrib/jcr-commands/jmeter-chain/src/java/org/apache/jmeter/protocol/java/test/SleepChainTest.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS 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 22f1498..0000000
--- a/contrib/jcr-commands/maven.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 3c57445..0000000
--- a/contrib/jcr-commands/project.properties
+++ /dev/null
@@ -1,105 +0,0 @@
-#  Licensed to the Apache Software Foundation (ASF) under one or more
-#  contributor license agreements.  The ASF licenses this file to You
-#  under the Apache License, Version 2.0 (the "License"); you may not
-#  use this file except in compliance with the License.
-#  You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-#  distributed under the License is distributed on an "AS IS" BASIS,
-#  WITHOUT 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://jackrabbit.apache.org/
-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 jackrabbit.apache.org)
-######################################################################
-maven.site.deploy.method=fs
-
-######################################################################
-# Javaapp plugin
-######################################################################
-maven.javaapp.mainclass=org.apache.jackrabbit.command.cli.JcrClient
diff --git a/contrib/jcr-commands/project.xml b/contrib/jcr-commands/project.xml
deleted file mode 100644
index d46f84a..0000000
--- a/contrib/jcr-commands/project.xml
+++ /dev/null
@@ -1,203 +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>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
-            <version>1.0</version>
-            <url>http://www.slf4j.org/download.html</url>
-        </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-core</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>jackrabbit-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 188cd10..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/CommandException.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 18b269f..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/CommandHelper.java
+++ /dev/null
@@ -1,360 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 40f477b..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/AbstractParameter.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 ffdc4bc..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/Argument.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 0f03658..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/CommandLine.java
+++ /dev/null
@@ -1,326 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 c64e89a..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/CommandLineFactory.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 3b69e4d..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/ConfigurationException.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 700dfc3..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/Flag.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 c729636..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/JcrClient.java
+++ /dev/null
@@ -1,313 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 0e6556b..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/JcrParser.java
+++ /dev/null
@@ -1,293 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 411a8bb..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/JcrParserException.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 23d13a7..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/Option.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 55fcc54..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/SourceCommand.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 ebee126..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/cli/digester-rules.dtd
+++ /dev/null
@@ -1,209 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-        http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 a0f77c9..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/collect/AbstractCollect.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 bd4ebe3..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/collect/CollectItems.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 c7081e6..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/collect/CollectNodes.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 dc8d526..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/collect/CollectProperties.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 9cf12c4..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/AbstractSetProperty.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 f3d1716..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/AddNode.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 43ce38a..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/ClearWorkspace.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 64b6b1b..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/Clone.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 ac722a8..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/Copy.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 b377d3f..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/CurrentNode.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 7f40aeb..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/Login.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 5f3ebfd..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/Logout.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 749bc82..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/Move.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 633f918..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/OrderBefore.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 76afa27..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/ReadValue.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 fcf08c7..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/Refresh.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 f35bfc4..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/RemoveItem.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 fea1d35..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/RemoveItems.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 ecde61e..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/Rename.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 068ea8d..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/Save.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 819a969..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/SetMultivalueProperty.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 2ae4a56..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/core/SetProperty.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 363299c..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/ext/ConnectToRmiServer.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 3284f07..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/ext/CreateWorkspace.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 d1717d8..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/ext/RegisterNodeType.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 07d21cf..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/ext/StartJackrabbit.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 0dec0eb..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/ext/StartJackrabbitSingleton.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 2b619ab..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/ext/StopJackrabbit.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 6af8005..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/fs/ExportFileSystem.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 f53152e..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/fs/ExportPropertyToFile.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 44ec71e..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/fs/ImportFileSystem.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 7c3af3a..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/fs/SetPropertyFromFile.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 24298dd..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/AbstractLs.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 d2979f6..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/AbstractLsItems.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 c738e5d..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/AbstractLsNodes.java
+++ /dev/null
@@ -1,782 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 e2a7a77..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/AbstractLsProperties.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 5773ec1..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/Cat.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 7d1fdfb..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/Describe.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 b50f69a..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/Dump.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 b18bee9..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/Help.java
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 10e7f6b..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/JcrInfoCommandException.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 b14c417..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/LsCollectedItems.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 a92ea03..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/LsCollectedNodes.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 ebd012d..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/LsCollectedProperties.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 c253a0e..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/LsItems.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 604f80f..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/LsNamespaces.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 30e33fa..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/LsNodes.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 4a18ab1..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/LsProperties.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 9d5e9e0..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/LsReferences.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 6969715..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/LsVersions.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 c2359b7..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/info/PrintHelper.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 5f5718b..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/lock/AddLockToken.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 1e22fcf..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/lock/Lock.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 e9daed0..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/lock/RefreshLock.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 033e10b..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/lock/RemoveLockToken.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 59c6481..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/lock/Unlock.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 b0b8d70..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/mixin/AddMixin.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 90396c0..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/mixin/RemoveMixin.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 9da1ac8..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/namespace/RegisterNamespace.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 f146c33..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/namespace/UnregisterNamespace.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 7dea2b5..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/query/AbstractQuery.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 b6fc0e1..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/query/SQLQuery.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 9728feb..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/query/XPathQuery.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 6824e8d..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/version/AddVersionLabel.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 0f40c1f..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/version/Checkin.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 55f3402..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/version/Checkout.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 84c6248..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/version/Merge.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 5b1c42c..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/version/RemoveVersion.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 c78a800..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/version/RemoveVersionByLabel.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 d8626ea..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/version/RemoveVersionLabel.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 a40322b..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/version/Restore.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 adaeec2..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/version/RestoreByLabel.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 3012c90..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/xml/AbstractExportViewToFile.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 a328b3e..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/xml/ExportDocViewToFile.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 8f2dc9f..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/xml/ExportSysViewToFile.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 03f2922..0000000
--- a/contrib/jcr-commands/src/java/org/apache/jackrabbit/command/xml/ImportXmlFromFile.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 1d8f2ec..0000000
--- a/contrib/jcr-commands/src/test/org/apache/jackrabbit/command/cli/CliTest.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 459440c..0000000
--- a/contrib/jcr-commands/src/test/org/apache/jackrabbit/command/cli/CommandsTest.java
+++ /dev/null
@@ -1,422 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 9123563..0000000
--- a/contrib/jcr-commands/src/test/org/apache/jackrabbit/command/cli/I18nTest.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 55e48b3..0000000
--- a/contrib/jcr-commands/src/test/org/apache/jackrabbit/command/cli/JcrRmiServer.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 77727d8..0000000
--- a/contrib/jcr-commands/src/test/org/apache/jackrabbit/command/cli/TestAll.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 b402d51..0000000
--- a/contrib/jcr-commands/xdocs/devguide.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 79b8803..0000000
--- a/contrib/jcr-commands/xdocs/index.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 878e29e..0000000
--- a/contrib/jcr-commands/xdocs/navigation.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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="Apache Jackrabbit"
-                href="http://jackrabbit.apache.org/"/>
-        </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>
diff --git a/contrib/jcr-commands/xdocs/userguide.xml b/contrib/jcr-commands/xdocs/userguide.xml
deleted file mode 100644
index f2059ee..0000000
--- a/contrib/jcr-commands/xdocs/userguide.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 0f8a822..0000000
--- a/contrib/jcr-ext/project.xml
+++ /dev/null
@@ -1,95 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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/jackrabbit/trunk/contrib/jcr-ext</connection>
-    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/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-jcr-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 f2f4bb7..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/BaseItem.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 48c5fd7..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/BaseNamespaceRegistry.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 35892a1..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/BaseNode.java
+++ /dev/null
@@ -1,700 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 3f06a1d..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/BaseProperty.java
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 06eef4d..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/BaseRepository.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 f4c4519..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/BaseSession.java
+++ /dev/null
@@ -1,611 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 262dbdb..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/BaseWorkspace.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 9615a94..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/nodetype/BaseItemDefinition.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 1dc3d97..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/nodetype/BaseNodeDefinition.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 beda41a..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/nodetype/BaseNodeType.java
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 78a56d9..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/nodetype/BaseNodeTypeManager.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 133361b..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/base/nodetype/BasePropertyDefinition.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 990456a..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/AbstractDecorator.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 c11d548..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/DecoratingNodeIterator.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 3081ec6..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/DecoratingPropertyIterator.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 9757abb..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/DecoratingRangeIterator.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 6497b92..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/DecoratingVersionIterator.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 3f942b5..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/DecoratorFactory.java
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 62f1158..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/DefaultDecoratorFactory.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 6b5d25f..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/ItemDecorator.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 156ab57..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/ItemVisitorDecorator.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 ff828e7..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/LockDecorator.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 5c65a77..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/NodeDecorator.java
+++ /dev/null
@@ -1,581 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 5940b92..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/PropertyDecorator.java
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 0e30f82..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/QueryDecorator.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 5b24339..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/QueryManagerDecorator.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 8ad5d42..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/QueryResultDecorator.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 b369ec8..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/RepositoryDecorator.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 89c9c98..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/SessionDecorator.java
+++ /dev/null
@@ -1,334 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 6d9591b..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/TrussDecoratorFactory.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 db419e2..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/ValueFactoryDecorator.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 3e885dc..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/VersionDecorator.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 00b8ab4..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/VersionHistoryDecorator.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 01fd9c5..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/decorator/WorkspaceDecorator.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 41e94c8..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/iterator/ArrayIterator.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 5e6e3e7..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/iterator/ArrayNodeIterator.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 0f76da5..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/iterator/ArrayNodeTypeIterator.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 e69db7e..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/iterator/ArrayPropertyIterator.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 f745e77..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/lite/LiteNamespaceRegistry.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 f80b099..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/lite/LiteNode.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 2b37563..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/lite/LiteRepository.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 406b22a..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/lite/LiteSession.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 9f01bd4..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/lite/LiteWorkspace.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 0f6d2fc..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/lite/nodetype/LiteNodeTypeManager.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 61ced89..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/lite/nodetype/LitePropertyDefinition.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 8d27a26..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/session/SessionHelper.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 81fa73f..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/session/SessionNamespaceRegistry.java
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 35fe85a..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/session/nodetype/SessionItemDefinition.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 6a12788..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/session/nodetype/SessionNodeDefinition.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 333c180..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/session/nodetype/SessionNodeType.java
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 87cf58a..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/session/nodetype/SessionNodeTypeManager.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 9b3e461..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/session/nodetype/SessionPropertyDefinition.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 7ac99d6..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/state/nodetype/ItemDefinitionState.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 276694d..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/state/nodetype/NodeDefinitionState.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 38385d1..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/state/nodetype/NodeTypeManagerState.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 894af4d..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/state/nodetype/NodeTypeState.java
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 7fe3a3b..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/state/nodetype/PropertyDefinitionState.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 3518124..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/state/nodetype/StateComparator.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 82729a3..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/DocumentViewExportVisitor.java
+++ /dev/null
@@ -1,529 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 5ec861b..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/DocumentViewImportContentHandler.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 27510bc..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/SystemViewExportVisitor.java
+++ /dev/null
@@ -1,428 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 353abf0..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/SystemViewImportContentHandler.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 454511a..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/nodetype/NamespaceExtractor.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 fed2522..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/nodetype/NodeTypeXML.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 4431f38..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/nodetype/NodeTypeXMLReader.java
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 5f81c04..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/nodetype/NodeTypeXMLWriter.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 ac754b8..0000000
--- a/contrib/jcr-ext/src/java/org/apache/jackrabbit/xml/nodetype/SAXNamespaceResolver.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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/jcrtaglib/HEADER.txt b/contrib/jcrtaglib/HEADER.txt
deleted file mode 100644
index 1c10dad..0000000
--- a/contrib/jcrtaglib/HEADER.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 df9e380..0000000
--- a/contrib/jcrtaglib/checkstyle.xml
+++ /dev/null
@@ -1,170 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 74a1aaf..0000000
--- a/contrib/jcrtaglib/maven.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 bd9b6fb..0000000
--- a/contrib/jcrtaglib/project.properties
+++ /dev/null
@@ -1,82 +0,0 @@
-#  Licensed to the Apache Software Foundation (ASF) under one or more
-#  contributor license agreements.  The ASF licenses this file to You
-#  under the Apache License, Version 2.0 (the "License"); you may not
-#  use this file except in compliance with the License.
-#  You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-#  distributed under the License is distributed on an "AS IS" BASIS,
-#  WITHOUT 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://jackrabbit.apache.org/
-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 jackrabbit.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 83f3cb9..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/CdTag.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 b4599a2..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/CountTag.java
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 77e4db1..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/IfPresentTag.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 e9eaa0e..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/NodesTag.java
+++ /dev/null
@@ -1,368 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 3dbc6bc..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/OutTag.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 b17a117..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/PropertiesTag.java
+++ /dev/null
@@ -1,274 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 9c7e9fb..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/QueryTag.java
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 c350204..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/SessionTag.java
+++ /dev/null
@@ -1,297 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 8b51ab3..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/SetTag.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 dafcc0e..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/SizeTag.java
+++ /dev/null
@@ -1,380 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 de8b5dd..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/VersionsTag.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 8e0eacd..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/bean/BeanFactory.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 d855429..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/bean/SimpleBeanFactory.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 f26e16b..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/bean/SpringBeanFactory.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 2aad02c..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/comparator/ItemComparator.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 e254c5c..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/comparator/JEXLItemComparator.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 f947108..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/filter/ItemFilter.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 0913d04..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/filter/JEXLItemFilter.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 68dacf6..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/size/AbstractSizeCalculator.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 0568b74..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/size/SimpleSizeCalculator.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 d4183ac..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/size/SizeCalculator.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 d597934..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/template/SimpleTemplateEngine.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 52143f6..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/template/TemplateEngine.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 7ea2089..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/AbstractTraverser.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 6611865..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/AncestorsTraverser.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 96edfdd..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/DepthExceededException.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 36c5013..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/ExpandedNodeTraverser.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 4bd7924..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/ExpandedNodesTraverser.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 b4d0aae..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/LevelByLevelTraverser.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 e150136..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/PostorderTraverser.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 336a1c2..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/PreorderTraverser.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 bb952c1..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/traverser/Traverser.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 b9dbb2f..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/utils/JCRTagConstants.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 30cf4d4..0000000
--- a/contrib/jcrtaglib/src/java/org/apache/jackrabbit/taglib/utils/JCRTagUtils.java
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 db39f66..0000000
--- a/contrib/jcrtaglib/src/test/org/apache/jackrabbit/taglib/test/BeanFactoryTest.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 91dcc0f..0000000
--- a/contrib/jcrtaglib/xdocs/configuration.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-        
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 17f9028..0000000
--- a/contrib/jcrtaglib/xdocs/customization.xml
+++ /dev/null
@@ -1,141 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-        
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 8d40c71..0000000
--- a/contrib/jcrtaglib/xdocs/examples.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-        
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 dd1b3c2..0000000
--- a/contrib/jcrtaglib/xdocs/index.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-        
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 c75b31d..0000000
--- a/contrib/jcrtaglib/xdocs/navigation.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-        
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 90b47a3..0000000
--- a/contrib/jcrtaglib/xdocs/tag-reference.xml
+++ /dev/null
@@ -1,958 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-        
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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/maven.xml b/contrib/maven.xml
deleted file mode 100644
index 776fe45..0000000
--- a/contrib/maven.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<project default="contrib:build" 
-	xmlns:j="jelly:core"
-	xmlns:m="jelly:maven"
-	xmlns:ant="jelly:ant">
-
-	<goal name="contrib:build">
-		<j:set var="goal" value="jar"/>
-		<attainGoal name="multiproject:goal" />
-   	</goal>
-</project>
diff --git a/contrib/orm-persistence/HEADER.txt b/contrib/orm-persistence/HEADER.txt
deleted file mode 100644
index 1c10dad..0000000
--- a/contrib/orm-persistence/HEADER.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 d04d6e7..0000000
--- a/contrib/orm-persistence/README.txt
+++ /dev/null
@@ -1,113 +0,0 @@
-ORM persistence managers for Jackrabbit README
-----------------------------------------------
-
-License (see also LICENSE.txt)
-------------------------------
-
-Collective work: Copyright 2006 The Apache Software Foundation.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT 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 !   
diff --git a/contrib/orm-persistence/applications/test/OJB.properties b/contrib/orm-persistence/applications/test/OJB.properties
deleted file mode 100644
index 5e65948..0000000
--- a/contrib/orm-persistence/applications/test/OJB.properties
+++ /dev/null
@@ -1,450 +0,0 @@
-#
-#  Licensed to the Apache Software Foundation (ASF) under one or more
-#  contributor license agreements.  The ASF licenses this file to You
-#  under the Apache License, Version 2.0 (the "License"); you may not
-#  use this file except in compliance with the License.
-#  You may obtain a copy of the License at
-# 
-#       http://www.apache.org/licenses/LICENSE-2.0
-# 
-#  Unless required by applicable law or agreed to in writing, software
-#  distributed under the License is distributed on an "AS IS" BASIS,
-#  WITHOUT 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
-# Author: Thomas Mahler and many others
-#
-#----------------------------------------------------------------------------------------
-# 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 989d95a..0000000
--- a/contrib/orm-persistence/applications/test/ehcache.xml
+++ /dev/null
@@ -1,120 +0,0 @@
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 0ce9124..0000000
--- a/contrib/orm-persistence/applications/test/hibernate.cfg.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version='1.0' encoding='utf-8'?>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 dd6b2df..0000000
--- a/contrib/orm-persistence/applications/test/hibernate.properties
+++ /dev/null
@@ -1,417 +0,0 @@
-#  Licensed to the Apache Software Foundation (ASF) under one or more
-#  contributor license agreements.  The ASF licenses this file to You
-#  under the Apache License, Version 2.0 (the "License"); you may not
-#  use this file except in compliance with the License.
-#  You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-#  distributed under the License is distributed on an "AS IS" BASIS,
-#  WITHOUT 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 a680768..0000000
--- a/contrib/orm-persistence/applications/test/hibernate/jackrabbit.hbm.xml
+++ /dev/null
@@ -1,147 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 9a8ed6e..0000000
--- a/contrib/orm-persistence/applications/test/import.xml
+++ /dev/null
@@ -1,731 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?> 
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 72bed85..0000000
--- a/contrib/orm-persistence/applications/test/largeimport.xml
+++ /dev/null
@@ -1,8741 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 e0595f6..0000000
--- a/contrib/orm-persistence/applications/test/log4j.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 04e97c9..0000000
--- a/contrib/orm-persistence/applications/test/ojb/repository.dtd
+++ /dev/null
@@ -1,948 +0,0 @@
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-        
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 c02f50c..0000000
--- a/contrib/orm-persistence/applications/test/ojb/repository.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-        http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 f44543e..0000000
--- a/contrib/orm-persistence/applications/test/ojb/repository_database.xml
+++ /dev/null
@@ -1,202 +0,0 @@
-<!-- @version $Id: repository_database.xml,v 1.22 2004/06/24 10:02:46 arminw Exp $ -->
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-        http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 ea3dbdc..0000000
--- a/contrib/orm-persistence/applications/test/ojb/repository_internal.xml
+++ /dev/null
@@ -1,361 +0,0 @@
-<!-- OJB INTERNAL MAPPINGS START HERE, DO NOT EDIT -->
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-        http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 eb9d2cb..0000000
--- a/contrib/orm-persistence/applications/test/ojb/repository_user.xml
+++ /dev/null
@@ -1,290 +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 -->
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-  
-        http://www.apache.org/licenses/LICENSE-2.0
-  
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 c78e5d9..0000000
--- a/contrib/orm-persistence/applications/test/repository/nodetypes/custom_nodetypes.xml
+++ /dev/null
@@ -1,247 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 3240b8b..0000000
--- a/contrib/orm-persistence/checkstyle.xml
+++ /dev/null
@@ -1,167 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 43f9d72..0000000
--- a/contrib/orm-persistence/maven.xml
+++ /dev/null
@@ -1,99 +0,0 @@
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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}/../../jackrabbit/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}/../../jackrabbit/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 79d6c2f..0000000
--- a/contrib/orm-persistence/project.properties
+++ /dev/null
@@ -1,95 +0,0 @@
-#  Licensed to the Apache Software Foundation (ASF) under one or more
-#  contributor license agreements.  The ASF licenses this file to You
-#  under the Apache License, Version 2.0 (the "License"); you may not
-#  use this file except in compliance with the License.
-#  You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-#  distributed under the License is distributed on an "AS IS" BASIS,
-#  WITHOUT 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://jackrabbit.apache.org/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://jackrabbit.apache.org/
-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 jackrabbit.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 cf374c7..0000000
--- a/contrib/orm-persistence/project.xml
+++ /dev/null
@@ -1,247 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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://www.apache.org/</url>
-    <logo>http://www.apache.org/images/asf_logo_wide.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-core</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://jcp.org/en/jsr/detail?id=170</url>
-    </dependency>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-log4j12</artifactId>
-      <version>1.0</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.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</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</version>
-    </dependency>
-    <dependency>
-      <groupId>cqfs</groupId>
-      <artifactId>cqfs</artifactId>
-      <version>3.5.6</version>
-    </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 bcdf5e4..0000000
--- a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ORMBlobValue.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 3352e4a..0000000
--- a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ORMChildNodeEntry.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 org.apache.jackrabbit.core.state.NodeState.ChildNodeEntry;
-
-import java.io.Serializable;
-
-/**
- * <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.getId().getUUID().toString();
-        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 2e8e5b3..0000000
--- a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ORMNodeMixinType.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 dd99b75..0000000
--- a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ORMNodeParent.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 83ad44c..0000000
--- a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ORMNodeReference.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 dc6105d..0000000
--- a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ORMNodeState.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 org.apache.jackrabbit.core.ItemId;
-import org.apache.jackrabbit.core.NodeId;
-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.jackrabbit.name.QName;
-import org.apache.log4j.Logger;
-
-import java.io.Serializable;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-/**
- * <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.getNodeId().getUUID().toString();
-        parentUUID = state.getParentId().getUUID().toString();
-        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.getId());
-            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.setParentId(NodeId.valueOf(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()), NodeId.valueOf(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 ebc06f0..0000000
--- a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ORMPropertyEntry.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 d471292..0000000
--- a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ORMPropertyState.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 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.jackrabbit.core.value.InternalValue;
-import org.apache.ojb.broker.accesslayer.conversions.ConversionException;
-
-import javax.jcr.PropertyType;
-import java.io.Serializable;
-
-/**
- * <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.getParentId().getUUID().toString();
-        } 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.getParentId().getUUID().toString();
-        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 81fe4b4..0000000
--- a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/hibernate/HibernateNodeState.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 f942e98..0000000
--- a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/hibernate/HibernatePersistenceManager.java
+++ /dev/null
@@ -1,666 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 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.NodeId;
-import org.apache.jackrabbit.core.PropertyId;
-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.jackrabbit.core.value.BLOBFileValue;
-import org.apache.jackrabbit.core.value.InternalValue;
-import org.apache.jackrabbit.name.QName;
-import org.apache.log4j.Logger;
-
-import javax.jcr.PropertyType;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * 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.getParentId().getUUID().toString(),
-                    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.getParentId().getUUID().toString(),
-                        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();
-                PropertyId id = new PropertyId(
-                        NodeId.valueOf(curNodeReference.getPropertyParentUUID()),
-                        QName.valueOf(curNodeReference.getPropertyName()));
-                refs.addReference(id);
-            }
-            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.getParentId().getUUID().toString(),
-                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.getParentId().getUUID().toString(),
-                                   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.getParentId().getUUID().toString());
-                            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.getParentId().getUUID().toString(),
-                    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.getId().toString());
-            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.getParentId().getUUID().toString(),
-                                       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, null, null, NodeState.STATUS_NEW, false);
-    }
-
-    /**
-     * @see PersistenceManager#createNew
-     */
-    public PropertyState createNew(PropertyId id)
-    {
-        return new PropertyState(id, 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 d5d6bba..0000000
--- a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ojb/OJBNodeState.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 b3b8b64..0000000
--- a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ojb/OJBPersistenceManager.java
+++ /dev/null
@@ -1,566 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 org.apache.jackrabbit.core.NodeId;
-import org.apache.jackrabbit.core.PropertyId;
-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.jackrabbit.core.value.BLOBFileValue;
-import org.apache.jackrabbit.core.value.InternalValue;
-import org.apache.jackrabbit.name.QName;
-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;
-
-import javax.jcr.PropertyType;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.util.ArrayList;
-import java.util.Iterator;
-
-/**
- * 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().toString());
-            QueryByIdentity query = new QueryByIdentity(nodeState);
-            OJBNodeState result = (OJBNodeState) broker.getObjectByQuery(query);
-            if (result == null)
-            {
-                throw new NoSuchItemStateException(nodeId.getUUID().toString());
-            }
-            NodeState state = createNew(nodeId);
-            result.toPersistentNodeState(state);
-            return state;
-        } catch (PersistenceBrokerException e)
-        {
-            throw new ItemStateException(e.getMessage(), 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.getParentId().toString());
-                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.getMessage(), 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(NodeId.valueOf(curNodeReference
-                        .getPropertyParentUUID()), QName
-                        .valueOf(curNodeReference.getPropertyName())));
-            }
-            return refs;
-        } catch (PersistenceBrokerException e)
-        {
-            throw new ItemStateException(e.getMessage(), 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.getMessage(), 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.getMessage(), 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.getMessage(), 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.getParentId().getUUID().toString());
-                        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.getParentId().getUUID().toString());
-                            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.getParentId().getUUID().toString(),
-                    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.getParentId().getUUID().toString());
-            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, null, null, NodeState.STATUS_NEW, false);
-    }
-
-    /**
-     * @see PersistenceManager#createNew
-     */
-    public PropertyState createNew(PropertyId id)
-    {
-        return new PropertyState(id, 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 f92ecea..0000000
--- a/contrib/orm-persistence/src/java/org/apache/jackrabbit/core/state/orm/ojb/ValuesToStringFieldConversion.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 53d6f37..0000000
--- a/contrib/orm-persistence/src/test/org/apache/jackrabbit/test/orm/BlobTest.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 95f87e0..0000000
--- a/contrib/orm-persistence/src/test/org/apache/jackrabbit/test/orm/TestAll.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 d49b329..0000000
--- a/contrib/orm-persistence/src/test/org/apache/jackrabbit/test/orm/XMLImportSpeedTest.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 8afffb2..0000000
--- a/contrib/phpcr/PHPCR/AccessDeniedException.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 951bb25..0000000
--- a/contrib/phpcr/PHPCR/Credentials.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 bf57fde..0000000
--- a/contrib/phpcr/PHPCR/IOException.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 70fcde1..0000000
--- a/contrib/phpcr/PHPCR/IllegalArgumentException.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 5c88978..0000000
--- a/contrib/phpcr/PHPCR/IllegalStateException.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 2572c50..0000000
--- a/contrib/phpcr/PHPCR/InvalidItemStateException.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 38e641c..0000000
--- a/contrib/phpcr/PHPCR/InvalidSerializedDataException.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 78bb5fb..0000000
--- a/contrib/phpcr/PHPCR/Item.php
+++ /dev/null
@@ -1,384 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 0c78f37..0000000
--- a/contrib/phpcr/PHPCR/ItemExistsException.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 ce1e517..0000000
--- a/contrib/phpcr/PHPCR/ItemNotFoundException.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 d00d083..0000000
--- a/contrib/phpcr/PHPCR/ItemVisitor.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 acdedb0..0000000
--- a/contrib/phpcr/PHPCR/LoginException.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 1186925..0000000
--- a/contrib/phpcr/PHPCR/MergeException.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 c694372..0000000
--- a/contrib/phpcr/PHPCR/NamespaceException.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 8331058..0000000
--- a/contrib/phpcr/PHPCR/NamespaceRegistry.php
+++ /dev/null
@@ -1,143 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 35f428e..0000000
--- a/contrib/phpcr/PHPCR/NoSuchElementException.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 e0becf7..0000000
--- a/contrib/phpcr/PHPCR/NoSuchWorkspaceException.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 5fb4e00..0000000
--- a/contrib/phpcr/PHPCR/Node.php
+++ /dev/null
@@ -1,940 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 3cd5f2e..0000000
--- a/contrib/phpcr/PHPCR/NodeIterator.php
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 70001c0..0000000
--- a/contrib/phpcr/PHPCR/NumberFormatException.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 5869b19..0000000
--- a/contrib/phpcr/PHPCR/PathNotFoundException.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 7d7b0a5..0000000
--- a/contrib/phpcr/PHPCR/Property.php
+++ /dev/null
@@ -1,309 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 60c6c6c..0000000
--- a/contrib/phpcr/PHPCR/PropertyIterator.php
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 5235e55..0000000
--- a/contrib/phpcr/PHPCR/PropertyType.php
+++ /dev/null
@@ -1,153 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 f478625..0000000
--- a/contrib/phpcr/PHPCR/RangeIterator.php
+++ /dev/null
@@ -1,57 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 db91d2c..0000000
--- a/contrib/phpcr/PHPCR/ReferentialIntegrityException.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 254442b..0000000
--- a/contrib/phpcr/PHPCR/Repository.php
+++ /dev/null
@@ -1,183 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 e9608db..0000000
--- a/contrib/phpcr/PHPCR/RepositoryException.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 a002157..0000000
--- a/contrib/phpcr/PHPCR/SAXException.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 b37fe13..0000000
--- a/contrib/phpcr/PHPCR/Session.php
+++ /dev/null
@@ -1,714 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 15dbf5a..0000000
--- a/contrib/phpcr/PHPCR/SimpleCredentials.php
+++ /dev/null
@@ -1,151 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 4b22948..0000000
--- a/contrib/phpcr/PHPCR/UnsupportedRepositoryOperationException.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 e54323d..0000000
--- a/contrib/phpcr/PHPCR/Value.php
+++ /dev/null
@@ -1,228 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 4d9dc7e..0000000
--- a/contrib/phpcr/PHPCR/ValueFactory.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 62bd31e..0000000
--- a/contrib/phpcr/PHPCR/ValueFormatException.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 999f686..0000000
--- a/contrib/phpcr/PHPCR/Workspace.php
+++ /dev/null
@@ -1,598 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 45ad56e..0000000
--- a/contrib/phpcr/PHPCR/lock/Lock.php
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 b61f04c..0000000
--- a/contrib/phpcr/PHPCR/lock/LockException.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 c40048c..0000000
--- a/contrib/phpcr/PHPCR/nodetype/ConstraintViolationException.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 90f924e..0000000
--- a/contrib/phpcr/PHPCR/nodetype/ItemDefinition.php
+++ /dev/null
@@ -1,101 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 56ac365..0000000
--- a/contrib/phpcr/PHPCR/nodetype/NoSuchNodeTypeException.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 b98af78..0000000
--- a/contrib/phpcr/PHPCR/nodetype/NodeDefinition.php
+++ /dev/null
@@ -1,68 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 931f853..0000000
--- a/contrib/phpcr/PHPCR/nodetype/NodeType.php
+++ /dev/null
@@ -1,178 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 9cd75e7..0000000
--- a/contrib/phpcr/PHPCR/nodetype/NodeTypeIterator.php
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 1985e39..0000000
--- a/contrib/phpcr/PHPCR/nodetype/NodeTypeManager.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 4aaa2db..0000000
--- a/contrib/phpcr/PHPCR/nodetype/PropertyDefinition.php
+++ /dev/null
@@ -1,238 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 fe91233..0000000
--- a/contrib/phpcr/PHPCR/observation/Event.php
+++ /dev/null
@@ -1,117 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 0fffa85..0000000
--- a/contrib/phpcr/PHPCR/observation/EventIterator.php
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 93e496b..0000000
--- a/contrib/phpcr/PHPCR/observation/EventListener.php
+++ /dev/null
@@ -1,48 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 d1ada0c..0000000
--- a/contrib/phpcr/PHPCR/observation/EventListenerIterator.php
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 bc5ad11..0000000
--- a/contrib/phpcr/PHPCR/observation/ObservationManager.php
+++ /dev/null
@@ -1,109 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 23f49fd..0000000
--- a/contrib/phpcr/PHPCR/query/InvalidQueryException.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 3893a42..0000000
--- a/contrib/phpcr/PHPCR/query/Query.php
+++ /dev/null
@@ -1,156 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 cb9b7a6..0000000
--- a/contrib/phpcr/PHPCR/query/QueryManager.php
+++ /dev/null
@@ -1,78 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 dfffbe0..0000000
--- a/contrib/phpcr/PHPCR/query/QueryResult.php
+++ /dev/null
@@ -1,66 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 1c6bd67..0000000
--- a/contrib/phpcr/PHPCR/query/Row.php
+++ /dev/null
@@ -1,57 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 3abe7b0..0000000
--- a/contrib/phpcr/PHPCR/query/RowIterator.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 8ac8c0e..0000000
--- a/contrib/phpcr/PHPCR/util/ISO8601.php
+++ /dev/null
@@ -1,67 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 d867d21..0000000
--- a/contrib/phpcr/PHPCR/util/TraversingItemVisitor.php
+++ /dev/null
@@ -1,200 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 a6e0789..0000000
--- a/contrib/phpcr/PHPCR/version/OnParentVersionAction.php
+++ /dev/null
@@ -1,278 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 73529b6..0000000
--- a/contrib/phpcr/PHPCR/version/Version.php
+++ /dev/null
@@ -1,75 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 3e5b9f7..0000000
--- a/contrib/phpcr/PHPCR/version/VersionException.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 c29da5b..0000000
--- a/contrib/phpcr/PHPCR/version/VersionHistory.php
+++ /dev/null
@@ -1,211 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 9dff304..0000000
--- a/contrib/phpcr/PHPCR/version/VersionIterator.php
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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/project.properties b/contrib/project.properties
deleted file mode 100644
index b496dce..0000000
--- a/contrib/project.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-# ------------------------------- multiproject
-maven.multiproject.basedir=${basedir}
-maven.multiproject.includes=*/project.xml
-maven.multiproject.excludes=
-maven.multiproject.aggregateDir=
\ No newline at end of file
diff --git a/contrib/project.xml b/contrib/project.xml
deleted file mode 100644
index d71ecc4..0000000
--- a/contrib/project.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0"?>
-<project>
-    <!-- ====================================================================== -->
-    <!-- P R O J E C T  D E S C R I P T I O N                                   -->
-    <!-- ====================================================================== -->
-    <pomVersion>3</pomVersion>
-    <id>org.apache.jackrabbit</id>
-    <name>Fake Contrib Project</name>
-    <currentVersion>1.0</currentVersion>
-
-    <!-- ====================================================================== -->
-    <!-- D E P E N D E N C I E S                                                -->
-    <!-- ====================================================================== -->
-    <dependencies>
-    </dependencies>
-</project>
diff --git a/contrib/tck-candidate/README.txt b/contrib/tck-candidate/README.txt
deleted file mode 100644
index 7b93eee..0000000
--- a/contrib/tck-candidate/README.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-This contribution builds a Web Application that starts a
-Jackrabbit repository and registers it in JNDI.
-
-On startup the repository is initialized with namespaces,
-node types and test content that is required to run the
-JSR-170 TCK on Jackrabbit.
-
-In order to run the TCK with this war file follow these steps:
-
-1) delete folder <tck-install>/bin/tck-webapp/jackrabbit
-2) delete folder <tck-install>/bin/tck-webapp/webapps/test-candidate
-3) copy target/tck-candidate.war to <tck-install>/bin/tck-webapp/webapps
-4) start <tck-install>/bin/tck-webapp/server.bat
\ No newline at end of file
diff --git a/contrib/tck-candidate/maven.xml b/contrib/tck-candidate/maven.xml
deleted file mode 100644
index 6caf240..0000000
--- a/contrib/tck-candidate/maven.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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:war" 
-        xmlns:m="jelly:maven"
-        xmlns:ant="jelly:ant"
-        xmlns:j="jelly:core">
-
-     <postGoal name="war:webapp">
-         <ant:copy file="resources/nodetypes/custom_nodetypes.xml" todir="target/${pom.artifactId}/WEB-INF/classes" />
-         <ant:copy file="resources/testdata/testdata.xml" todir="target/${pom.artifactId}/WEB-INF/classes" />
-     </postGoal>
-</project>
diff --git a/contrib/tck-candidate/project.properties b/contrib/tck-candidate/project.properties
deleted file mode 100644
index b2f4db6..0000000
--- a/contrib/tck-candidate/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-candidate/project.xml b/contrib/tck-candidate/project.xml
deleted file mode 100644
index de9b554..0000000
--- a/contrib/tck-candidate/project.xml
+++ /dev/null
@@ -1,133 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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-candidate</id>
-    <name>Jackrabbit TCK test candidate 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>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>3.8.1</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>
-
-        <!-- 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-core</artifactId>
-            <version>1.0</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>
-
-    
-        <!-- own dependencies (build only) -->
-        <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/main/java</sourceDirectory>
-        <resources>
-            <resource>
-                <directory>src/main/java</directory>
-                <includes>
-                    <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-candidate/resources/testdata/testdata.xml b/contrib/tck-candidate/resources/testdata/testdata.xml
deleted file mode 100644
index 42ba601..0000000
--- a/contrib/tck-candidate/resources/testdata/testdata.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<sv:node sv:name="testdata" xmlns:docview012="www.apache.org/jackrabbit/test/namespaceImportTest012" xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:docview01="www.apache.org/jackrabbit/test/namespaceImportTest01" xmlns:crx="http://www.day.com/crx/1.0" xmlns:mix="http://www.jcp.org/jcr/mix/1.0" xmlns:rep="internal" xmlns:test="http://www.apache.org/jackrabbit/test" xmlns:nt="http://www.jcp.org/jcr/nt/1.0" xmlns:docview0="www.apache.org/jackrabbit/test/namespaceImportTest0" xmlns:docview="www.apache.org/jackrabbit/test/namespaceImportTest" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2004/10/xpath-functions" xmlns:sv="http://www.jcp.org/jcr/sv/1.0" xmlns="" xmlns:tst="www.apache.org/jackrabbit/test/namespaceRegistryTest"><sv:property sv:name="jcr:primaryType" sv:type="Name"><sv:value>nt:unstructured</sv:value></sv:property><sv:node sv:name="query"><sv:property sv:name="jcr:primaryType" sv:type="Name"><sv:value>nt:unstructured</sv:value></sv:property><sv:node sv:name="node1"><sv:property sv:name="jcr:primaryType" sv:type="Name"><sv:value>nt:unstructured</sv:value></sv:property><sv:property sv:name="prop1" sv:type="String"><sv:value>You can have it good, cheap, or fast. Any two.</sv:value></sv:property></sv:node><sv:node sv:name="node1"><sv:property sv:name="jcr:primaryType" sv:type="Name"><sv:value>nt:unstructured</sv:value></sv:property><sv:property sv:name="prop1" sv:type="String"><sv:value>foo bar</sv:value></sv:property></sv:node><sv:node sv:name="node1"><sv:property sv:name="jcr:primaryType" sv:type="Name"><sv:value>nt:unstructured</sv:value></sv:property><sv:property sv:name="prop1" sv:type="String"><sv:value>Hello world!</sv:value></sv:property></sv:node><sv:node sv:name="node2"><sv:property sv:name="jcr:primaryType" sv:type="Name"><sv:value>nt:unstructured</sv:value></sv:property><sv:property sv:name="prop1" sv:type="String"><sv:value>Apache Jackrabbit</sv:value></sv:property></sv:node></sv:node><sv:node sv:name="node"><sv:property sv:name="jcr:primaryType" sv:type="Name"><sv:value>nt:unstructured</sv:value></sv:property><sv:node sv:name="myResource"><sv:property sv:name="jcr:primaryType" sv:type="Name"><sv:value>nt:resource</sv:value></sv:property><sv:property sv:name="jcr:uuid" sv:type="String"><sv:value>2cdd6e03-cdd2-4d02-a7a7-c29ef60298e3</sv:value></sv:property><sv:property sv:name="jcr:encoding" sv:type="String"><sv:value>UTF-8</sv:value></sv:property><sv:property sv:name="jcr:data" sv:type="Binary"><sv:value>SGVsbG8gd8O2cmxkLg==</sv:value></sv:property><sv:property sv:name="jcr:mimeType" sv:type="String"><sv:value>text/plain</sv:value></sv:property><sv:property sv:name="jcr:lastModified" sv:type="Date"><sv:value>2005-05-17T12:13:50.238+02:00</sv:value></sv:property></sv:node><sv:node sv:name="reference"><sv:property sv:name="jcr:primaryType" sv:type="Name"><sv:value>nt:unstructured</sv:value></sv:property><sv:property sv:name="jcr:mixinTypes" sv:type="Name"><sv:value>mix:referenceable</sv:value></sv:property><sv:property sv:name="jcr:uuid" sv:type="String"><sv:value>e5621200-46b4-4c6f-969b-8ffccca9cae2</sv:value></sv:property><sv:property sv:name="ref" sv:type="Reference"><sv:value>2cdd6e03-cdd2-4d02-a7a7-c29ef60298e3</sv:value></sv:property></sv:node><sv:node sv:name="multiReference"><sv:property sv:name="jcr:primaryType" sv:type="Name"><sv:value>nt:unstructured</sv:value></sv:property><sv:property sv:name="ref" sv:type="Reference"><sv:value>2cdd6e03-cdd2-4d02-a7a7-c29ef60298e3</sv:value><sv:value>e5621200-46b4-4c6f-969b-8ffccca9cae2</sv:value></sv:property></sv:node></sv:node><sv:node sv:name="property"><sv:property sv:name="jcr:primaryType" sv:type="Name"><sv:value>nt:unstructured</sv:value></sv:property><sv:property sv:name="long" sv:type="Long"><sv:value>90834953485278298</sv:value></sv:property><sv:property sv:name="calendar" sv:type="Date"><sv:value>2005-07-18T17:30:50.368+02:00</sv:value></sv:property><sv:property sv:name="double" sv:type="Double"><sv:value>3.141592653589793</sv:value></sv:property><sv:property sv:name="boolean" sv:type="Boolean"><sv:value>true</sv:value></sv:property><sv:property sv:name="path" sv:type="Path"><sv:value>/</sv:value></sv:property><sv:property sv:name="multi" sv:type="String"><sv:value>one</sv:value><sv:value>two</sv:value><sv:value>three</sv:value></sv:property></sv:node><sv:node sv:name="docViewTest"><sv:property sv:name="jcr:primaryType" sv:type="Name"><sv:value>nt:unstructured</sv:value></sv:property><sv:node sv:name="invalidXmlName"><sv:property sv:name="jcr:primaryType" sv:type="Name"><sv:value>nt:unstructured</sv:value></sv:property><sv:property sv:name="propName" sv:type="String"><sv:value>some text</sv:value></sv:property></sv:node><sv:node sv:name="jcr:xmltext"><sv:property sv:name="jcr:primaryType" sv:type="Name"><sv:value>nt:unstructured</sv:value></sv:property><sv:property sv:name="jcr:xmlcharacters" sv:type="String"><sv:value>A text without any special character.</sv:value></sv:property></sv:node><sv:node sv:name="some-element"><sv:property sv:name="jcr:primaryType" sv:type="Name"><sv:value>nt:unstructured</sv:value></sv:property></sv:node><sv:node sv:name="jcr:xmltext"><sv:property sv:name="jcr:primaryType" sv:type="Name"><sv:value>nt:unstructured</sv:value></sv:property><sv:property sv:name="jcr:xmlcharacters" sv:type="String"><sv:value> The entity reference characters: &lt;, ', ,&amp;, &gt;,  " should be escaped in xml export. </sv:value></sv:property></sv:node><sv:node sv:name="some-element"><sv:property sv:name="jcr:primaryType" sv:type="Name"><sv:value>nt:unstructured</sv:value></sv:property></sv:node><sv:node sv:name="jcr:xmltext"><sv:property sv:name="jcr:primaryType" sv:type="Name"><sv:value>nt:unstructured</sv:value></sv:property><sv:property sv:name="jcr:xmlcharacters" sv:type="String"><sv:value>A text without any special character.</sv:value></sv:property></sv:node><sv:node sv:name="bigNode"><sv:property sv:name="jcr:primaryType" sv:type="Name"><sv:value>nt:unstructured</sv:value></sv:property><sv:property sv:name="propName3" sv:type="String"><sv:value>text 1</sv:value></sv:property><sv:property sv:name="propName1" sv:type="String"><sv:value>text 1</sv:value></sv:property><sv:property sv:name="propName2" sv:type="String"><sv:value>multival text 1</sv:value><sv:value>multival text 2</sv:value><sv:value>multival text 3</sv:value></sv:property><sv:property sv:name="propName0" sv:type="Binary"><sv:value>U0dWc2JHOGdkOE8yY214a0xnPT0=</sv:value><sv:value>U0dWc2JHOGdkOE8yY214a0xnPT0=</sv:value></sv:property></sv:node><sv:node sv:name="validNames"><sv:property sv:name="jcr:primaryType" sv:type="Name"><sv:value>nt:unstructured</sv:value></sv:property><sv:node sv:name="validMultiNoBin"><sv:property sv:name="jcr:primaryType" sv:type="Name"><sv:value>nt:unstructured</sv:value></sv:property><sv:property sv:name="propName" sv:type="String"><sv:value>multival text 1</sv:value><sv:value>multival text 2</sv:value><sv:value>multival text 3</sv:value></sv:property></sv:node><sv:node sv:name="validMultiBin"><sv:property sv:name="jcr:primaryType" sv:type="Name"><sv:value>nt:unstructured</sv:value></sv:property><sv:property sv:name="jcrData" sv:type="Binary"><sv:value>U0dWc2JHOGdkOE8yY214a0xnPT0=</sv:value><sv:value>U0dWc2JHOGdkOE8yY214a0xnPT0=</sv:value></sv:property><sv:property sv:name="jcr:encoding" sv:type="String"><sv:value>UTF-8</sv:value></sv:property><sv:property sv:name="jcr:mimeType" sv:type="String"><sv:value>text/plain</sv:value></sv:property><sv:property sv:name="jcr:lastModified" sv:type="Date"><sv:value>2005-05-17T12:13:50.458+02:00</sv:value></sv:property></sv:node><sv:node sv:name="validNoBin"><sv:property sv:name="jcr:primaryType" sv:type="Name"><sv:value>nt:unstructured</sv:value></sv:property><sv:property sv:name="propName" sv:type="String"><sv:value>text 1</sv:value></sv:property></sv:node><sv:node sv:name="validBin"><sv:property sv:name="jcr:primaryType" sv:type="Name"><sv:value>nt:unstructured</sv:value></sv:property><sv:property sv:name="jcrData" sv:type="Binary"><sv:value>SGVsbG8gd8O2cmxkLg==</sv:value></sv:property><sv:property sv:name="jcr:encoding" sv:type="String"><sv:value>UTF-8</sv:value></sv:property><sv:property sv:name="jcr:mimeType" sv:type="String"><sv:value>text/plain</sv:value></sv:property><sv:property sv:name="jcr:lastModified" sv:type="Date"><sv:value>2005-05-17T12:13:50.458+02:00</sv:value></sv:property></sv:node></sv:node><sv:node sv:name="invalidNames"><sv:property sv:name="jcr:primaryType" sv:type="Name"><sv:value>nt:unstructured</sv:value></sv:property><sv:node sv:name="invalidMultiNoBin"><sv:property sv:name="jcr:primaryType" sv:type="Name"><sv:value>nt:unstructured</sv:value></sv:property><sv:property sv:name="Prop&lt;>prop" sv:type="String"><sv:value>multival text 1</sv:value><sv:value>multival text 2</sv:value><sv:value>multival text 3</sv:value></sv:property></sv:node><sv:node sv:name="invalidMultiBin"><sv:property sv:name="jcr:primaryType" sv:type="Name"><sv:value>nt:unstructured</sv:value></sv:property><sv:property sv:name="Prop&lt;>prop" sv:type="Binary"><sv:value>U0dWc2JHOGdkOE8yY214a0xnPT0=</sv:value><sv:value>U0dWc2JHOGdkOE8yY214a0xnPT0=</sv:value></sv:property><sv:property sv:name="jcr:encoding" sv:type="String"><sv:value>UTF-8</sv:value></sv:property><sv:property sv:name="jcr:mimeType" sv:type="String"><sv:value>text/plain</sv:value></sv:property><sv:property sv:name="jcr:lastModified" sv:type="Date"><sv:value>2005-05-17T12:13:50.468+02:00</sv:value></sv:property></sv:node><sv:node sv:name="invalidNoBin"><sv:property sv:name="jcr:primaryType" sv:type="Name"><sv:value>nt:unstructured</sv:value></sv:property><sv:property sv:name="Prop&lt;>prop" sv:type="String"><sv:value>text 1</sv:value></sv:property></sv:node><sv:node sv:name="invalidBin"><sv:property sv:name="jcr:primaryType" sv:type="Name"><sv:value>nt:unstructured</sv:value></sv:property><sv:property sv:name="Prop&lt;>prop" sv:type="Binary"><sv:value>SGVsbG8gd8O2cmxkLg==</sv:value></sv:property><sv:property sv:name="jcr:encoding" sv:type="String"><sv:value>UTF-8</sv:value></sv:property><sv:property sv:name="jcr:mimeType" sv:type="String"><sv:value>text/plain</sv:value></sv:property><sv:property sv:name="jcr:lastModified" sv:type="Date"><sv:value>2005-05-17T12:13:50.468+02:00</sv:value></sv:property></sv:node></sv:node></sv:node><sv:node sv:name="serialization"><sv:property sv:name="jcr:primaryType" sv:type="Name"><sv:value>nt:unstructured</sv:value></sv:property></sv:node><sv:node sv:name="custom sample nodes"><sv:property sv:name="jcr:primaryType" sv:type="Name"><sv:value>nt:unstructured</sv:value></sv:property><sv:node sv:name="test:versionable"><sv:property sv:name="jcr:primaryType" sv:type="Name"><sv:value>test:versionable</sv:value></sv:property><sv:property sv:name="jcr:uuid" sv:type="String"><sv:value>fbeb8e11-ca39-48d4-adb6-63e72e7a9c3d</sv:value></sv:property><sv:property sv:name="jcr:isCheckedOut" sv:type="Boolean"><sv:value>true</sv:value></sv:property><sv:property sv:name="jcr:versionHistory" sv:type="Reference"><sv:value>e4bdb989-f237-412c-8873-73bf9ccc56e3</sv:value></sv:property><sv:property sv:name="jcr:baseVersion" sv:type="Reference"><sv:value>c991ead4-69b7-40cf-b1c4-aa79f1b184da</sv:value></sv:property><sv:property sv:name="jcr:predecessors" sv:type="Reference"><sv:value>c991ead4-69b7-40cf-b1c4-aa79f1b184da</sv:value></sv:property></sv:node><sv:node sv:name="test:refTargetNode"><sv:property sv:name="jcr:primaryType" sv:type="Name"><sv:value>test:refTargetNode</sv:value></sv:property><sv:property sv:name="jcr:uuid" sv:type="String"><sv:value>6bd9fd75-77db-470a-99d9-94a22f3c280a</sv:value></sv:property><sv:property sv:name="jcr:versionHistory" sv:type="Reference"><sv:value>ece49f64-9f32-4455-80db-23fdd1f50ebc</sv:value></sv:property><sv:property sv:name="jcr:isCheckedOut" sv:type="Boolean"><sv:value>true</sv:value></sv:property><sv:property sv:name="jcr:baseVersion" sv:type="Reference"><sv:value>ef97cc5f-3442-4852-ae28-5d3fba31bbf5</sv:value></sv:property><sv:property sv:name="jcr:predecessors" sv:type="Reference"><sv:value>ef97cc5f-3442-4852-ae28-5d3fba31bbf5</sv:value></sv:property></sv:node><sv:node sv:name="test:canSetProperty"><sv:property sv:name="jcr:primaryType" sv:type="Name"><sv:value>test:canSetProperty</sv:value></sv:property></sv:node><sv:node sv:name="test:canAddChildNode"><sv:property sv:name="jcr:primaryType" sv:type="Name"><sv:value>test:canAddChildNode</sv:value></sv:property></sv:node><sv:node sv:name="test:setProperty"><sv:property sv:name="jcr:primaryType" sv:type="Name"><sv:value>test:setProperty</sv:value></sv:property><sv:property sv:name="jcr:uuid" sv:type="String"><sv:value>3ad78700-df4d-416a-b0f6-1bfb5acd360f</sv:value></sv:property></sv:node><sv:node sv:name="test:setPropertyAssumingType"><sv:property sv:name="jcr:primaryType" sv:type="Name"><sv:value>test:setPropertyAssumingType</sv:value></sv:property></sv:node><sv:node sv:name="test:sameNameSibsFalseChildNodeDefinition"><sv:property sv:name="jcr:primaryType" sv:type="Name"><sv:value>test:sameNameSibsFalseChildNodeDefinition</sv:value></sv:property></sv:node></sv:node></sv:node>
\ No newline at end of file
diff --git a/contrib/tck-candidate/src/main/java/org/apache/jackrabbit/server/RepositorySetup.java b/contrib/tck-candidate/src/main/java/org/apache/jackrabbit/server/RepositorySetup.java
deleted file mode 100644
index aa9d280..0000000
--- a/contrib/tck-candidate/src/main/java/org/apache/jackrabbit/server/RepositorySetup.java
+++ /dev/null
@@ -1,260 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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.core.SessionImpl;
-import org.apache.jackrabbit.core.WorkspaceImpl;
-import org.apache.jackrabbit.core.nodetype.xml.NodeTypeReader;
-import org.apache.jackrabbit.core.nodetype.NodeTypeDef;
-import org.apache.jackrabbit.core.nodetype.NodeTypeManagerImpl;
-import org.apache.jackrabbit.BaseException;
-
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.NamespaceRegistry;
-import javax.jcr.ImportUUIDBehavior;
-import javax.jcr.nodetype.NoSuchNodeTypeException;
-import java.io.InputStream;
-import java.io.IOException;
-import java.util.Properties;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Arrays;
-
-/**
- * <code>RepositorySetup</code> initializes the test candidate with required
- * namespaces, node types and test content.
- */
-public class RepositorySetup {
-
-    private static final String NAMESPACES_RESOURCE = "namespaces.properties";
-
-    private static final String NODETYPES_RESOURCE = "custom_nodetypes.xml";
-
-    private static final String TEST_CONTENT_RESOURCE = "testdata.xml";
-
-    private static final String TEST_WORKSPACE_NAME = "test";
-
-    /**
-     * The setup tasks to run.
-     */
-    private final Task[] TASKS = {
-        new RegisterNamespaces(),
-        new RegisterNodeTypes(),
-        new ImportTestContent(),
-        new CreateTestWorkspace()
-    };
-
-    /**
-     * The session to the repository to setup.
-     */
-    private final SessionImpl session;
-
-    /**
-     * Private constructor.
-     */
-    private RepositorySetup(SessionImpl session) {
-        this.session = session;
-    }
-
-    /**
-     * Executes the repository setup tasks.
-     *
-     * @throws RepositoryException if an error occurs while running the tasks.
-     */
-    private void execute() throws RepositoryException {
-        for (int i = 0; i < TASKS.length; i++) {
-            TASKS[i].execute();
-        }
-    }
-
-    /**
-     * Runs the repository setup.
-     *
-     * @param session the session of the repository to setup.
-     * @throws RepositoryException      if an error occurs while running the
-     *                                  tasks.
-     * @throws IllegalArgumentException if <code>session</code> is not a jackrabbit
-     *                                  session.
-     */
-    public static void run(Session session) throws RepositoryException {
-        if (session instanceof SessionImpl) {
-            new RepositorySetup((SessionImpl) session).execute();
-        } else {
-            throw new IllegalArgumentException("not a Jackrabbit session");
-        }
-    }
-
-    /**
-     * Returns an input stream for reading the specified resource.
-     *
-     * @param name the resource name.
-     * @return An input stream for reading the resource, or <code>null</code> if
-     *         the resource could not be found
-     */
-    private static InputStream getResource(String name) {
-        return RepositorySetup.class.getClassLoader().getResourceAsStream(name);
-    }
-
-    /**
-     * Registers the <code>namespaces</code>.
-     *
-     * @param namespaces the namespaces to register.
-     * @param session the session to register the namespaces.
-     */
-    private static void registerNamespaces(Properties namespaces,
-                                           Session session)
-            throws RepositoryException {
-        NamespaceRegistry nsReg = session.getWorkspace().getNamespaceRegistry();
-        for (Iterator it = namespaces.keySet().iterator(); it.hasNext();) {
-            String prefix = (String) it.next();
-            String uri = namespaces.getProperty(prefix);
-            try {
-                nsReg.registerNamespace(prefix, uri);
-            } catch (RepositoryException e) {
-                // then this namespace is already registered.
-            }
-        }
-    }
-
-    private interface Task {
-
-        /**
-         * Executes this task.
-         *
-         * @throws RepositoryException if an error occurs while running this
-         *                             tasks.
-         */
-        public void execute() throws RepositoryException;
-    }
-
-    /**
-     * Registers namespaces that are needed to run the test cases.
-     */
-    private final class RegisterNamespaces implements Task {
-
-        /**
-         * @inheritDoc
-         */
-        public void execute() throws RepositoryException {
-            InputStream is = getResource(NAMESPACES_RESOURCE);
-            if (is != null) {
-                try {
-                    Properties namespaces = new Properties();
-                    namespaces.load(is);
-
-                    registerNamespaces(namespaces, session);
-                } catch (IOException e) {
-                    throw new RepositoryException(e.getMessage());
-                } finally {
-                    try {
-                        is.close();
-                    } catch (IOException e1) {
-                        // ignore
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Registers node types that are needed to run the test cases.
-     */
-    private final class RegisterNodeTypes implements Task {
-
-        /**
-         * @inheritDoc
-         */
-        public void execute() throws RepositoryException {
-            InputStream is = getResource(NODETYPES_RESOURCE);
-            if (is != null) {
-                try {
-                    NodeTypeReader ntReader = new NodeTypeReader(is);
-                    registerNamespaces(ntReader.getNamespaces(), session);
-
-                    NodeTypeManagerImpl ntMgr = session.getNodeTypeManager();
-                    NodeTypeDef[] nodeTypes = ntReader.getNodeTypeDefs();
-                    List unregisteredNTs = new ArrayList();
-                    for (int i = 0; i < nodeTypes.length; i++) {
-                        try {
-                            ntMgr.getNodeType(nodeTypes[i].getName());
-                        } catch (NoSuchNodeTypeException e) {
-                            // register the node type
-                            unregisteredNTs.add(nodeTypes[i]);
-                        }
-                    }
-                    ntMgr.getNodeTypeRegistry().registerNodeTypes(unregisteredNTs);
-                } catch (BaseException e) {
-                    throw new RepositoryException(e.getMessage());
-                } catch (IOException e) {
-                    throw new RepositoryException(e.getMessage());
-                } finally {
-                    try {
-                        is.close();
-                    } catch (IOException e1) {
-                        // ignore
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Imports test content into the repository if the repository is empty.
-     */
-    private final class ImportTestContent implements Task {
-
-        /**
-         * @inheritDoc
-         */
-        public void execute() throws RepositoryException {
-            InputStream is = getResource(TEST_CONTENT_RESOURCE);
-            if (is != null) {
-                try {
-                    if (!session.getRootNode().hasNode("testdata")) {
-                        session.getWorkspace().importXML("/", is,
-                                ImportUUIDBehavior.IMPORT_UUID_COLLISION_REMOVE_EXISTING);
-                    }
-                } catch (IOException e) {
-                    throw new RepositoryException(e.getMessage());
-                } finally {
-                    try {
-                        is.close();
-                    } catch (IOException e1) {
-                        // ignore
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Creates a workspace with name 'test' if it is not yet present.
-     */
-    private final class CreateTestWorkspace implements Task {
-
-        /**
-         * @inheritDoc
-         */
-        public void execute() throws RepositoryException {
-            List workspaces = Arrays.asList(session.getWorkspace().getAccessibleWorkspaceNames());
-            if (!workspaces.contains(TEST_WORKSPACE_NAME)) {
-                ((WorkspaceImpl) session.getWorkspace()).createWorkspace(TEST_WORKSPACE_NAME);
-            }
-        }
-    }
-}
diff --git a/contrib/tck-candidate/src/main/java/org/apache/jackrabbit/server/RepositoryStartupServlet.java b/contrib/tck-candidate/src/main/java/org/apache/jackrabbit/server/RepositoryStartupServlet.java
deleted file mode 100644
index 455eb21..0000000
--- a/contrib/tck-candidate/src/main/java/org/apache/jackrabbit/server/RepositoryStartupServlet.java
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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.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.naming.InitialContext;
-import javax.naming.NamingException;
-import javax.jcr.RepositoryException;
-import javax.jcr.SimpleCredentials;
-import java.util.Properties;
-import java.util.Enumeration;
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileInputStream;
-
-/**
- * The RepositoryStartupServlet starts a jackrabbit repository and registers it
- * to the JNDI environment.
- */
-public class RepositoryStartupServlet extends HttpServlet {
-
-    /**
-     * the default logger
-     */
-    private static Logger log;
-
-    /**
-     * 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 log4j config properties
-     */
-    public final static String INIT_PARAM_LOG4J_CONFIG = "log4j-config";
-
-    /**
-     * the registered repository
-     */
-    private RepositoryImpl repository;
-
-    /**
-     * the name of the repository as configured
-     */
-    private String repositoryName;
-
-    /**
-     * the jndi context, created base on configuration
-     */
-    private InitialContext jndiContext;
-
-    /**
-     * Initializes the servlet
-     *
-     * @throws ServletException
-     */
-    public void init() throws ServletException {
-        super.init();
-        initLog4J();
-        log.info("RepositoryStartupServlet initializing...");
-        initRepository();
-        registerJNDI();
-        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...");
-        }
-        unregisterJNDI();
-        repository.shutdown();
-        log("RepositoryStartupServlet shut down.");
-    }
-
-    /**
-     * Initializes Log4J
-     *
-     * @throws ServletException
-     */
-    private void initLog4J() throws ServletException {
-        // setup log4j
-        String log4jConfig = getServletConfig().getInitParameter(INIT_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 = Logger.getLogger(RepositoryStartupServlet.class);
-    }
-
-    /**
-     * 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 {
-            InputSource is = new InputSource(in);
-            RepositoryConfig config = RepositoryConfig.create(is, repositoryHome.getAbsolutePath());
-            repository = RepositoryImpl.create(config);
-        } catch (RepositoryException e) {
-            throw new ServletException("Error while creating repository", e);
-        }
-
-        // setup repository
-        SimpleCredentials cred = new SimpleCredentials("user", "".toCharArray());
-        try {
-            RepositorySetup.run(repository.login(cred));
-        } catch (RepositoryException e) {
-            log("Error while setting up repository", e);
-        }
-    }
-
-    /**
-     * Registers the repository in the JNDI context
-     *
-     * @throws ServletException
-     */
-    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.")) {
-                env.put(name, getServletConfig().getInitParameter(name));
-                log.info("  adding property to JNDI environment: " + name + "=" + env.getProperty(name));
-            }
-        }
-        try {
-            jndiContext = new InitialContext(env);
-            jndiContext.bind(repositoryName, repository);
-        } catch (NamingException e) {
-            throw new ServletException(e);
-        }
-        log.info("Repository bound to JNDI with name: " + repositoryName);
-    }
-
-    /**
-     * 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);
-            }
-        }
-    }
-
-}
diff --git a/contrib/tck-candidate/src/webapp/WEB-INF/repository/log4j.properties b/contrib/tck-candidate/src/webapp/WEB-INF/repository/log4j.properties
deleted file mode 100644
index 2728ce9..0000000
--- a/contrib/tck-candidate/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/tck-candidate/src/webapp/WEB-INF/repository/repository.xml b/contrib/tck-candidate/src/webapp/WEB-INF/repository/repository.xml
deleted file mode 100644
index fb1e252..0000000
--- a/contrib/tck-candidate/src/webapp/WEB-INF/repository/repository.xml
+++ /dev/null
@@ -1,236 +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.db.DerbyPersistenceManager">
-          <param name="url" value="jdbc:derby:${rep.home}/version/db;create=true"/>
-          <param name="schemaObjectPrefix" value="version_"/>
-        </PersistenceManager>
-    </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-candidate/src/webapp/WEB-INF/web.xml b/contrib/tck-candidate/src/webapp/WEB-INF/web.xml
deleted file mode 100644
index c328e85..0000000
--- a/contrib/tck-candidate/src/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,58 +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 TCK candidate web application</display-name>
-
-    <!-- ====================================================================== -->
-    <!-- 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.
-	    If you already have the repository registered in this appservers JNDI context,
-	    you do not need to use this servlet.
-	</description>
-	<servlet-class>org.apache.jackrabbit.server.RepositoryStartupServlet</servlet-class>
-
-	<init-param>
-	    <param-name>log4j-config</param-name>
-	    <param-value>/WEB-INF/repository/log4j.properties</param-value>
-            <description>initial log4j configuration</description>
-	</init-param>
-
-	<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</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</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>com.day.crx.jndi.provider.MemoryInitialContextFactory</param-value>
-	</init-param>
-
-	<load-on-startup>1</load-on-startup>
-    </servlet>
-</web-app>
\ No newline at end of file
diff --git a/contrib/tck-webapp/maven.xml b/contrib/tck-webapp/maven.xml
deleted file mode 100644
index 6793b03..0000000
--- a/contrib/tck-webapp/maven.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 ab3f65a..0000000
--- a/contrib/tck-webapp/project.xml
+++ /dev/null
@@ -1,180 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
-            <version>1.0</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-core</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 6f37927..0000000
--- a/contrib/tck-webapp/src/java/org/apache/jackrabbit/tck/TckHelper.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 db8a394..0000000
--- a/contrib/tck-webapp/src/java/org/apache/jackrabbit/tck/TckTestRunner.java
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 61af0b0..0000000
--- a/contrib/tck-webapp/src/java/org/apache/jackrabbit/tck/TestFinder.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 d13fbe7..0000000
--- a/contrib/tck-webapp/src/java/org/apache/jackrabbit/tck/TestResult.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 3e0a9e3..0000000
--- a/contrib/tck-webapp/src/java/org/apache/jackrabbit/tck/Tester.java
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 4fd234f..0000000
--- a/contrib/tck-webapp/src/java/org/apache/jackrabbit/tck/WebAppTestConfig.java
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 57cafe7..0000000
--- a/contrib/tck-webapp/src/java/org/apache/jackrabbit/tck/j2ee/RepositoryServlet.java
+++ /dev/null
@@ -1,314 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 b9513b4..0000000
--- a/contrib/tck-webapp/src/webapp/WEB-INF/classes/repositoryStubImpl.properties
+++ /dev/null
@@ -1,439 +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
-javax.jcr.tck.OnParentVersionIgnoreTest.nodename4=test:ignoreOnParentVersion
-javax.jcr.tck.OnParentVersionIgnoreTest.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 071a87d..0000000
--- a/contrib/tck-webapp/src/webapp/config.jsp
+++ /dev/null
@@ -1,109 +0,0 @@
-<%--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-        
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 e508f72..0000000
--- a/contrib/tck-webapp/src/webapp/docroot/ui/default.css
+++ /dev/null
@@ -1,513 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 a8174a9..0000000
--- a/contrib/tck-webapp/src/webapp/graph.jsp
+++ /dev/null
@@ -1,352 +0,0 @@
-<%--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-        
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 5f2b1b6..0000000
--- a/contrib/tck-webapp/src/webapp/index.jsp
+++ /dev/null
@@ -1,344 +0,0 @@
-<%--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-        
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 6676d9d..0000000
--- a/contrib/tck-webapp/src/webapp/preferences.jsp
+++ /dev/null
@@ -1,111 +0,0 @@
-<%--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-        
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 32dbe65..0000000
--- a/contrib/tck-webapp/src/webapp/resultlookup.jsp
+++ /dev/null
@@ -1,58 +0,0 @@
-<%--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-        
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 2fa6cb8..0000000
--- a/contrib/tck-webapp/src/webapp/set_checktime.jsp
+++ /dev/null
@@ -1,36 +0,0 @@
-<%--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-        
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 d13dfa8..0000000
--- a/contrib/tck-webapp/src/webapp/status.jsp
+++ /dev/null
@@ -1,23 +0,0 @@
-<%--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-        
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 00dbcf6..0000000
--- a/contrib/tck-webapp/src/webapp/submit_result.jsp
+++ /dev/null
@@ -1,141 +0,0 @@
-<%--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-        
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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 dd7b244..0000000
--- a/contrib/tck-webapp/src/webapp/update_exclude_list.jsp
+++ /dev/null
@@ -1,40 +0,0 @@
-<%--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  The ASF licenses this file to You
-   under the Apache License, Version 2.0 (the "License"); you may not
-   use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-        
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT 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/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 7ab6f42..0000000
--- a/contrib/vfs/src/java/org/apache/jackrabbit/core/fs/vfs/VFSFileSystem.java
+++ /dev/null
@@ -1,630 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 4a0e8dd..0000000
--- a/contrib/vfs/src/java/org/apache/jackrabbit/core/fs/vfs/VFSRAFOutputStream.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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 e542dcc..0000000
--- a/contrib/vfs/src/test/org/apache/jackrabbit/core/fs/vfs/VFSFileSystemTest.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF 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